2012-01-25 18 views
5

我只是試圖將WSDl轉換爲來自WSDL提供的數據的多個不同的HTTP請求。我已經閱讀了大量類似的問題,但沒有一個真正提供了答案。將WSDL轉換爲其各自的HTTP綁定

有人說要使用SOAPUI - 我熟悉這個應用程序並使用它。但是我需要從我自己的WSDL創建這些HTTP請求。

有人說,試圖JAXWS - 我看着這一些教程以及對和這些翻譯成WSDL Java類綁定,並使用這些方法來測試Web服務。我真的很想自己生成HTTP請求,以便在某個時候我可以操縱請求併發送自己的測試。

我開始使用wsdl4j開始自己解析WSDL,但寧可不走這條路,直到我絕對確信我沒有重新發明輪子。在我看來,過去有這種需求嗎?但與WSDL4J和其他所有庫我沒有看到一個WSDL Soap消息轉換。

任何建議將是非常有益的。目標是我希望能夠接受WSDL,檢查它併爲WSDL中的每個方法創建HTTP-SOAP請求,並且能夠測試它們是否存在安全問題。第一步是創建這些請求!

+0

woa,這是5年前問的! :o - 沒有人在我之前編輯它:o – Gewure

回答

2

當調用SOAP Web服務時,您可以使用靜態調用或動態調用。

靜態調用意味着從WSDL創建一個存根並使用它來執行調用。這將爲您創建所有「管道」代碼,但與該Web服務緊密相關,您不能將其用於具有不同合同的其他Web服務。對於每個WSDL,您需要創建另一個存根。

通過動態調用,您可以在運行時讀取WSDL,並根據您從WSDL獲取的信息找出如何調用Web服務。爲其提供多個WSDL並使客戶端適應。

動態調用是SoapUI用於生成示例請求和響應的內容。

它讀取您提供的WSDL,從類型部分提取XML模式並生成XML實例。爲此,它使用Wsdl4jXmlBeans

您決定使用Wsdl4j是很好的,因爲它可以在解析WSDL時爲您提供控制。但也看看XmlBeans;它有一些其他tools,你可能會發現有用的,例如schema to instance類。

如果您需要看到它在行動(也許調試它,看看發生了什麼事),你可以創建一個soapUI的API快速骯髒測試:

import com.eviware.soapui.impl.wsdl.WsdlInterface; 
import com.eviware.soapui.impl.wsdl.WsdlProject; 
import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlImporter; 

public class Test { 
    public static void main(String[] args) throws Exception { 
     WsdlProject project = new WsdlProject(); 
     WsdlInterface[] wsdls = WsdlImporter.importWsdl(project, "http://www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx?wsdl"); 
     WsdlInterface wsdl = wsdls[0]; 
     System.out.println(wsdl.getOperationByName("Add").createRequest(true)); 
     System.exit(0); // just to clear up some threads created by the project 
    } 
} 

你應該看到打印的信息(用於添加計算器WS的操作)將是這樣的:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:Add> 
     <tem:a>?</tem:a> 
     <tem:b>?</tem:b> 
     </tem:Add> 
    </soapenv:Body> 
</soapenv:Envelope> 

希望這可以幫助你超越的第一步。