JAXB oder apache.axis rausoptimiert Elemente

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • JAXB oder apache.axis rausoptimiert Elemente

    Hallo.

    Wir haben folgendes Problem mit JAXB und apache.axis:
    Wir benötigen die folgende Struktur in xsd über org.apache.axis.client.Call.invoke() als SOAP zu senden (nicht direkt händisch, sondern gemapped durch JAXB):

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    3. xmlns:ns1="http://was/auch/immer/xsd/v1.0/statusAnfrage.xsd"
    4. targetNamespace="http://was/auch/immer/xsd/v1.0/statusAnfrage.xsd"
    5. elementFormDefault="qualified"
    6. attributeFormDefault="unqualified">
    7. <xs:element name="status" xmlns="http://was.anderes.biztalk.MeldeService.isin_statusimport">
    8. <xs:complexType>
    9. <xs:annotation>
    10. <xs:documentation>Status Request</xs:documentation>
    11. </xs:annotation>
    12. <xs:sequence>
    13. <xs:element name="meldungId" type="xs:long"/>
    14. </xs:sequence>
    15. </xs:complexType>
    16. </xs:element>
    17. </xs:schema>
    Alles anzeigen


    Das Problem ist, dass das SOAP-Message nicht die ganze oben angezeigte Struktur enthält (nicht das Element "status"), aber nur das Unterelement:
    <?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>
    <getStatus xsi:type="http://was.anderes.biztalk.MeldeService.isin_statusimport">
    <meldungId xsi:type="xsd:long">789</meldungId>
    </getStatus>
    </soapenv:Body>
    </soapenv:Envelope>

    Wie kann man JAXB dazu bringen, dass keine Elemente rausoptimiert werden (z.B. in dem xsd-Schema, in JAXB, anderswo)? Wir brauchen die ganze Struktur so, wie sie ist.

    Danke vielmals für jeden sinnvollen Rat.
    Lubos.
  • Also, hier scheint schon die Herangehensweise nicht ganz richtig.

    Bei SOAP-XML-Schnittstellen ist eigentlich JaxWS und nicht JaxB Mittel der Wahl und das Schema wird nicht von einer XSD-Datei, sondern von einer WSDL-Datei vorgegeben.

    Dann gibt es eine grundlegende Frage zu klären!
    Welche Seite definiert die Schnittstelle?!

    Anhand deines Kommentars
    Das Problem ist, dass das SOAP-Message nicht die ganze oben angezeigte Struktur enthält

    erkenne ich, dass du bereits eine fertige SOAP-Message bekommst. Demnach bist du nicht die Seite, die die Schnittstelle definiert, da die andere Seite dir ja bereits Nachrichten schickt.

    Aufgrund dessen, muss auf der anderen Seite bereits eine WSDL existieren, mit der diese Nachricht erzeugt wurde. Lass dir EXAKT diese Datei geben. Sie müssen immer 100% auf beiden Seiten der Schittstelle übereinstimmen. Mit dieser Datei generierst du dir mittels JaxWS deine Java-Klassen.

    Sich selbst ein Schema zusammen zu basteln (das vielleicht bei 90% der Requests funktioniert) ist amateurhaftes Gefrickel und vergewaltigt das ganze Konzept das hinter einem gemeinsamen Schema steht. Dann kann man auch gleich Textnachrichten hin und her schicken (was dann sogar performanter wäre).

    Edit:
    Die drastische Ausdrucksweise ist nicht auf dich bezogen, sondern auf den Umstand, dass sooo häufig in der Praxis Technologien eigesetzt werden ohne das das dahinterstehende Konzept begriffen wurde. Dann sind diese Technologien in der Regel völlig kontraproduktiv und machen mehr Arbeit als sie nützen. Normalerweise hätte die anderen Seite sofort die WSDL liefern/anbieten müssen. Das ist sehr frustrierend mit der Zeit.