Wie sind date-und datetime-soll serialisiert werden SOAP (xml -) Nachrichten

Arbeiten wir an einem Gebäude ein java-client mit einer Dritten Partei, SOAP-Webservice, das heißt ich habe keinen Zugang oder Kontrolle aus server-side code. Wir sind nur mit der WSDL-Beschreibung die Datei des service. Wir sind mit Achse 1 (version 1.4 ).

Führen wir in folgenden Problem mit Datum vs datetime-Serialisierung und-Deserialisierung. Das sagte der wsdl definiert zwei Typen DateTime und DateRange

<xs:element minOccurs="0" name="DateTime" type="xs:dateTime"/>
<xs:element minOccurs="0" name="DateRange">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Start" type="xs:date"/>
      <xs:element name="End" type="xs:date"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

Wo-xs-Präfix kennzeichnet ein XML-Schema, das folgende vorhanden ist

xmlns:xs="http://www.w3.org/2001/XMLSchema" 

Den axis wsdl2java generiert Java-Objekte whre datetime-Feld Typ auf Kalender, und start -, end-Felder eingegeben werden, um java.util.Datum

Wenn die Serialisierung geschieht die start-und end-Felder serialisiert werden, um yyyy-mm-dd-format , zum Beispiel 2014-02-01
Aber wenn der eigentliche Aufruf auf server-Seite, die wir erhalten folgende Antwort

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Server</faultcode>
         <faultstring xml:lang="en">JiBX unmarshalling exception; nested exception is org.jibx.runtime.JiBXException: Missing 'T' separator in dateTime</faultstring>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Wir verwendet, SOAP-UI zum erstellen des request-xml payload direkt und beobachtet, wenn wir übergeben Sie nur den date-Teil in den start-und end-Felder erhalten wir genau die gleiche Reaktion, wenn wir passieren die zwei Felder mit der Zeit Teil wie ein dateTime-Feld, das es funktioniert, gibt keine Fehler Meldung.

Diese, wenn zusammen genommen mit dem, was ich konnte den Glanz von XMLSchema-Dokumentation für
xs:date und xs:dateTime , insbesondere die lexikalische und die kanonische Darstellung Abschnitt, scheint zu implizieren, dass

  1. Achse basierte Serialisierung von start-und Ende-Feld, um nur yyyy-mm-dd und das ignorieren der Zeit, die portion ist korrekt. Und client-seitigen code generiert, entspricht der WSDL uns zur Verfügung gestellt.
  2. Server-side-code nicht konform zu WSDL, die von uns bereitgestellt, es erwartet Sie ein dateTime-Feld statt ein Datum Feld.
  3. Da die date-und dateTime-Feld erforderlich sind, serialisiert werden, die in verschiedenen Formaten, die durch die schema-definition. Das Ergebnis bei Fehler auf server-Seite, wenn es versucht zu de-serialisieren
    die Nachricht

Zur Validierung unserer Hypothese 1. wir verwendeten Python-ZSI-Bibliothek zum generieren von python-stub und erzeugte xml aus.
Auch, dass serialisiert start und Ende in yyyy-mm-dd-format , mit einer zusätzlichen " Z " am Ende.
Dieser wieder nicht deserialisiert werden auf server-Seite, obwohl diese Serialisierung format entspricht xs:date definiert durch XML-Schema

<ns1:Start>2014-02-05Z</ns1:Start>

Kann jemand bestätigen, wenn die Hypothese gebildet, die durch uns, basierend auf beobachteten Verhaltens, Dokumentation und experiment mit Python-ZSI ist richtig. Oder wenn wir fehlen einige Details

InformationsquelleAutor Himanshu | 2014-02-06

Schreibe einen Kommentar