2 Stimmen

CXF/JAXB Code-first-Dienst: Ändern Sie XMLSchemaType der Eingaben

Ich arbeite an einem CXF/JAXB-Code-First-Webdienst. Ich möchte in der Lage sein, die WSDL-Definitionen einiger der Eingaben zu ändern.

Zum Beispiel, gegeben der folgende Interface-Schnipsel:

@WebMethod
public void Something(@WebParam(name="date") Date date);

Die WSDL wird das XMLSchema für die Eingabe "date" generieren, um ein "datetime" XML-Element zu sein. Ich möchte, dass es einfach ein "date" Element ist.

Es wäre auch schön, die anderen Eingabeattribute, wie minOccurs, usw., spezifizieren zu können.

Für ein benutzerdefiniertes Objekt können die Unter-Elemente all dies durch Annotationen wie XmlElement und XmlSchemaType definieren. Jedoch sind diese Annotationen nicht auf ein Eingabeparameter zulässig.

Ich weiß, dass frühere Versionen von CXF dies nicht handhabten, aber ich bin mir nicht sicher bei den neueren Versionen. Ich verwende derzeit CXF 2.3.5.

2voto

Jeremy Punkte 1005

Hier ist die Antwort, die ich von der cxf-users-Liste erhalten habe:

1) Endorse the JAXB 2.2 API jar via one of the JDK endorsement mechanisms. Dann können die XmlElement- und XmlSchemaType-Annotationen für den Parameter verwendet werden.

(Das ist nicht ganz korrekt - das von mir gebilligte 2.2 jaxb erlaubte die @XmlElement-Annotation auf einem Parameter, erlaubte jedoch nicht die @XmlSchemaType-Annotation)

2) Erstellen Sie die Wrapper-Typ-Beans (Sie können java2ws -warpperBeans als Ausgangspunkt verwenden) und fügen Sie die @RequestWrapper/@ResponseWrapper-Annotationen zu der Methode hinzu, um auf sie zu verweisen. Sie können das Erscheinungsbild des Wrapper-Schemas über Annotationen in den Beans fein steuern.

3) Sie KÖNNEN zusätzliche Unterklassen von AbstractServiceConfiguration in die Fabriken konfigurieren, in denen Sie einige der Methoden überschreiben, um verschiedene minOccurs/maxOccurs/etc.. Typ-Dinge festzulegen. SEHR feine Kontrollebene, aber sehr komplex umzusetzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X