Axis2实现WebService实例 HelloWord
一、Axis2的下载和安装 ??? 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本: ????2.将axis2-1.6.2-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目录>webapps目录中, ? ?二、编写和发布WebService
public class HelloService { public String sayHello(){ return "hello"; } public String sayHelloToPerson(String name){ if(name==null){ name = "nobody"; } return "hello,"+name; } } ?编译HelloService类后,将HelloService.class文件放到<Tomcat安装目录>webappsaxis2WEB-INFpojo目录中
?页面显示如下结果: <ns:sayHelloToPersonResponse xmlns:ns="http://ws.apache.org/axis2"> <return>hello,bill</return> </ns:sayHelloToPersonResponse>
<?xml version="1.0"?> <ns:sayHelloResponse xmlns:ns="http://ws.apache.org/axis2"><return>hello</return></ns:sayHelloResponse>
<parameter name="hotdeployment">true</parameter>
<parameter name="hotupdate">false</parameter>
<deployer extension=".class" directory="my" class="org.apache.axis2.deployment.POJODeployer"/>
? (2)使用services.xml配置文件发布
package com.sinosoft.webservice; public class HelloServiceNew { public String sayHelloNew(){ return "hello"; } public String sayHelloToPersonNew(String name){ if(name==null){ name = "nobody"; } return "hello,"+name; } public void updateData(String data){ System.out.println(data+" 已更新。"); } }
<?xml version="1.0" encoding="UTF-8"?> <service name="HelloServiceNew"> <description> Web Service例子 </description> <parameter name="ServiceClass"> com.sinosoft.webservice.HelloServiceNew </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> </service>
? ??? jar cvf ws.aar??*.*
? ? 另外services.xml文件中也可以直接指定WebService类的方法,如可以用下面的配置代码来发布WebService <service name=" HelloServiceNew "> <description> Web Service例子 </description> <parameter name="ServiceClass"> com.sinosoft.webservice.HelloServiceNew </parameter> <operation name="sayHello"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="updateData"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> </operation> </service> 如果想发布多个WebService,可以使用<serviceGroup>元素 <serviceGroup> <service name="myService1"> ... </service> <service name="myService2"> ... </service> </serviceGroup>
中间省略的代码同上面services.xml文件的配置。 ? 三、 用Java实现调用WebService的客户端程序
import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class TestMain { public static void main(String args[]) throws AxisFault{ // 使用RPC方式调用WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); // 指定调用WebService的URL EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/axis2/services/HelloService"); options.setTo(targetEPR); // 指定sayHelloToPerson方法的参数值 Object[] opAddEntryArgs = new Object[] {"World"}; // 指定sayHelloToPerson方法返回值的数据类型的Class对象 Class[] classes = new Class[] {String.class}; // 指定要调用的sayHelloToPerson方法及WSDL文件的命名空间 QName opAddEntry = new QName("http://ws.apache.org/axis2","sayHelloToPerson"); // 调用sayHelloToPerson方法并输出该方法的返回值 System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs,classes)[0]); } }
???输出结果为:
???? 1. 客户端代码需要引用很多Axis2的jar包,如果读者不太清楚要引用哪个jar包,
? ??四、用wsdl2java简化客户端的编写
package client; public class StupTest { public static void main(String[] args) throws Exception { HelloServiceStub stub = new HelloServiceStub(); HelloServiceStub.SayHelloToPerson gg = new HelloServiceStub.SayHelloToPerson(); gg.setName("World"); System.out.println( stub.sayHello().get_return()); System.out.println(stub.sayHelloToPerson(gg).get_return()); } }
??上面的代码大大简化了调用WebService的步骤,并使代码更加简洁。 ??但要注意的是,wsdl2java.bat命令生成的Stub类将WebService方法的参数都封装在了相应的类中, ??类名为方法名,例如,sayHelloToPerson方法的参数都封装在了SayHelloToPerson类中, ??要想调用sayHelloToPerson方法,必须先创建SayHelloToPerson类的对象实例。? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |