2014-03-12 121 views
0

我必須創建一個連接Java AXIS Web服務的.NET Web服務客戶端。 我的問題與這樣一個事實有關,即當調用WS時返回一個由256個元素組成的數組(這是正確的),但是每個元素在其屬性中都有空值。.NET客戶端代理使用AXIS Web服務

的WSDL是如下:

<?xml version="1.0" encoding="UTF-8"?> 
<wsdl:definitions targetNamespace="http://service.sms.mycompany.eu" 
        xmlns:apachesoap="http://xml.apache.org/xml-soap" 
      xmlns:impl="http://service.sms.mycompany.eu" 
      xmlns:intf="http://service.sms.mycompany.eu" 
      **xmlns:tns1="http://model.sms.mycompany.eu"** 
      xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
      xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<!--WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT)--> 
<wsdl:types> 
    <schema elementFormDefault="qualified" 
      targetNamespace="http://service.sms.mycompany.eu" 
      xmlns="http://www.w3.org/2001/XMLSchema"> 
    <import namespace="http://model.sms.mycompany.eu"/> 
    <element name="getCountries"> 
    <complexType/> 
    </element> 
    <element name="getCountriesResponse"> 
    <complexType> 
    <sequence> 
     <element maxOccurs="unbounded" name="getCountriesReturn" type="**tns1:Country**"/> 
    </sequence> 
    </complexType> 
    </element> 
    </schema> 
    <schema elementFormDefault="qualified" 
      targetNamespace="http://model.sms.mycompany.eu" 
      xmlns="http://www.w3.org/2001/XMLSchema"> 
    <complexType name="Country"> 
    <sequence> 
    <element name="description" nillable="true" type="xsd:string"/> 
    <element name="id" nillable="true" type="xsd:string"/> 
    </sequence> 
    </complexType> 
    </schema> 
</wsdl:types> 
    <wsdl:message name="getCountriesRequest"> 
     <wsdl:part element="impl:getCountries" name="parameters"></wsdl:part> 
    </wsdl:message> 
    <wsdl:message name="getCountriesResponse"> 
     <wsdl:part element="impl:getCountriesResponse" name="parameters"></wsdl:part> 
    </wsdl:message> 
    <wsdl:operation name="getCountries"> 
     <wsdl:input message="impl:getCountriesRequest" name="getCountriesRequest"></wsdl:input> 
     <wsdl:output message="impl:getCountriesResponse" name="getCountriesResponse"></wsdl:output> 
    </wsdl:operation> 
    <wsdl:portType name="SapServiceOut"> 
     <wsdl:operation name="getCountries"> 
     <wsdl:input message="impl:getCountriesRequest" name="getCountriesRequest"> 
     </wsdl:input> 
     <wsdl:output message="impl:getCountriesResponse" name="getCountriesResponse"></wsdl:output> 
     </wsdl:operation> 
    </wsdl:portType> 

    <wsdl:binding name="SapServiceOutSoapBinding" type="impl:SapServiceOut"> 
     <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
     <wsdl:operation name="getCountries"> 
     <wsdlsoap:operation soapAction=""/> 
     <wsdl:input name="getCountriesRequest"> 
      <wsdlsoap:body use="literal"/> 
     </wsdl:input> 
     <wsdl:output name="getCountriesResponse"> 
      <wsdlsoap:body use="literal"/> 
     </wsdl:output> 
     </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="SapServiceOutService"> 
     <wsdl:port binding="impl:SapServiceOutSoapBinding" name="SapServiceOut"> 
     <wsdlsoap:address location="http://localhost:8080/XBP/services/SapServiceOut"/> 
     </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

我已經測試用了SoapUI服務,這是結果

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Body> 
     **<getCountriesResponse xmlns="http://service.sms.mycompany.eu">** 
     <getCountriesReturn> 
      <description>Afghanistan</description> 
      <id>AF</id> 
     </getCountriesReturn> 
     <getCountriesReturn> 
      <description>Antigua/Barbuda</description> 
      <id>AG</id> 
     </getCountriesReturn> 
     ... 
     </getCountriesResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

我已經看到,有(在兩個命名空間之間的差封閉之間**),但我仍然不明白如何糾正WSDL使其工作。

有人可以正確地解決我的問題嗎? 非常感謝

回答

1

在響應中的所有對象都在相同的架構,但在您的WSDL定義getCountriesReturn有型的另一個命名空間。您可以修復它改變你的WSDL包括http://service.sms.mycompany.eu模式國家類型:

<wsdl:definitions targetNamespace="http://service.sms.mycompany.eu" 
       xmlns:apachesoap="http://xml.apache.org/xml-soap" 
     xmlns:impl="http://service.sms.mycompany.eu" 
     xmlns:intf="http://service.sms.mycompany.eu" 
     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
     xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<!--WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT)--> 
<wsdl:types> 
    <schema elementFormDefault="qualified" 
     targetNamespace="http://service.sms.mycompany.eu" 
     xmlns="http://www.w3.org/2001/XMLSchema"> 
     <element name="getCountries"> 
      <complexType/> 
     </element> 
     <element name="getCountriesResponse"> 
      <complexType> 
       <sequence> 
        <element maxOccurs="unbounded" name="getCountriesReturn" type="Country"/> 
       </sequence> 
      </complexType> 
     </element> 
     <complexType name="Country"> 
      <sequence> 
       <element name="description" nillable="true" type="xsd:string"/> 
       <element name="id" nillable="true" type="xsd:string"/> 
      </sequence> 
     </complexType> 
    </schema> 
</wsdl:types> 
<wsdl:message name="getCountriesRequest"> 
    <wsdl:part element="impl:getCountries" name="parameters"/> 
</wsdl:message> 
<wsdl:message name="getCountriesResponse"> 
    <wsdl:part element="impl:getCountriesResponse" name="parameters"/> 
</wsdl:message> 
<wsdl:operation name="getCountries"> 
    <wsdl:input message="impl:getCountriesRequest" name="getCountriesRequest"/> 
    <wsdl:output message="impl:getCountriesResponse" name="getCountriesResponse"/> 
</wsdl:operation> 
<wsdl:portType name="SapServiceOut"> 
    <wsdl:operation name="getCountries"> 
     <wsdl:input message="impl:getCountriesRequest" name="getCountriesRequest"> 
     </wsdl:input> 
     <wsdl:output message="impl:getCountriesResponse" name="getCountriesResponse"/> 
    </wsdl:operation> 
</wsdl:portType> 

<wsdl:binding name="SapServiceOutSoapBinding" type="impl:SapServiceOut"> 
    <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <wsdl:operation name="getCountries"> 
     <wsdlsoap:operation soapAction=""/> 
     <wsdl:input name="getCountriesRequest"> 
      <wsdlsoap:body use="literal"/> 
     </wsdl:input> 
     <wsdl:output name="getCountriesResponse"> 
      <wsdlsoap:body use="literal"/> 
     </wsdl:output> 
    </wsdl:operation> 
</wsdl:binding> 
<wsdl:service name="SapServiceOutService"> 
    <wsdl:port binding="impl:SapServiceOutSoapBinding" name="SapServiceOut"> 
     <wsdlsoap:address location="http://localhost:8080/XBP/services/SapServiceOut"/> 
    </wsdl:port> 
</wsdl:service>