繁体   English   中英

关于使用Apache HTTP客户端调用Soap Web服务的问题

[英]Issue on calling soap webservice using apache http client

我正在使用maven作为构建工具。试图从我的Java代码中调用基于soap的Web服务,但是查询出了点问题。我从soapUI中获取了这个查询字符串。我用soapUI测试了我的Web服务。与apache http client一起使用时无法正常工作。有人请帮助我!

public class TestMainClient {

    public static void main(String[] args) {

        HttpClient httpObj = new HttpClient();
        httpObj.getParams().setParameter("http.useragent", "Web   Service    Test Client");
        BufferedReader br = null;

        String data = "<soap:Envelopexmlns:soap=\"http://www.w3.org/2003/05/soap-envelope/\" xmlns:web=\"http://webservice.OrderProcessor/\""
                + " xmlns:xsd=\"http://dto.order.cloudbill.com/xsd/\">"


                + "<soap:Header/>"
                + "<soap:Body>"
                + "<web:placeOrder>"
                + "<web:placeOrderRequest>"
                + "<xsd:orderDate>2015-01-16T09:00:00</xsd:orderDate>"
                + "<xsd:orderDescription>order has two elements</xsd:orderDescription>"
                + "<xsd:orderElementRequests>"
                + "<xsd:orderElementRequest>"
                + "<xsd:createdDate>2015-01-16T09:00:00</xsd:createdDate>"
                + " <xsd:orderElementAttributeRequests>"
                + "<xsd:arrayOrderElementAttribute>"
                + "<xsd:attributeName>Hard disk</xsd:attributeName>"
                + "<xsd:attributeValue>1gb</xsd:attributeValue>"

                + "<xsd:createdDate>2015-01-16T09:00:00</xsd:createdDate>"
                + "</xsd:arrayOrderElementAttribute>"
                + "</xsd:orderElementAttributeRequests>"
                + "<xsd:order_item_name>Laptop</xsd:order_item_name>"
                + " <xsd:order_item_price>20000</xsd:order_item_price>"
                + " </xsd:orderElementRequest>"
                + "</xsd:orderElementRequests>"
                + "</web:placeOrderRequest>"
                + "</web:placeOrder>"
                + "</soap:Body>"
                + "</soap:Envelope>";

        PostMethod methodPost = new PostMethod("http://localhost:8081/OrderManagementService/services/OrderManagementService?wsdl");

        methodPost.setQueryString(data);
        methodPost.setRequestHeader("Content-Type", "text/xml");

        try {
            int returnCode = httpObj.executeMethod(methodPost);**Line 51 **

            if (returnCode == HttpStatus.SC_NOT_IMPLEMENTED) {
                System.out.println("The Post method is not implemented by this URI");
                /*methodPost.getResponseBodyAsString();*/

            } else {
                br = new BufferedReader(new InputStreamReader(methodPost.getResponseBodyAsStream()));
                String readLine;
                while (((readLine = br.readLine()) != null)) {

                    System.out.println(readLine);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            methodPost.releaseConnection();
            if (br != null)
                try {
                    br.close();
                } catch (Exception fe) {
                    fe.printStackTrace();
                }
        }
    }
}

=======编译器输出========

org.apache.commons.httpclient.URIException: Invalid query
    at org.apache.commons.httpclient.URI.parseUriReference(URI.java:2049)
    at org.apache.commons.httpclient.URI.<init>(URI.java:147)
    at org.apache.commons.httpclient.HttpMethodBase.getURI(HttpMethodBase.java:265)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:383)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
    at com.module.model.TestMainClient.main(TestMainClient.java:51)

正确的做法是使用适当的库,例如JAX WS。 快速说明一下要开始需要做的事情:

  1. 使用Web服务的WSDL创建将封装要传递的参数以及将值返回到POJO的类,这些类可以在应用程序中无缝使用。
  2. 现在,使用良好的SOAP库(例如JAX WS)来使用生成的Java类调用Web服务。
  3. 处理Web服务的结果。

请参阅链接,以获取有关如何执行这些活动的更多指导。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM