簡體   English   中英

與Java客戶端調用.NET SOAP Web服務的SOAP信封有所不同

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM