【发布时间】:2015-11-11 15:20:57
【问题描述】:
我使用 maven 作为我的构建工具。试图从我的 java 代码中调用基于 soap 的 web 服务。但是我的查询出了点问题。这个查询字符串我取自 soapUI。我用 soapUI 测试了我的 web 服务。它正在工作.但现在它在使用 apache http 客户端时无法正常工作。有人请帮助我!!
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)
【问题讨论】:
-
?wsdl在 URL 中通常引用 WSDL 文件的位置,而不是您应该发布 SOAP 消息的端点。 -
使用您提供的方法您将面临的另一个问题是,您需要在发送 POST 之前设置正确的 HTTP 标头。现在你不这样做了。
标签: java web-services soap soapui