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

具体流程大致这样:<br />

        
        String soapRequestData 
= <?xml version=”1.0 encoding=”utf8?> +
        
<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中&lt;/span>


    
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);

动态构造调用串的话如下实现:&lt;br />


    
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=”utf8?>);
        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();
    }

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注