簡體   English   中英

使用Java指定SOAP響應中元素的順序

[英]Specify order of elements in a SOAP response using java

我有一個Web服務,該服務返回一個數據集對象,該對象包含當前天氣預報以及一個縣/州的0個或多個天氣警報。 數據集對象僅包含一個Weather對象和一系列Alerts對象。 其中的一位客戶希望擁有它,因此響應將首先給出天氣而不是警報。 有沒有辦法指定響應元素的順序? 我以為我可以先更改WSDL以先繪制天氣,然后再繪制警報,但這並沒有做任何事情。

這是通用的WSDL工作表:
(好吧,它在預覽中顯示了格式化的格式,但在發布后沒有顯示……如何在此處發布格式化的XML?我嘗試使用反引號以及pre和code)。

<wsdl:definitions ...>
 <wsdl:types>
  <schema elementFormDefault="qualified" targetNamespace="http://ws.sample.com" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://objects.sample.com"/>
   <element name="getAll">
    <complexType>
     <sequence>
      <element name="county" type="xsd:string"/>
      <element name="state" type="xsd:string"/>
      <element name="latitude" type="xsd:double"/>
      <element name="longitude" type="xsd:double"/>
     </sequence>
    </complexType>
   </element>
   <element name="getAllResponse">
    <complexType>
     <sequence>
      <element name="getAllReturn" type="tns1:DataSet"/>
     </sequence>
    </complexType>
   </element>
   <complexType name="ArrayOf_tns1_Alert">
    <sequence>
     <element maxOccurs="unbounded" minOccurs="0" name="item" type="tns1:Alert"/>
    </sequence>
   </complexType>
  </schema>
  <schema elementFormDefault="qualified" targetNamespace="http://objects.sample.com" xmlns="http://www.w3.org/2001/XMLSchema">
   <import namespace="http://ws.sample.com"/>
   <complexType name="Alert">
    <sequence>
     <element name="county" nillable="true" type="xsd:string"/>
     <element name="endDate" nillable="true" type="xsd:dateTime"/>
     <element name="locationCode" nillable="true" type="xsd:string"/>
     <element name="startDate" nillable="true" type="xsd:dateTime"/>
     <element name="state" nillable="true" type="xsd:string"/>
     <element name="title" nillable="true" type="xsd:string"/>
     <element name="warning" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="Weather">
    <sequence>
     <element name="chancePrecipitation" type="xsd:int"/>
     <element name="period" nillable="true" type="xsd:string"/>
     <element name="skyConditions" nillable="true" type="xsd:string"/>
     <element name="temperature" type="xsd:int"/>
     <element name="temperatureType" nillable="true" type="xsd:string"/>
     <element name="temperatureUnit" nillable="true" type="xsd:string"/>
     <element name="windDirection" nillable="true" type="xsd:string"/>
     <element name="windSpeed" type="xsd:int"/>
     <element name="windUnit" nillable="true" type="xsd:string"/>
    </sequence>
   </complexType>
   <complexType name="DataSet">
    <sequence>
     <element name="weather" nillable="true" type="tns1:Weather"/>
     <element name="alert" nillable="true" type="impl:ArrayOf_tns1_Alert"/>
    </sequence>
   </complexType>
  </schema>
 </wsdl:types>
   <wsdl:message name="getAllResponse">
      <wsdl:part element="impl:getAllResponse" name="parameters"/>
   </wsdl:message>
   <wsdl:message name="getAllRequest">
      <wsdl:part element="impl:getAll" name="parameters"/>
   </wsdl:message>
   <wsdl:portType name="TSTWeather">
      <wsdl:operation name="getAll">
         <wsdl:input message="impl:getAllRequest" name="getAllRequest"/>
         <wsdl:output message="impl:getAllResponse" name="getAllResponse"/>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="TSTWeatherSoapBinding" type="impl:TSTWeather">
      <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="getAll">
         <wsdlsoap:operation soapAction=""/>
         <wsdl:input name="getAllRequest">
            <wsdlsoap:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="getAllResponse">
            <wsdlsoap:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="TSTWeatherService">
      <wsdl:port binding="impl:TSTWeatherSoapBinding" name="TSTWeather">
         <wsdlsoap:address location="http://localhost:8282/Services/service/TSTWeather"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>

我看不到如何指定服務響應的順序。

在許多情況下,僅更改WSDL不會更改服務,而是由服務確定XML中元素的順序。

我們可以通過在特定的Java文件中添加JAXB批注來更改順序。

例如:@XmlType(propOrder = {“ x”,“ y”,“ z”})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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