2017-04-24 242 views
0

我有一個奇怪的問題,我的一個WSDL的這個WSDL有什麼問題?爲什麼SOAPUI從這個WSDL中生成錯誤的請求?

當我創建SOAPUI新的SOAP項目並導入WSDL,SOAPUI產生一個例子的要求,但這一要求缺少操作的命名空間和元素。

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <customers> 
     <!--Zero or more repetitions:--> 
     <customerId>?</customerId> 
     </customers> 
    </soapenv:Body> 
</soapenv:Envelope> 

根據我的WSDL和XSD,我會在結尾的參考,我希望請求看起來更像是這樣的:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:look="http://noa.otto.de/onlinecustomer/webservice/lookupadditionaldata"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <look:requestAdditionalCustomerData> 
      <look:customers> 
      <!--Zero or more repetitions:--> 
      <look:customerId>?</look:customerId> 
      </look:customers> 
     </look:requestAdditionalCustomerData> 
    </soapenv:Body> 
</soapenv:Envelope> 

但即使我的「正確」這樣的請求手動它不會工作,並仍然在服務器端產生SOAPFault異常,指出它「無法從WS上下文檢索操作名稱」

這告訴我,該問題可能不在SOAPUI的能力從WSDL生成正確的請求,但是以我的能力d efine一個正確的WSDL :-)

問題是,我沒有更多的想法我可以嘗試,我已經在這個近兩天。所以我想也許別人有一個想法。

任何想法都是好的,並提前感謝您的時間!

問候 馬里奧

哦,萬一它的事項,web服務部署在GlassFish中/似鯖水狼牙魚4.1.1

這裏是我的WSDL:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:webservice="http://noa.otto.de/onlinecustomer/webservice/lookupadditionaldata" xmlns:lookupadditionaldata="http://noa.otto.de/onlinecustomer/schema/lookupadditionaldata" name="LookupAdditionalUniservData" targetNamespace="http://noa.otto.de/onlinecustomer/webservice/lookupadditionaldata"> 
<types> 
    <xsd:schema> 
    <xsd:import namespace="http://noa.otto.de/onlinecustomer/schema/lookupadditionaldata" schemaLocation="http://blade228.puc.ov.otto.de:52301/onlinecustomer/LookupAdditionalUniservData?xsd=1"/> 
    </xsd:schema> 
</types> 

<message name="requestAdditionalCustomerDataRequest"> 
    <part name="customers" type="lookupadditionaldata:intArray"/> 
</message> 

<message name="requestAdditionalCustomerDataResponse"> 
    <part name="customerData" type="lookupadditionaldata:customerDataArray"/> 
</message> 

<portType name="LookupAdditionalUniservDataPort"> 
    <operation name="requestAdditionalCustomerData"> 
     <input message="webservice:requestAdditionalCustomerDataRequest"/> 
     <output message="webservice:requestAdditionalCustomerDataResponse"/> 
    </operation> 
</portType> 

<binding name="LookupAdditionalUniservDataPortBinding" type="webservice:LookupAdditionalUniservDataPort"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> 
    <operation name="requestAdditionalCustomerData"> 
     <documentation>collects customer account information for a given list of idCustomers</documentation> 
     <soap:operation soapAction="requestAdditionalCustomerData" style="document"/> 
     <input> 
      <soap:body use="literal"/> 
     </input> 
     <output> 
      <soap:body use="literal"/> 
     </output> 
    </operation> 
</binding> 

<service name="LookupAdditionalUniservDataService"> 
    <documentation>this service provides a means for the CASS/ENS/Uniserv system to collect additional customer account data</documentation> 
    <port name="LookupAdditionalUniservDataPort" binding="webservice:LookupAdditionalUniservDataPortBinding"> 
     <soap:address location="http://blade228.puc.ov.otto.de:52301/onlinecustomer/LookupAdditionalUniservData"/> 
    </port> 
</service> 

</definitions> 

,這裏是XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://noa.otto.de/onlinecustomer/schema/lookupadditionaldata" targetNamespace="http://noa.otto.de/onlinecustomer/schema/lookupadditionaldata" version="1.0"> 

    <xs:complexType name="customerData"> 
     <xs:sequence> 
      <xs:element name="accountBalance" type="xs:long" minOccurs="0"/> 
      <xs:element name="birthday" type="xs:dateTime" minOccurs="0"/> 
      <xs:element name="blockedOrderValue" type="xs:int" minOccurs="0"/> 
      <xs:element name="city" type="xs:string" minOccurs="0"/> 
      <xs:element name="combinedCreditWorthinessClass" type="xs:short" minOccurs="0"/> 
      <xs:element name="companyId" type="xs:short" minOccurs="0"/> 
      <xs:element name="creationDate" type="xs:dateTime" minOccurs="0"/> 
      <xs:element name="custNo" type="xs:string" minOccurs="0"/> 
      <xs:element name="blockades" minOccurs="0"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="blockade" type="tns:customerBlockade" minOccurs="0" maxOccurs="unbounded"/> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="dunningLevel" type="xs:string" minOccurs="0"/> 
      <xs:element name="email" type="xs:string" minOccurs="0"/> 
      <xs:element name="errorMessage" type="xs:string" minOccurs="0"/> 
      <xs:element name="externalAccountBlockingSign" type="xs:byte" minOccurs="0"/> 
      <xs:element name="externalBlockingSign" type="xs:byte" minOccurs="0"/> 
      <xs:element name="externalCustomerType" type="xs:short" minOccurs="0"/> 
      <xs:element name="firstName" type="xs:string" minOccurs="0"/> 
      <xs:element name="houseNo" type="xs:string" minOccurs="0"/> 
      <xs:element name="id" type="xs:int" minOccurs="0"/> 
      <xs:element name="lastName" type="xs:string" minOccurs="0"/> 
      <xs:element name="openBackorder" type="xs:int" minOccurs="0"/> 
      <xs:element name="phone" type="xs:string" minOccurs="0"/> 
      <xs:element name="salutation" type="xs:string" minOccurs="0"/> 
      <xs:element name="street" type="xs:string" minOccurs="0"/> 
      <xs:element name="weeklyCredit" type="xs:long" minOccurs="0"/> 
      <xs:element name="zip" type="xs:string" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="customerBlockade"> 
     <xs:sequence> 
      <xs:element name="blockadeAge" type="xs:long" minOccurs="0"/> 
      <xs:element name="blockadeName" type="xs:string" minOccurs="0"/> 
      <xs:element name="blockadeNumber" type="xs:short" minOccurs="0"/> 
      <xs:element name="blockadeState" type="tns:blockadeState" minOccurs="0"/> 
      <xs:element name="dominantBlockadeSign" type="xs:boolean" minOccurs="0"/> 
      <xs:element name="paymentKey" type="xs:byte" minOccurs="0"/> 
      <xs:element name="paymentKeyName" type="xs:string" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 

    <xs:simpleType name="blockadeState"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="ACTIVE"/> 
      <xs:enumeration value="SUSPENDED"/> 
     </xs:restriction> 
    </xs:simpleType> 

    <xs:complexType name="customerDataArray" final="#all"> 
     <xs:sequence> 
      <xs:element name="item" type="tns:customerData" minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
     </xs:sequence> 
    </xs:complexType> 
    <element name="customerDataArray" type="tns:customerDataArray"/> 

    <xs:complexType name="intArray" final="#all"> 
     <xs:sequence> 
      <xs:element name="customerId" type="xs:int" minOccurs="0" maxOccurs="unbounded" nillable="true"/> 
     </xs:sequence> 
    </xs:complexType> 
    <element name="intArray" type="tns:intArray"/> 

</xs:schema> 
+0

您是否多次導入wsdl?後來更新了架構定義並重新導入? – Rao

+0

是的,這是一種迭代過程,直到我得到web服務在服務器端工作,並在那段時間,我多次(肥皂ui)導入wsdl(ctrl + u)。爲什麼這是相關的?你似乎沒有解決方案,但我還沒有得到它:-) –

+0

SoapUI緩存wsdl/xsd的定義。可能是你嘗試在新項目中使用最新的wsdl,並查看行爲是否仍然相同或所需的行爲。 – Rao

回答

0

我發現了導致此問題的原因。這在WSDL中是錯誤的。在<message>定義中,我使用<part>元素中的屬性type=""。它應該是element=""而不是type="",然後才能正常工作。