httpclient 调用webservice

 

使用HttpClient对Web Service调用

用到的jar包有:
    commons-codec-1.3.jar
    commons-httpclient-3.0.jar
    commons-logging-1.0.4.jar


具体流程大致这样:

 

 

String soapRequestData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + 
        "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">" + 
          "<soap12:Body>" + 
           " <qqCheckOnline xmlns=\"http://WebXml.com.cn/\">" + 
          "    <qqCode>349104641</qqCode>" + 
         "   </qqCheckOnline>" + 
        "  </soap12:Body>" + 
        "</soap12:Envelope>"; 
        
        System.out.println(soapRequestData); 


    //PostMethod postMethod = new PostMethod("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl"); 
    
    PostMethod postMethod = new PostMethod("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"); 

   // 然后把Soap请求数据添加到PostMethod中 


    byte[] b = soapRequestData.getBytes("utf-8"); 
    InputStream is = new ByteArrayInputStream(b,0,b.length); 
    RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8"); 
    postMethod.setRequestEntity(re); 
    
    //最后生成一个HttpClient对象,并发出postMethod请求 

    HttpClient httpClient = new HttpClient(); 
    int statusCode = httpClient.executeMethod(postMethod); 
    String soapResponseData =  postMethod.getResponseBodyAsString(); 
        
        
    System.out.print(soapResponseData); 


动态构造调用串的话如下实现:

 

private String tns; 
    private String methodName; 
    private String wsdlLocation; 
    private String soapResponseData; 

private int invoke(Map<String, String> patameterMap) throws Exception { 
        PostMethod postMethod = new PostMethod(wsdlLocation); 
        String soapRequestData = buildRequestData(patameterMap); 

        byte[] bytes = soapRequestData.getBytes("utf-8"); 
        InputStream inputStream = new ByteArrayInputStream(bytes, 0, 
                bytes.length); 
        RequestEntity requestEntity = new InputStreamRequestEntity(inputStream, 
                bytes.length, "application/soap+xml; charset=utf-8"); 
        postMethod.setRequestEntity(requestEntity); 

        HttpClient httpClient = new HttpClient(); 
        int statusCode = httpClient.executeMethod(postMethod); 
        soapResponseData = postMethod.getResponseBodyAsString(); 
        return statusCode; 
    } 

    private String buildRequestData(Map<String, String> patameterMap) { 
        StringBuffer soapRequestData = new StringBuffer(); 
        soapRequestData.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); 
        soapRequestData 
                .append("<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">"); 
        soapRequestData.append("<soap12:Body>"); 
        soapRequestData.append("<" + methodName + " xmlns=\"" + tns + "\">"); 
        Set<String> nameSet = patameterMap.keySet(); 
        for (String name : nameSet) { 
            soapRequestData.append("<" + name + ">" + patameterMap.get(name) 
                    + "</" + name + ">"); 
        } 
        soapRequestData.append("</" + methodName + ">"); 
        soapRequestData.append("</soap12:Body>"); 
        soapRequestData.append("</soap12:Envelope>"); 

        return soapRequestData.toString(); 
    } 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值