2014-03-12 167 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>