复杂数据类型和异步调用

使用services.xml的方式演示:

 

打包成jar文件导入到axis2的service目录下。

调用url:

http://localhost:8080/axis2/services/first/getData

返回值:

<ns:getDataResponse xmlns:ns="http://service">
<ns:return xmlns:ax21="http://service/xsd" type="service.DataForm">
<ax21:name>eric</ax21:name>
</ns:return>
</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();
        
    }

}

 

posted @ 2014-10-09 22:29  menglgcn  阅读(60)  评论(0)    收藏  举报