2009-08-18 2 views
0

У меня есть веб-служба, которая возвращает объект набора данных, содержащий текущий прогноз погоды, а также 0 или более метеорологических предупреждений для округа/штата. Объект набора данных содержит объект Weather и массив объектов Alerts. Один из клиентов этого хотел бы иметь его, поэтому ответ сначала дает погоду вместо предупреждений. Есть ли способ указать порядок элементов ответа? Я думал, что могу просто изменить WSDL, чтобы сначала отобразить погоду, а затем предупреждения, но ничего не сделал.Определить порядок элементов в ответе SOAP с помощью java

Вот общий WSDL-лист:
(? Ну, показал отформатирован в окне предварительного просмотра, но не после размещения ... как я могу размещать отформатированный XML здесь я попытался с помощью обратного клещей, а также до и кода) ,

<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> 

Я не вижу, как я мог бы указать порядок ответа службы.

+3

Вставить в WSDL, выделить много, а затем нажмите Ctrl-K для отступа его 4 пробела. –

+0

Вам нужно будет сказать что-то о том, как вы создали службу. Какой инструментарий вы использовали? JAX-WS, или что? Какая версия? И т. Д. –

+0

Я использовал JAX-WS 2.0, и я использовал ось apache 1.4 для создания веб-службы. – ravun

ответ

1

Во многих случаях просто изменение WSDL не изменяет службу, и это служба, которая определяет порядок элементов в XML.

+0

Да, позже я понял, что WSDL - это просто определение для пользователя, с которого можно построить клиент. Я пытался Google JAXB и JAX-WS, но я не знаю, что искать ... в большинстве случаев элементы перечислены только в алфавитном порядке. – ravun

+0

Я собирался сказать да?!? пока я не понял, что вы также написали комментарий к OP. Я думаю, что комментарий должен быть включен в ваш ответ, потому что служба, которая не следует за ее WSDL, является нарушенной услугой. – kdgregory

1

Мы можем изменить заказ, добавив аннотации JAXB в конкретный java-файл.

Например: @XmlType (propOrder = { "х", "у", "г"})

 Смежные вопросы

  • Нет связанных вопросов^_^