我正在使用maven作爲我的構建tool.trying從我的java代碼調用基於soap的webservice。但是我的查詢出錯了。這個查詢字符串我從soapUI.I用soapUI.it測試了我的web服務,但它現在工作的時候並不工作,而使用Apache http client.someone plz幫助我!使用apache http客戶端調用soap webservice的問題
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)
URL中的「?wsdl」通常引用WSDL文件的位置,而不是您應該發佈SOAP消息的端點。 –
您提供的使用方法會面臨的另一個問題是,您需要在發送POST之前設置正確的HTTP標頭。現在你不這樣做。 –