您的位置:首页 > 运维架构 > Apache

Apache Axis2 环境搭配详解

2015-06-11 17:29 465 查看
配置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为方法设值是一样的。这就是客户端编码调用。



http://oma1989.iteye.com/blog/1440239
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: