IT教程 | 加入收藏 | 简体 | 繁体
Ejb分布式开发:Java基础StrutsSpringHibernateIbatis框架整合GUI编程Ejb分布式开发
当前位置: 首页 > Java教程 > Ejb分布式开发

Eclipse Apache Axis2 环境搭配开发webservice 详解

2014-04-04来源:[www.121ask.com]热度:0℃ 【字体:

配置Eclipse,Eclipse自带了开发WebService的工具。

打开Eclipse-->点击菜单windows-->Preferences-->WebServices-->Axis2Preferences-->设置Axis2 runtime location为Axis2下载后并解压的核心包的位置:

选择后Eclipse会自动检测包是否正确。如果successfully提示表示设置正确。

2.在Eclipse创建一个WebProject时,点击Configuration的Modify会出现下图界面:

勾选Axis2 Web Services按OK。回到新建WebProject界面,完成项目创建。

创建成功后会发现在WEB-INF文件夹下会多出一个axis2-web的文件夹,这个是Axis2的项目文件夹。

现在启动服务器会抛出异常,这是因为Eclipse在自动加载生成该项目时有几个问题需要手动修复,下面分别列出:

问题一:会抛出异常:java.lang.ClassNotFoundException: org.apache.axis2.transport.http.AxisAdminServlet

是因为生动生成的web.xml文件中所指定的AxisAdminServlet包路径有错。

自动生成的源码如下:

<servlet>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/servlet/AxisServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>*.jws</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <servlet>
    <display-name>Apache-Axis Admin Servlet Web Admin</display-name>
    <servlet-name>AxisAdminServlet</servlet-name>
    <servlet-class>org.apache.axis2.transport.http.AxisAdminServlet</servlet-class>
    <load-on-startup>100</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>AxisAdminServlet</servlet-name>
    <url-pattern>/axis2-admin/*</url-pattern>
  </servlet-mapping>

注意红色字体部分,我们可以去看一下所下载的Axis2的源包。AxisAdminServlet类所在的包路径并不在下列这个路径中org.apache.axis2.transport.http,该类是属于包org.apache.axis2.webapp下。(如果还报错,则反编译org.apache.axis2.webapp.AxisAdminServlet类放到工程里)

问题二:会抛出异常:java.lang.ClassNotFoundException: org.apache.http.HttpResponseFactory,是因为少JAR包。将开始下好的HttpCore4.1-alpha1包解压后主文件夹下的lib文件夹下有httpcore-4.1-alpha1.jar包。将其拷贝到WEB-INF下的lib文件夹中。

重启服务器,正常启动成功,在浏览器地址栏输入:http://localhost:9000/WebServiceProject/axis2-web/

进入主页,如下图:表示Axis2部署成功:

点击Validate进入验证Axis2环境界面:

这个页面会加册Axis2运行必备的一些库是否已具备,如果看到下列图中的绿色字体表示环境已搭建成功:

再次返回主页,点击Service,可以看到当前可用的Service列表。默认有一个名为“Version”的WebService。

再次返回主页,点击Adminnistation,进入管理控制台的登录界面:

输入username(用户名)和password(密码)。默认用户名为:admin,密码为:axis2。

点击登录进入Axis2管理控制平台:

可点击左边的Available Service产看当前可用的Service列表。

3.开发实例

在src下新建一个名为HelloApp的类:

package service;

public class HelloApp {

    public HelloApp() {
  
 }
 /**
  * 对外公开的服务方法
  */
 public String sayHello(String name) {
    return "Hello," + name;
 }
}

在Eclipse中将鼠标放在刚才建立的HelloApp.java上点击右键,弹出菜单选择Web Service再选择Create Web Service,会弹出下图的界面:

上下分别有个滑块,把上面的滑块滑至最上端(为Test service)。把下方滑块滑至第二格(Develop client)表示生成当前服务的客户端代码(完成后会在Eclipse中会自动生成一个名字为:[当前工程名+Client]的工程),同时选中publish the Web Service(公开这个Web Service)。点击下一步直至完成。步骤如图:

保持默认设置,点击下一步。

继续保持默认设置,点击下一步。

当前设置Port Name(端口名)选择:当前工程名+SOAP11HttpSoap11Endpoint。并勾选下面的Generate a JUnit test case to the service。其它选项保持默认点击完成。

完成后可以看到Web Service Explorer中可以看到我们刚刚对外公开的HelloApp服务,如下图:

选中左边窗口中的HelloApp服务,找到并点击右边窗口中的Type(类型)为SOAP的服务绑定Name。

进入下图界面:

当前列出了当前公开服务可用的方法,当前服务只有一个sayHello方法。点击Operations下Name为sayHello的方法,进入下图的界面:

当前列出了当前公开服务的方法及参数。当前的唯一方法sayHello有一个String类型的名为name的参数。

点击Add,转到下图:

为当前公开服务的sayHello方法传入一个String类型的name参数“EugeneHeen”,点击Go按钮。此时下面的Status(状态窗口)中会显示调用该方法后的结果。点击Source可以浏览到已经被SOAP分装好该服务的XML文件。

4.Eclipse生成的Client工程

在Eclipse中找到自动生成的客户端工程。在src下有一个当前公开服务的测试类。这是一个JUnit测试用例。

切记和服务端一样,这里需要将我们开始下好的HttpCore4.1-alpha1包解压后主文件夹下的lib文件夹下有httpcore-4.1-alpha1.jar包。不然会抛出异常:java.lang.ClassNotFoundException: org.apache.http.HttpResponseFactory

如图:

打开HelloAppTest.java,找到testSayHello(String name)方法。里面有这样一行注释 // TODO : Fill in the sayHello4 here,它提示我们在此设置调用方法的参数。

Sub是存根。是有Axis2帮我们生成的客户端存根代码。可以这样理解,Sub封装了查找服务、编码、发送、接收、解码请求等一系列动作的帮助类。有了它我们不用去关心WebService底层调用的技术细节,而是直接调用WebService提供的方法。

 service.HelloAppStub stub = new service.HelloAppStub();这是方法中的第一行代码,实例化了一个存根。

方法中的第二行代码:

service.HelloAppStub.SayHello sayHello4 = (service.HelloAppStub.SayHello)getTestObject(service.HelloAppStub.SayHello.class);

调用了方法

public org.apache.axis2.databinding.ADBBean getTestObject(java.lang.Class type) throws java.lang.Exception{
           return (org.apache.axis2.databinding.ADBBean) type.newInstance();
        }

返回一个org.apache.axis2.databinding.ADBBean类型的对象。利用他来为要调用的方法设值。

为参数设值:sayHello4.setName("EugeneHeen");

最后自己编写一行打印调用当前公开服务的sayHello方法的语句:

System.out.println(stub.sayHello(sayHello4).local_return);

利用存根调用当前公开服务的sayHello(String name)方法,一定要调用local_return才能正确返回字符串。

运行该JUnit得到的结果与我们用Web Service Explorer为方法设值是一样的。这就是客户端编码调用。

文章来源:ITeye技术网站

以上IT文章《Eclipse Apache Axis2 环境搭配开发webservice 详解》由名客技术网[www.121ask.com]提供阅读!
推荐软件
    名客技术网是一个免费为广大IT技术人员提供IT教程,绿色软件,asp/php/jsp/java/net等实例视频教程,CMS教程,破解软件下载以及学习相关源码、知识的IT网站。
    名客技术网如果无意之中侵犯了您的版权,请来电告知,本站将在3个工作日内删除 QQ:175352796
    Copyright 2011-2017 Powered by 121ASK.COM, All Rights Reserved.
    备案号:鄂ICP备11013833号-3