复杂数据类型和异步调用
使用services.xml的方式演示:
打包成jar文件导入到axis2的service目录下。
调用url:
http://localhost:8080/axis2/services/first/getData
返回值:
<ns:getDataResponse xmlns:ns="http://service">
</ns:getDataResponse>
<serviceGroup> <service name="first"> <description> Web Servic </description> <parameter name="ServiceClass"> service.MyService </parameter> <messageReceivers> <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </messageReceivers> </service> </serviceGroup>
package service; import java.io.Serializable; import javax.xml.bind.annotation.XmlRootElement; public class DataForm implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String name; public DataForm(){ } public DataForm(String name){ this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package service; public class MyService { public DataForm getData() { return new DataForm("eric"); } }
不论是何种类型,只要xml的序列化可以做到持久化,那么web service就可以支持。
关于byte[] 类型,java客户端调用可能需要使用datahandler。
异步调用:wsdl2java -uri http://localhost:8080/axis2/services/first?wsdl -p client -s -a -o stub
生成客户端文件,实现callbackhandler,然后调用,很明显是采用后台线程的方式来实现回调函数的。
package client; import java.io.IOException; import client.FirstStub.GetNameResponse; import service.DataForm; import service.MyServiceService; import service.Service; class MyHandler extends FirstCallbackHandler{ public void receiveResultgetName(GetNameResponse result){ System.out.println(result.get_return()); } } public class WSImportTest { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub FirstStub fs=new FirstStub(); // System.out.println(fs.getName().local_return); fs.startgetName(new MyHandler() ); System.out.println("tiao"); System.in.read(); } }
浙公网安备 33010602011771号