[英]Difference in SOAP envelope from Java Client calling .NET SOAP Web-Service
我有一個C#客戶端,它在下面生成.NET SOAP信封,該信封可與C#ASMX SOAP Web服務配合使用。 但是,我們有一個Java Client調用我們的服務,該服務生成下面指定的Java信封。 信封之間的主要區別在於,某些值被序列化為java客戶端信封中的屬性,而不是C#客戶端信封中的XML元素節點。 Java客戶端使用AXIS WSDL2Java生成其客戶端。 任何人都知道我需要告訴Java開發人員什么,以便他們可以為所示示例生成正確的肥皂信封。
親切的問候
從C#客戶端捕獲的工作SOAP信封
<?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>
感謝您抽出寶貴的時間對此進行審查,但我發現了實際的問題。
事實證明,針對Web服務和代理類型生成的C#代碼在XML中定義的每個屬性的代碼中均缺少[XmlAttribute]屬性。 這導致XmlSerializer將類的屬性展平為元素,而不是將其保留為屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.