上次已经为大家介绍过在java中怎么用xfire调用webservice接口,今天继续为大家介绍一下在java中如何使用axis2调用webservice接口,同样地,也是通过具体操作为大家展示。
首先,在axis2中部署webservice有两种方法:
1.是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名;
2.是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明。
下面分别说明使用方法:
⑴、pojo方式:在Axis2中不需要进行任何的配置,直接将一个简单的POJO发布成WebService。其中POJO中所有的public方法将被发布成WebService方法。先实现一个pojo类,代码如下:
public class HelloWorld { public String getName(String name) { return "你好 " + name; } public int add(int a, int b) { return a + b; } }
在客户端进行测试,首先可以写一个封装类,减少编码,代码如下:
package MZ.GetWebService; 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 GetWSByAxis2 { private static String EndPointUrl; private static String QUrl = "http://ws.apache.org/axis2"; private QName opAddEntry; public String WSUrl; public RPCServiceClient setOption() throws AxisFault { RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference(WSUrl); options.setTo(targetEPR); return serviceClient; } public QName getQname(String Option) { return new QName(QUrl, Option); } //返回String public String getStr(String Option) throws AxisFault { RPCServiceClient serviceClient = this.setOption(); opAddEntry = this.getQname(Option); String str = (String) serviceClient.invokeBlocking(opAddEntry , new Object[] {}, new Class[] { String.class })[0]; return str; } // 返回一维String数组 public String[] getArray(String Option) throws AxisFault { RPCServiceClient serviceClient = this.setOption(); opAddEntry = this.getQname(Option); String[] strArray = (String[]) serviceClient.invokeBlocking(opAddEntry , new Object[] {}, new Class[] { String[].class })[0]; return strArray; } //从WebService中返回一个对象的实例 public Object getObject(String Option, Object o) throws AxisFault { RPCServiceClient serviceClient = this.setOption(); QName qname = this.getQname(Option); Object object = serviceClient.invokeBlocking(qname, new Object[] {}, new Class[] { o.getClass() })[0]; return object; } ///////////////////////////////////////// 读者可以自己封装数据类型,如int,byte,float等数据类型 }
客户端调用方法:
MZ.GetWebService.GetWSByAxis2 ws = new MZ.GetWebService.GetWSByAxis2(); ws.WSUrl = "http://localhost:8989/axis2/services/HelloWorld"; HelloWorld hello = (HelloWorld) ws.getObject("getName", HelloWorld.class); System.out.println(hello.getName("zhangjin"));
⑵、使用service.xml发布webservice,它和直接放在pojo目录中的POJO类不同。要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在META-INF目录中,该文件的内容如下:
<service name="HelloWorld"> <description> HelloWorld webservice </description> <parameter name="ServiceClass"> service.HelloWorld </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>
其中
<service name="HelloWorld"> <description> HelloWorld service </description> <parameter name="ServiceClass"> service.HelloWorld </parameter> <operation name="getName"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="add"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> </service>
以上就是有关在java中如何使用axis2调用webservice接口,并且通过具体的操作为大家展示出来。想要了解更多java程序代码例子以及常见问题,敬请关注奇Q工具网。
推荐阅读: