Automatisch extrahieren inline-XSD-Code von WSDL in eine XSD-Datei(en)
Ich bin mit einem externen Web-Service, deren definition und Umsetzung sind außerhalb meiner Kontrolle.
Dieser web-service wird sich in Zukunft ändern.
Den Web-Dienst sollte verwendet werden, um erzeugen eine XML-Datei, die enthält einige der gleichen Daten (dargestellt durch die gleiche XSD-Typen) als Web-Service plus einige zusätzliche Informationen, die vom Programm generiert.
Mein Ansatz:
- erstellen meiner eigenen XSD-bezogen auf die XSD-Definitionen des WSDL des aufgerufenen web service (Dies XSD enthält auch den XSD-Typen für die zusätzlichen Informationen natürlich.)
- Verwendung eines Java-XML-databinding-framework (wie ADB oder JiXB) zu erzeugen, das databinding von Klassen aus meiner eigenen XSD-Datei aus Schritt 1
- verwenden Sie einen Java-SOAP-framework (wie Axis2 oder CXF) mit der gleichen databinding-framework zu generieren, das databinding von Klassen aus der WSDL - (Das würde mir ermöglichen, die Verwendung der abgerufenen Objekte der web-service direkt in die Generierung der XML.)
Den XSD-Typen, die ich nutzen werde in meinem eigenen XSD-Datei, sondern definiert in WSDL, sind FREIBLEIBEND. Wenn Sie sich ändern, würde ich mag, um automatisch Prozess der XSD-und WSDL-binding wieder. (Wenn die änderung groß genug, dies könnte trigger einige Entwicklungsarbeit.(Aber in der Regel nicht.))
Mein problem:
In Schritt 1 ich brauche ein XSD beziehen sich auf die gleichen Arten wie die Web-Service.
WSDL bezieht sich auf eine andere WSDL, welcher einen Verweis auf einen anderen WSDL-etc. Schließlich gibt es eine WSDL mit den erforderlichen XSD-Typen. Soweit ich weiß gibt es keine Möglichkeit, direkt auf die XSD-Datentypen von WSDL aus einer XSD.
Den Ansatz würde ich denke, die meisten tragfähig, ist eine zusätzliche Schritt in der automatischen Verarbeitung (vor dem databinding), dass Extrakte der inline-XSD-Code von der WSDL in anderen XSD-Datei(en). Diese XSD-Datei(en) kann dann bezeichnet werden, durch meine eigene XSD-Datei.
Dinge, die ich gerne vermeiden:
- Manuell kopieren und einfügen XSD in eine XSD-Datei (ich bin auf der Suche nach einem automatischen Prozess.)
- Manuelle Schritte.(Wie die Bestimmung der WSDL enthält die inline-Typen manuell.(Der Speicherort der WSDL nicht ändern, wie gut.))
- Hilfe von xsd:any in meiner eigenen XSD. Ich möchte meine eigenen XSD-Datei korrekt zu sein.
- Mit einem nicht-Java-Technologie(wie .NET)
- Riesige Mengen der Implementierung (aber Tipps, wie Sie würde die Umsetzung einer solchen Förderung sind willkommen sowieso)
PS: ich fand einige ähnliche Fragen, aber Sie hatten alle Antworten wie: WTH willst du das tun? Das ist der Grund für meine ziemlich großen hintergrund-story.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kenne keine Bibliotheken, dies zu tun wäre für Sie, aber es ist definitiv möglich zu implementieren, mit ein wenig Aufwand (~200 Zeilen). Eine grobe meta-Programm zum generieren von alle inline-und XSDs enthalten:
Es ist nicht eine vollständige Lösung, z.B. nicht behandelt namespace-Präfixe definiert, die außerhalb des inline-Schemas, aber hoffentlich gibt ein guter Ausgangspunkt.
Nur, um diesen Beitrag relevant, die Dinge haben sich geändert, seit eine Antwort akzeptiert wurde. Es ist nun möglich, in Java zu generieren, was Sie wollen, ausgehend von der WSDL; JAX-WS bietet die wsimport tool, das genau das tut, was angefordert wird: nehmen Sie die WSDL, erstellen Sie ein client-proxy zusammen mit einer Reihe von JAXB-annotierten Klassen, die für die un - /marshalling von Anfragen.
Ich würde aber sagen, zu @MoizTankiwala 's Punkt, dass die Notwendigkeit zu exportieren XSD-Inhalt von WSDL (oder alle externen XSD-Inhalt in einem WSDL-s types-Abschnitt) ist lebendig und gut.
Ersteres ist etwas, das Sinn macht, wenn jemand hat einen großen Körper von XSDs, und es gibt eine Allgemeine Besorgnis in Bezug auf die effektive Verwaltung, Analyse und das entwickeln dieses Modell in XSD.
Letzteres ist ebenfalls begehrt, da einige (vor allem) dynamische Sprachen noch fehlen vollständige geblasen Unterstützung von Werkzeug, wenn es um die WSDL-zu-client-side proxy-Generierung.
Meine andere Antwort auf SO Gespräche über ein ähnliches Bedürfnis, das sollte helfen, zumindest mit Moiz Wunsch...