Axis2 WebService的发布和调用说明
来源:互联网 发布:战地之王源码 编辑:程序博客网 时间:2024/05/16 17:36
准备工作
1、下载:axis2-1.5.4-bin.zip,axis2-1.5.4-war.zip下载地址:http://axis.apache.org/axis2/java/core/
2、环境变量设置
AXIS2_HOME E:\research\axis2-1.5.4-bin\axis2-1.5.4
JAVA_HOME C:\Program Files\Java\jdk1.6.0_21
3、axis2-1.5.4-war.zip解压,将压缩包内的axis2.war部署到%TOMCAT-HOME%/webapps下,启动tomcat,访问http://localhost:8085/axis2/看是否正常。
点击Service会进入Service列表页面,当前只有一个Version服务。http://localhost:8085/axis2/services/Version?wsdl
4、下载Eclipse的Axis2插件: axis2-eclipse-codegen-plugin-1.5.4.zip,axis2-eclipse-service-plugin-1.5.4.zip 解压后将plugins复制到%ECLIPSE_HOME%\plugins。
http://www.apache.org/dyn/mirrors/mirrors.cgi/axis/axis2/java/core/1.5.4/axis2-eclipse-codegen-plugin-1.5.4.zip
http://www.apache.org/dyn/mirrors/mirrors.cgi/axis/axis2/java/core/1.5.4/axis2-eclipse-service-plugin-1.5.4.zip
安装完插件后,IDE中选择new->other中看到“Axis2 Wizards”,说明插件已经安装成功了。
AXIS2发布Web Services
一、工程文件
1、新建名称为Axis2Service1的java工程。
2、新建 \Axis2Service1\src\ws\TestWs.java
package ws;public class TestWs { public String showName(String name) {return name; } public String getName() {return "Axis2Service Sample"; } }
二、arr部署方式
1、手动打包
新建\Axis2Service1\deploy文件夹,将\Axis2Service1\bin下的class文件复制过来。
新建\Axis2Service1\deploy\META-INF\services.xml文件
<service name="AxisService"> <description>AxisService</description> <parameter name="ServiceClass">ws.TestWs</parameter> <operation name="showName"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="getName"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </operation></service>
生成aar包 \Axis2Service1\deploy>jar cvf AxisService.aar . (注意带.号)
2、插件打包
IDE中选择New->other->Axis2 Service Archiver,点击Next;
Class File Location:选择Axis2Service1\bin目录,点击Next;
勾选Skip WSDL,点击Next;
Service Archiver 选择jar位置,如果没有jar包就直接点击Next;
勾选Generate the service xml automatically自动生成service.xml file文件,点击Next
service name,输入:AxisService,然后在class name中填写要发布的类(全路径,如:ws.TestWs),点击load。勾选 Search declared methods only。点击next
output File location,输入:D:\ ; output File Name,输入artiver文件的名称 AxisService。点击finish。
提示 Service Archvie generated successfully!注册表明,生成成功。
3、发布AxisService
AxisService.aar复制到%TOMCAT-HOME%/webapps/axis2/WEB-INF/services下。(不打aar包,\Axis2Service1\deploy下面复制过去也是可以)
打开http://localhost:8085/axis2/services/listServices就可以看到刚才发布的AxisService服务了,下面有两个函数:showName,getName。
三、独立部署
1、新建java web project工程。
2、文件复制
%TOMCAT-HOME%\webapps\axis2\WEB-INF\lib 复制到 \Axis2Service2\WebRoot\WEB-INF\lib下,并加入工程引用。
%TOMCAT-HOME%\webapps\axis2\WEB-INF\conf 复制到 \Axis2Service2\WebRoot\WEB-INF\conf
%TOMCAT-HOME%\webapps\axis2\WEB-INF\modules 复制到 \Axis2Service2\WebRoot\WEB-INF\modules
3、web.xml 代码如下
<?xml version="1.0" encoding="UTF-8"?><web-app id="wmf" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping></web-app>
2、新建 \Axis2Service2\src\ws\TestWs.java
package ws;public class TestWs { public String showName(String name) {return name; } public String getName() {return "Axis2Service Sample"; } }
3、新建\Axis2Service2\WebRoot\WEB-INF\services目录。
4、新建一个AxisService服务
AxisService\META-INF\services.xml
<service name="AxisService"> <description>AxisService</description> <parameter name="ServiceClass">ws.TestWs</parameter> <operation name="showName"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="getName"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </operation></service>
启动tomcat后,访问http://localhost:8085/Axis2Service2/services/AxisService?wsdl看是否正常。
AXIS2调用Web Services
一、客户端stub文件生成
1、脚本生成方式
去AXIS2的解压目录下bin(%AXIS2_HOME%\bin\)下执行下面语句
wsdl2java -uri http://localhost:8085/Axis2Service2/services/AxisService?wsdl -p ws -s -o stub
-p参数指定了生成的Java类的包名
-o参数指定了生成的一系列文件保存的根目录
在stub\src\ws自动生成AxisServiceStub.java
2、插件生成方式
IDE中选择New->other->Axis2 Code Generator,点击Next;
勾选Generate Java source code from a WSDL file,点击Next;
WSDL file location,输入:http://localhost:8085/Axis2Service2/services/AxisService?wsdl,点击Next;
如果路径不对会提示:Specified WSDL is invalid!, Please select a validated *.wsdl/*.xml file on previous page.
正确的话,点击next;
指定输入路径,点击Next
提示:All operations completed successfully!生成成功。在D:\src\ws自动生成了stub一系列文件,其中ws是包名。
上面2种方式生成的stub类有点不一样,脚本生成方式是单一文件,插件生成方式生成的一系列文件。
二、客户端调用
脚本生成方式为例子,插件生成的类似。
1、新建 java工程 Axis2Client
新建\Axis2Client\lib文件夹
将%AXIS2_HOME%\lib\下的所有jar包复制到\Axis2Client\lib,并加入工程引用中
将通过脚本生成的单一AxisServiceStub.java文件加入到src\ws下
2、新建test.TestWs.java主要代码如下
//初始化Sub类AxisServiceStub stub = new AxisServiceStub();//传递AxisServiceStub.ShowName对象,相关参数在这边赋值。AxisServiceStub.ShowName command = new AxisServiceStub.ShowName();command.setName("Hello!");//取得返回值String name = stub.showName(command).get_return();System.out.println(name);
调用成功后控制台输出:Hello!
AXIS2调用RESTWeb Services
使用http://localhost:8086/Axis2Rest/services/AxisService/showName?name=rest的方式访问刚才发布成功的WebService。从上面可以看出这个就是rest风格。Axis1.0是无法通过showName?name=rest来获取信息的。
2、使用axis客户端调用
public class TestRest { private static String toEpr = "http://localhost:8086/Axis2Rest/services/AxisService"; public static void main(String[] args) throws AxisFault { Options options = new Options(); options.setTo(new EndpointReference(toEpr)); //客户端REST方式调用服务跟普通服务的区别,REST调用必须加上下面这个代码。 options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE); ServiceClient sender = new ServiceClient(); //axis2-1.5.4不需要下面这句代码,否则会报错 //sender.engageModule(new QName(Constants.MODULE_ADDRESSING)); sender.setOptions(options); OMElement result = sender.sendReceive(getPayload()); try { XMLStreamWriter writer = XMLOutputFactory.newInstance() .createXMLStreamWriter(System.out); result.serialize(writer); writer.flush(); } catch (XMLStreamException e) { e.printStackTrace(); } catch (FactoryConfigurationError e) { e.printStackTrace(); } } private static OMElement getPayload() { OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace( "http://ws", "example1"); OMElement method = fac.createOMElement("showName", omNs); OMElement value = fac.createOMElement("name", omNs); value.addChild(fac.createOMText(value, "Rest")); method.addChild(value); return method; }
说明:
1、sender.engageModule(new QName(Constants.MODULE_ADDRESSING)); axis2-1.5.4不需要下面这句代码,否则会报错
2、客户端REST方式调用服务跟普通服务的区别,就是Rest有下面这个代码;
options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
两者返回的数据都是
<ns:showNameResponse xmlns:ns="Resthttp://ws"><ns:return>Rest</ns:return></ns:showNameResponse>
3、getPayload方法
OMNamespace omNs = fac.createOMNamespace("http://ws", "example1");指定命名空间,如果没对的话会报如下错误<faultstring>namespace mismatch require http://ws foundhttp://ws1</faultstring>
OMElement method = fac.createOMElement("showName", omNs);要传递的方法名为 "showName"
OMElement value = fac.createOMElement("name", omNs);传递的参数为name
value.addChild(fac.createOMText(value, "Rest")); 传递参数name的值为Rest。
- Axis2 WebService的发布和调用说明
- Axis2 WebService的发布和调用说明
- axis2 发布 webservice 和 java调用webservice
- axis2发布和客户端调用WebService的方法
- 使用Axis2实现WebService的发布和调用
- 用AXIS2发布WebService和客户端调用
- axis2 WebService的发布与调用
- Axis2 WebService的配置、发布、调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- axis2 WebService的发布与调用
- Linux_不挂断地运行命令(后台运行)_nohup
- 得到泛型的class
- java中重写和重载
- 程序员看经济危机
- 小石头课堂(一)查询语句顺序及外连接
- Axis2 WebService的发布和调用说明
- LVM
- 书籍推荐-记这几年看的书
- 关于linux内核,编译器,库等的版本及版本关系问题
- 正则表达式常用验证整理
- 函数调用过程探究
- Connecting to the Portal WebDAV
- Posix多线程编程学习笔记(六)—共享内存(2)
- 如何使Eclipse 中显示行号:ctrl+F10->show line numbers