httpClient访问webservice服务--带http头参数

httpClient访问webservice

之所以通过httpClient访问是因为有的webservice需要设置http header,比如利用soapUI工具时会设置http header,那么利用axis就没有办法设置http头(我没有找到),所以就需要利用httpClient进行webserivce访问,代码如下:
1, getData方法

private static String getData(String OperationCode, String param){
        String returnVal = "" ;
        StringBuilder xmlpara = new StringBuilder() ;
        xmlpara.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:user=\"http://127.0.0.1:8080/UserAction\">") ;
            xmlpara.append("<soapenv:Header/>") ;
            xmlpara.append("<soapenv:Body>") ; 
                xmlpara.append("<user:getUserDetailByName>") ;
                    xmlpara.append("<user:param>" + param + "</user:param>") ;
                xmlpara.append("</user:getUserDetailByName>") ;
            xmlpara.append("</soapenv:Body>") ; 
        xmlpara.append("</soapenv:Envelope>") ;

        String inputPara = xmlpara.toString() ;

        HashMap<String,String> res = new HashMap<>();
//          String endpoint = "http://124.205.248.2:8080/eSales/esales.asmx?WSDL";
            String endpoint = "http://192.168.0.123:9090/esb.user";
            PostMethod postMethod = new PostMethod(endpoint);
            byte[] b;
            try {
                b = inputPara.getBytes("utf-8");
                InputStream is = new ByteArrayInputStream(b,0,b.length);
                RequestEntity re = new InputStreamRequestEntity(is,b.length,"application/soap+xml; charset=utf-8");
                //把Soap请求数据添加到PostMethod中
                postMethod.setRequestEntity(re);
                postMethod.setRequestHeader("ClientId", "com.primeton.esb.hljsjzx.manage") ;
//              postMethod.setRequestHeader("OperationCode", "com.primeton.esb.hljsjzx.Infrastructure.user.getUserDetailByName") ;
                postMethod.setRequestHeader("OperationCode", OperationCode) ;
                //生成一个HttpClient对象,并发出postMethod请求
                HttpClient httpClient = new HttpClient();
                int statusCode = httpClient.executeMethod(postMethod);
                if(200==statusCode){
                    String getServerData =  postMethod.getResponseBodyAsString();
                    //System.out.println("----->"+getServerData);
                    //获取返回值状态标识,标识为0:成功;非0:失败
                    res.put("status", "0");
                    //res.put("msg", getServerData);
                    SAXReader sax = new SAXReader() ;

                    Document doc = sax.read(new ByteArrayInputStream(getServerData.getBytes("utf-8"))) ;
                    DefaultXPath xpath = new DefaultXPath("//ns1:out");
                    xpath.setNamespaceURIs(Collections.singletonMap("ns1","http://127.0.0.1:8080/UserAction")); 
                    Element ele = (Element)xpath.selectSingleNode(doc) ;
                    returnVal = ele.getText();                  
                }
            } catch (Exception e) {
                res.put("status", "1");
                res.put("msg", e.toString());
                e.printStackTrace();
            }
            return returnVal;
        }
  1. 方法调用
public static void main(String[] args) {   
        String operationCode = "com.primeton.esb.hljsjzx.Infrastructure.user.getUserDetailByName" ;
        Map map = getData(operationCode,xmlpara.toString()) ;
        String val = "" ;
        String status = (String)map.get("status");
        if(status.equals("0")){
            val = (String)map.get("msg") ;
        }
        SAXReader sax = new SAXReader() ;
        try {
            Document doc = sax.read(new ByteArrayInputStream(val.getBytes("utf-8"))) ;
            DefaultXPath xpath = new DefaultXPath("//ns1:out");
            xpath.setNamespaceURIs(Collections.singletonMap("ns1","http://127.0.0.1:8080/UserAction")); 
            Element ele = (Element)xpath.selectSingleNode(doc) ;
            System.out.println(ele.getText());
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }

如果你想在Java中使用压缩的XML参数访问Web服务,你需要解压缩XML参数并将其作为请求正文发送到Web服务。以下是一个示例代码片段: ```java // 创建ZipInputStream对象并读取压缩的XML参数 ZipInputStream zipIn = new ZipInputStream(new FileInputStream("compressed.xml")); zipIn.getNextEntry(); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; while ((len = zipIn.read(buffer)) > 0) { out.write(buffer, 0, len); } zipIn.close(); byte[] xmlBytes = out.toByteArray(); // 创建请求实体并设置XML参数 HttpEntity entity = new ByteArrayEntity(xmlBytes); entity.setContentType("application/xml"); // 创建HttpClient对象并发送POST请求 HttpClient httpClient = HttpClientBuilder.create().build(); HttpPost httpPost = new HttpPost("http://example.com/webservice"); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost); // 处理响应 if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 处理成功响应 } else { // 处理错误响应 } ``` 这个示例代码片段假设您已经将压缩的XML参数保存在名为"compressed.xml"的文件中,并且您正在使用Apache HttpComponents库发送HTTP请求。在这个示例中,我们首先创建一个ZipInputStream对象来读取压缩的XML参数,然后解压缩它并将其作为请求实体发送到Web服务。 请注意,如果您的Web服务期望接收压缩的XML参数,则无需解压缩XML参数。在这种情况下,您可以将ZipInputStream对象直接传递给请求实体,如下所示: ```java HttpEntity entity = new InputStreamEntity(zipIn); entity.setContentType("application/xml"); ``` 但是,您必须确保您的Web服务能够正确处理压缩的XML参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值