2012-09-27 87 views
2

我有WSDL(我從外部提供商處獲得)。有這樣的行:配置WSDD以匹配AXIS中的WSDL

<xsd:complexType name="SalesRequest"> 
       <xsd:all> 
        <xsd:element name="merchantid" type="xsd:int"/> 
        <xsd:element name="password" type="xsd:string"/> 
        ... 
       </xsd:all> 
    </xsd:complexType> 

    ... 
    <message name="SalesResponse"> 
     <part name="request" type="tns:SalesResponse"/> 
    </message> 
    .. 
    <portType name="InterfacePortType"> 
    <operation name="Sales"> 
     <documentation>some text</documentation> 
     <input message="tns:SalesRequest"/> 
     <output message="tns:SalesResponse"/> 
    </operation> 

我已經生成了基於此WSDL(使用JAX-RPC)的Java類。

然後我創建了Axis Service(MyService implements InterfacePortType)。

我準備好的XSDD文件將MyService部署到web應用程序。

所以,後來我打電話的我MySerive的方法之一,並得到了響應序列化在服務器端的那一刻這個錯誤:

意想不到的元素名稱:預期=請求,實際= SalesReturn

這意味着我的XSDL和XSDD沒有太多其他。爲MyService準備應對這樣的(但數量而不是通過網絡發送):

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope 
... 
<SalesReturn href="#id0"/></ns1:SalesResponse><multiRef xmlns:ns2= 
... 
</soapenv:Envelope> 

的問題是:我應該WSDD以有「請求」做什麼,而不是「SalesReturn」作爲迴應來自服務的XML?

我還不知道這'返回'後綴來自哪裏。

- 一些步驟,我已經做:

我用Google搜索,發現WSDL應該有「的架構將elementFormDefault =‘合格’」在裏面。但是我不能改變WSDL,因爲它是外部的,它是由外部提供者提供的。

+0

它似乎與以下相關:http://ws-rx.blogspot.ca/2006/12/common-jaxrpc-error-unexpected-element.html – ses

+0

您是否使用相同的Wsdl創建客戶端和服務器部分?也就是說你每次都從Wsdl開始? – davidfrancis

+0

nope。只爲客戶。這個問題,如何使用兩者之一?我已經在這裏問過這個問題了:http://stackoverflow.com/questions/12608282/how-to-generate-wsdd-based-on-code – ses

回答

0

我找到了解決辦法,我產生WSDD使用axistools - Maven的插件,設置:服務器端參數真正 - 那麼它生成的WSDD文件。

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>axistools-maven-plugin</artifactId> 
     <executions> 
      <execution> 
       <id>wsdl2java-job</id> 
       <phase>generate-sources</phase> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
        <configuration> 
         <sourceDirectory> 
          src/main/config/wsdl2java/myfolder 
         </sourceDirectory> 
         <outputDirectory> 
          ${generatedSourcesDirectory} 
         </outputDirectory> 
         <testCases>false</testCases> 
         <serverSide>true</serverSide> 
         <subPackageByFileName> false 
         </subPackageByFileName> 
         <packageSpace> my.api 
         </packageSpace> 
         </configuration> 
        </execution> 
    </plugin> 

順便說一句,當我推出這個插件它結束了彙編例外,但是,儘管如此,它可以產生我WSDD。

那麼,如果生成看看WSDD至極,有我沒我的手工製作WSDD有一些有趣的線路:

<operation name="sales" qname="operNS:Sales" 
xmlns:operNS="urn:Interface" 
returnQName="request" 
returnType="rtns:SalesResponse" 
xmlns:rtns="urn:Interface" soapAction="urn:Interface#Sales" > 
    <parameter qname="in" type="tns:SalesRequest" xmlns:tns="urn:Interface"/> 
</operation> 

這一部分:returnQName =「請求」

它也生成「typeMapping」標籤(但我用beanMapping)

所以,只要我把這個改變到我的文件,我得到了一切工作。

其實,最初是爲生成我最初的來源我用另一個插件:Maven的antrun-插件

但沒有選項生成WSDD。

0

什麼錯誤是告訴你的是,請求應該看起來像

<soapenv:Envelope> <request> <SalesRequest>...

,並要發送到得到這個數字出來

<soapenv:Envelope> <SalesReturn>...

最好的辦法是嘗試用工具(如SOAP UI),並將它們發送的有效負載與從工具生成的有效負載進行比較 - 有些工具可以選擇在輸入/輸出消息中打包或解包零件名稱。

希望這有助於

+0

我知道。我看到了。但如何解決它?這+返回是由自動切斷(我猜基於WSDD) – ses