2010-01-27 148 views
10

這似乎應該很簡單,但也許我錯過了一些東西。我只想在Java中進行SOAP調用,最好只使用內置的API。在Java文檔中查看javax.xml.soap包,我有點不知所措。我試圖搜索谷歌,但似乎所有的結果都是從2000年到2002年,他們都在談論可用於SOAP調用的庫(我猜想在構建SOAP庫之前)。如何在Java中進行SOAP調用

我不需要處理SOAP請求;只做一個。 This site有一個非常簡單的例子,但它不使用內置的Java SOAP庫。如何使用核心Java基本上做同樣的事情?

// Create the parameters 
Vector params = new Vector(); 
params.addElement(
    new Parameter("flightNumber", Integer.class, flightNumber, null)); 
params.addElement(
    new Parameter("numSeats", Integer.class, numSeats, null)); 
params.addElement(
    new Parameter("creditCardType", String.class, creditCardType, null)); 
params.addElement(
    new Parameter("creditCardNumber", Long.class, creditCardNum, null)); 

// Create the Call object 
Call call = new Call(); 
call.setTargetObjectURI("urn:xmltoday-airline-tickets"); 
call.setMethodName("buyTickets"); 
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); 
call.setParams(params); 

// Invoke 
Response res = call.invoke(new URL("http://rpc.middleearth.com"), ""); 

// Deal with the response 
+0

找到<網絡> -name肥皂-mtime <過去十年> -print | xargs rm -r – sixtyfootersdude 2010-02-01 23:20:10

回答

4

從早期的肥皂變化很大。你可以做你所描述的事情,但並不常見。

現在更常見的做法是使用wsdl2java工具從服務的WSDL描述中生成客戶端API。這會給你一個很好的,乾淨的API來調用。

Apache CXF是一個去這種事情的地方。

一個限制條件是rpc /編碼。如果您正在處理舊服務,它可能是rpc /編碼的,在這種情況下,您最好的選擇是Apache Axis 1.x.其他的一切都已經從rpc/encoded中解脫出來了。

+0

我嘗試使用wsdl2java,並且出現此錯誤「WSDLToJava錯誤:Rpc /編碼的wsdls不受CXF支持」:(: – Jenni 2010-01-27 19:46:10

+0

這意味着您手上有一個非常舊的Web服務,我將進行編輯。 .. – bmargulies 2010-01-27 20:17:34

+0

謝謝。服務實際上是由一個coldfusion服務器提供的,所以它可能是古老的...我實際上設法使用apis直接工作,但它有點醜。 – Jenni 2010-01-28 13:59:55