axis2小例子进阶二

目的:调用invokeNonBlocking方法,然后初步认识下soap消息。

在编写客户端代码时应注意如下几点:

    1. 客户端代码需要引用很多Axis2的jar包,如果读者不太清楚要引用哪个jar包,可以在Eclipse的工程中引用Axis2发行包的lib目录中的所有jar包。
    2 在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值,下面是SimpleService类生成的WSDL文件的代码片段:

MyServer代码如下:

[java]  view plain copy
  1. import org.apache.axiom.om.OMAbstractFactory;  
  2. import org.apache.axiom.om.OMElement;  
  3. import org.apache.axiom.om.OMFactory;  
  4. import org.apache.axiom.om.OMNamespace;  
  5.   
  6. public class MyServer {  
  7.     public String sayGoodMorning(){  
  8.         System.out.println("正在执行sayGoodMorning");  
  9.         try {  
  10.             Thread.sleep(5000);  
  11.         } catch (InterruptedException e) {  
  12.             e.printStackTrace();  
  13.         }  
  14.         return "good morning teacher";  
  15.     }  
  16. }  


把.class文件放到 webapps/axis2/WEB-INF/pojo里

启动tomca,http://localhost:9080/axis2/services/MyServer?wsdl能否访问


客户端测试;

[java]  view plain copy
  1. import java.io.IOException;  
  2.   
  3. import javax.xml.namespace.QName;  
  4.   
  5. import org.apache.axis2.AxisFault;  
  6. import org.apache.axis2.addressing.EndpointReference;  
  7. import org.apache.axis2.client.Options;  
  8. import org.apache.axis2.client.async.AxisCallback;  
  9. import org.apache.axis2.context.MessageContext;  
  10. import org.apache.axis2.rpc.client.RPCServiceClient;  
  11.   
  12. public class TestClient {  
  13.     public static void main(String[] args) {  
  14.         String urlString="http://localhost:9080/axis2/services/MyServer?wsdl";  
  15.         try {  
  16.             //使用RPC方法调用  
  17.             RPCServiceClient client=new RPCServiceClient();  
  18.             Options options = client.getOptions();  
  19.             //指定调用webservice的URL  
  20.             options.setTo(new EndpointReference(urlString));  
  21.             QName qName2=new QName("http://ws.apache.org/axis2","sayGoodMorning");  
  22.             client.invokeNonBlocking(qName2, new Object[]{},new AxisCallback() {  
  23.                 @Override  
  24.                 public void onComplete() {  
  25.                     System.out.println("onComplete");  
  26.   
  27.                 }  
  28.   
  29.                 @Override  
  30.                 public void onError(Exception arg0) {  
  31.                     System.out.println("onError");  
  32.   
  33.                 }  
  34.   
  35.                 @Override  
  36.                 public void onFault(MessageContext arg0) {  
  37.                     System.out.println("onFault");  
  38.                 }  
  39.   
  40.                 @Override  
  41.                 public void onMessage(MessageContext arg0) {  
  42.                     //获得返回的soap消息  
  43.                     System.out.println(arg0.getEnvelope().toString());  
  44.                     //解析soap,获得返回结果  
  45.                     System.out.println(arg0.getEnvelope().getFirstElement().getFirstElement().getFirstElement().getText());                   
  46.                 }  
  47.               
  48.             });  
  49.         } catch (AxisFault e) {  
  50.             e.printStackTrace();  
  51.         }  
  52.         try {  
  53.             System.in.read();  
  54.         } catch (IOException e) {  
  55.             e.printStackTrace();  
  56.         }  
  57.     }  
  58. }  

控制台打印:
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:sayGoodMorningResponse xmlns:ns="http://ws.apache.org/axis2"><return>good morning teacher</return></ns:sayGoodMorningResponse></soapenv:Body></soapenv:Envelope>
good morning teacher
onComplete


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值