2015-08-26 109 views
1

我有一個C#客戶端,它生成下面的.NET SOAP信封,該信封針對C#ASMX SOAP Web服務工作。然而,我們有一個Java客戶端調用我們的服務,它正在生成下面指定的Java信封。信封之間的主要區別在於,某些值在Java客戶端信封中被序列化爲屬性,而不是C#客戶端信封中的XML元素節點。 Java客戶端正在使用AXIS WSDL2Java來生成他們的客戶端。有誰知道我需要告訴Java開發人員,以便他們可以爲所示示例生成正確的soap信封。來自Java客戶端調用.NET SOAP Web服務的SOAP信封差異

親切的問候

工作SOAP信封從C#客戶

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
    <getDocumentPageRequest xmlns="urn:mycorp-com:MyApp.Schema.DocumentEnquiry.Messages.v01"> 
     <header xmlns="urn:mycorp-com:MyApp.Schema.Common.Types.v01"> 
     <extensions /> 
     <corelationIdentifier>41edebfb-fffd-44f8-94e9-be043e1dad48</corelationIdentifier> 
     </header> 
     <securityToken xmlns="urn:mycorp-com:MyApp.Schema.Common.Types.v01"> 
     <Value>218FD85D</Value> 
     </securityToken> 
     <documentIdentifier>15236HDFG000005</documentIdentifier> 
     <pageNumber>1</pageNumber> 
    </getDocumentPageRequest> 
    </soap:Body> 
</soap:Envelope> 

Java的SOAP信封拍攝的圖像 - 通過Web服務

<?xml version="1.0" encoding="UTF-8"?> 
<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> 
    <getDocumentPageRequest 
     documentIdentifier="15236HDFG000005" 
     pageNumber="1" 
     xmlns="urn:mycorp-com:MyApp.Schema.DocumentEnquiry.Messages.v01"> 
     <ns1:header corelationIdentifier="" xmlns:ns1="urn:mycorp-com:MyApp.Schema.Common.Types.v01"> 
     <ns1:extensions/> 
     </ns1:header> 
     <ns2:securityToken xmlns:ns2="urn:mycorp-com:MyApp.Schema.Common.Types.v01">218FD85D</ns2:securityToken> 
    </getDocumentPageRequest> 
    </soapenv:Body> 
</soapenv:Envelope> 

編輯::加在不工作根據要求提供WSDL。

樣品WSDL和XSD提取

下面是產生的WSDL的樣本,並且它導入了該消息類型的XSD的提取物。我可以看到,XML具有屬性,這就是AXIS WSDL2Java生成的內容,但C#代理和Web服務需要XML節點。我認爲這意味着C#服務實現的方式與其定義的模式不同或不同。這是混亂...

<!-- WSDL Extract --> 
<message name="getDocumentPageIn"> 
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" /> 
    <part name="messagePart" element="import0:getDocumentPageRequest" /> 
</message> 
<message name="getDocumentPageOut"> 
    <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" /> 
    <part name="messagePart" element="import0:getDocumentPageResponse" /> 
</message> 
<!-- import0 XSD extract --> 
<xs:element name="getDocumentPageRequest"> 
    <xs:complexType> 
     <xs:complexContent> 
      <xs:extension base="MyApp:request"> 
       <xs:attribute name="documentIdentifier" type="xs:string" use="required"/> 
       <xs:attribute name="pageNumber" type="xs:short" use="required"/> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:element> 
+2

爲服務生成的WSDL是如何查看的? – noMad17

+0

Thanks @ noMad17,更新了帶有WSDL樣本請求的問題。 – Bigtoe

回答

0

感謝您抽空查看這篇文章的時候,但我發現實際問題。

事實證明,正在爲Web服務和代理的類型生成的C#代碼在XML中定義的每個屬性的代碼中缺少[XmlAttribute]屬性。這導致XmlSerializer將類的屬性變爲元素而不是將它們保留爲屬性。