Frage

Mit CXF 2.3.1.

generiert Java von WSDLs mit JAXB.

Mit

<jaxws:properties>
    <entry key="schema-validation-enabled" value="true" />
</jaxws:properties>

in der Client-Konfiguration.

Mein Test erzeugt ein Objekt, das diese besondere Anforderung der WSDL fehlschlägt:

<xsd:simpleType name="UUID.Content">
    <xsd:annotation>
        <xsd:documentation xml:lang="EN">
            Universally Unique Identifier
            </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:token">
        <xsd:length value="36" />
        <xsd:pattern
            value="[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}" />
    </xsd:restriction>
</xsd:simpleType>

Allerdings ist die Nachricht vermarshallten und macht es den ganzen Weg durch die abgehende Interceptor Kette.

Die WSDL ist ein Weg. Nur für die Eingabe

WSDLLocation wird in einer Anmerkung in dem Impls angegeben.

Interessanterweise eingehende Nachrichten, die Validierung dieser gleiche Einschränkung nicht bestehen, werden durch die Abfangjäger Kette blockiert während unmarshalling.

Ich teste auf WebLogic. Ich könnte auch Test auf WebSphere benötigt wird.

Andere XSD Validierung Ausfälle (wie ein fehlendes erforderliches Element) von dem ausgehenden Einweiser gefangen.

Der Grund, dass wir auf CXF 2.3.1 von 2.2.6 aufgerüstet war, dass wir ähnliche Probleme auf die eingehenden Nachrichten sahen. In 2.3.1, vollständige XSD Validierung erfolgt für eingehende Nachrichten, aber nicht für abgehend diejenigen.

Hier ist der Fehler in CXF:

https://issues.apache.org/jira/browse/CXF-3233

Wir arbeiteten, um diese von org.springframework.xml.validation.XmlValidator zu bestätigen, bevor die Nachricht an die CXF Abfangjäger Kette zu senden. Ich hoffe auf Korrekturen, die die CXF Abfangjäger Kette verwenden. Allerdings vermute ich, dass dies ein Fehler in CXF ist.

War es hilfreich?

Lösung

Ich habe ähnliche Probleme (CXF 2.2.7) hatte und konnte es lösen, indem die serviceName und endpointName Attribute meiner <jaxws:client> Bean Definition. Besuche im Abschnitt "Konfigurieren eines Frühlings-Client (Option 1)" hier: https: / /cwiki.apache.org/CXF20DOC/jax-ws-configuration.html weitere Informationen zu den Attributen.

Hinweis: Ich habe auch das wsdlLocation Attribut auch definiert. Dies ist wahrscheinlich notwendig für CXF die XSDs vom Dienst verwendete zu finden.

Hier ist ein Beispiel dafür, was ich habe:

<jaxws:client id="client"
              serviceClass="com.example.ServiceInterface"
              address="http://example.com/endpoint"
              wsdlLocation="WEB-INF/wsdl/SampleWSDLFile.wsdl"
              serviceName="s:SampleService"
              endpointName="s:SampleServicePort"
              xmlns:s="http://www.example.com/some/namesapce">
...
</jaxws:client>

Ich habe auch bemerkt, wenn ich dieses Problem hatte das ganze Schema meine Protokolldatei wurde jedes Mal von der org.apache.cxf.wsdl.EndpointReferenceUtils Klasse gedruckt wurde der Client aufgerufen. Dieses Verhalten ging weg, als ich meinen Setup-Client-Bean wie die oben. Ich frage mich, wenn Sie sehen, dass so etwas auch ...

Ein weiteres Detail, das ich erwähnen sollte ist, dass ich viel unerwartetes Verhalten von CXF hatte, wenn ich nicht alle in der WHICH_JARS Datei skizzierte CXF bereitgestellten Bibliotheken verwendet haben. Ich würde versuchen, sie auch zu der Build hinzugefügt, so dass sie ein beliebigen Server außer Kraft setzen oder Java zur Verfügung gestellt Bibliotheken. Sie können sie jederzeit wieder entfernen später, wenn sie nicht notwendig sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top