2012-09-17 43 views
2

現有的WebService(用PHP編寫)將Key,Value Store指定爲xsd:struct。由於安訊士不知道如何解釋這一點,我喜歡下載和修補Wsdl以供我個人使用。如何在wsdl中指定java.util.HashMap(key ==> value)

最後,所生成的請求應該是這樣的:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:emn="interface.foobar"> 
<soap:Header/> 
<soap:Body> 
    <emn:searchFoobar> 
    <emn:searchParameter> 
     <emn:username>xxxx</emn:username> 
     <emn:password>xxxx</emn:password> 
     <emn:maxHitCount>1</emn:maxHitCount> 
     <emn:sorting>distance</emn:sorting> 
     <emn:searchtext>example</emn:searchtext>   
    </emn:searchParameter> 
    </emn:searchFoobar> 
</soap:Body> 
</soap:Envelope> 

在這個例子中searchParameter作爲我的客戶端上的java.util.HashMap。它的childern是Key和Value條目。

是這樣的:

<emn:hashmapName> 
    <key1>value1</key1> 
    <key2>value2</key2> 
    <key3>value3</key3> 
</emn:hashmapName> 

完整的WSDL看起來像這樣(最後我想通過java.util.HashMap更換xsd:struct):

<?xml version="1.0"?> 
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://foobar.service.de/service/v2" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="Soap_Manager" targetNamespace="http://foobar.service.de/service/v2"> 
    <types> 
     <xsd:schema targetNamespace="http://foobar.service.de/service/v2"/> 
    </types> 
    <portType name="Soap_ManagerPort"> 
     <operation name="searchFoo"> 
      <documentation>searchFoo</documentation> 
      <input message="tns:searchFooIn"/> 
      <output message="tns:searchFooOut"/> 
     </operation> 
    </portType> 
    <binding name="Soap_ManagerBinding" type="tns:Soap_ManagerPort"> 
     <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
     <operation name="searchFoo"> 
      <soap:operation soapAction="http://foobar.service.de/service/v2#searchFoo"/> 
      <input> 
       <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://foobar.service.de/service/v2"/> 
      </input> 
      <output> 
       <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://foobar.service.de/service/v2"/> 
      </output> 
     </operation> 
    </binding> 
    <service name="Soap_ManagerService"> 
     <port name="Soap_ManagerPort" binding="tns:Soap_ManagerBinding"> 
      <soap:address location="http://foobar.service.de/service/v2"/> 
     </port> 
    </service> 
    <message name="searchFooIn"> 
     <part name="param" type="xsd:struct"/> 
    </message> 
    <message name="searchFooOut"> 
     <part name="return" type="xsd:struct"/> 
    </message> 
</definitions> 

有人能告訴我如何指定java.util.HashMap這種用途?從這裏Link to download

一旦你下載它,

+1

在我們的服務中,我們有一個可以通過鍵/值對傳遞的屬性列表。這被定義爲List 。這使我們可以將列表中的任意數量的鍵/值對傳遞給Web服務。 – Logan

+0

聽起來不錯。你能告訴我這個Wsdl怎麼樣? – d0x

+0

什麼是「xsd:struct」?在我意識到的xml模式中沒有這種類型?聽起來像一個破碎的模式/ wsdl – jtahlborn

回答

0

下載Apache Axis的解壓,或按照安裝說明。它帶有一個名爲wsdl2java的實用程序,它將讀入您的wsdl文件併爲其構建java類。

我救了你的WSDL從上面到名爲c:\ TEMP \ test.wsdl

然後我跑中的WSDL2Java命令針對這樣的:

wsdl2java -uri c:\temp\test.wsdl 

它生成的源文件夾您的wsdl和2個可用於調用該服務的java類的包名稱。

相關問題