分享

NO Code直接根据Wsdl生成SOAP报文,发送http请求调用web service...

 kekokeko 2011-01-20
 作为客户端调用web service通用的做法,通常利用axis或cxf生成客户端代码,如果调用的服少还能应付,如果调用服务比较多,生成的代码很多,很难管理,自己以前就是这样干。 想到过wsdl解析生成soap报文,再通过httpclient发送请求,由于各种服务类型和服务样式,兼容性很难处理,没有去实施。 
    最近接触soapui和camel时间比较多,从这两个工具中找到我想要的代码和思路。能够解决各种服务类型和服务样式兼容性问题......  直接通过一个实例来演示怎么调用,效果更比较清楚些。

实例描述:创建一个用户,返回值和参数都市javabean User.(其它参数类型如此)

解析的SOAP报文如下:
Java代码 复制代码
  1.  xmlns:soapenv="http://schemas./soap/envelope/" xmlns:demo="http://demo.cxf./">   
  2.       
  3.       
  4.          
  5.             
  6.             
  7.                
  8.             
       
  9.                
  10.                
  11.             
  12.          
  13.       
  14.   

需要的参数为:
Java代码 复制代码
  1. Map Object> params = new HashMap Object>();   
  2. params.put("createUser.arg0.address", "Anhui Hefei");   
  3. params.put("createUser.arg0.name", "melin");   
  4. params.put("dumpSOAP", "");  

map的key值为body下面的xpath路径。这种方式,主要是为了解决复杂参数的传值。
dumpSOAP是为了打印出soap报文替换参数前后的内容。
替换参数后的soap报文
Java代码 复制代码
  1.  xmlns:soapenv="http://schemas./soap/envelope/" xmlns:demo="http://demo.cxf./">   
  2.       
  3.       
  4.          
  5.             
  6.             
  7.                
  8.             
    Anhui Hefei
       
  9.                
  10.             melin   
  11.             
  12.          
  13.       
  14.   


调用返回一个map
Java代码 复制代码
  1. Map String> result = client.sendRequest("createUser", params, wsdlUrl);  

返回内容
Java代码 复制代码
  1. {createUserResponse.return.address=Anhui Hefei, createUserResponse.return.name=melin}  


//----------------------------完整代码-----------------------------
Java代码 复制代码
  1.       public static void main(String[] args) throws Exception {   
  2. String wsdlUrl = "http://localhost:9000/helloWorld?wsdl";   
  3. SoapClient client = new SoapClient();   
  4. Map Object> params = new HashMap Object>();   
  5. params.put("createUser.arg0.address", "Anhui Hefei");   
  6. params.put("createUser.arg0.name", "melin");   
  7. params.put("dumpSOAP", "");   
  8. Map String> result = client.sendRequest("createUser", params, wsdlUrl);   
  9. System.out.println(result);   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多