CXF Validierung benutzerdefinierter handler
Ich bin momentan dabei, einen webservice mit cxf in der folgenden Weise:
<cxf:cxfEndpoint id=XXXEndpoint"
serviceClass="com.Sth"
address="${webservices.url}/XXX"
wsdlURL="${wsdl.address}/services/XXX.wsdl"
endpointName="m:XXXPort"
serviceName="m:XXXService"
xmlns:m="http://com.sth/XXX">
<cxf:properties>
<entry key="schema-validation-enabled" value="true" />
</cxf:properties>
</cxf:cxfEndpoint>
funktioniert es perfekt, auch zusätzliche schema-Validierung. Ich kann nicht fügen Sie eine benutzerdefinierte Gültigkeitsprüfung-handler. Wie kann ich das tun?
- Zu deiner Aussage "ich kann nicht fügen Sie ein Kunde validaton handler", was haben Sie versucht bis jetzt ?
- bisher habe ich es so probiert: <entry key="jaxb-Validierung-event-handler"> <bean class="org.Beispiel.MyCustomHandler" /> </entry> wie unten beschrieben. Aber es doen ' T Arbeit. stackoverflow.com/questions/2195034/... ich bin runing es auf der Basis von apache service mix 4.5.2
- War org.Beispiel.MyCustomHandler gar nicht aufgerufen wird? Oder das Ergebnis unerwartet war?
- Ich war in der Lage zu führen Sie benutzerdefinierte handler mit Apache ServiceMix 4.5.2 Verwendung von Konfiguration beschrieben in meiner Antwort. Es funktioniert wie erwartet. Bitte beachten Sie, dass wenn Sie werfen eine Ausnahme von handleEvent-Methode, dann wird es ignoriert und JAXB verhält sich so, als wenn false zurückgegeben wurde, und beendet die Verarbeitung. In diesem Fall der Fehler ist genau der gleiche wie bei der Standard-handler. Würde es helfen, wenn Sie könnte angeben, was Sie erreichen möchten, verwenden der validation-handler.
- Hi, das problem ist, dass mein handler wird nie aufgerufen. Aber die Validierung Ausnahme wird ausgelöst durch den sax-parser - ich sehe es in den Protokollen und in soapui
- Sie könnten versuchen, ersetzen Sie Ihren handler mit, die ich Hinzugefügt, um meine Antwort? Das Ergebnis sollte sein, dass Sie erhalten keine Fehler, nur zur überprüfung Ereignis protokolliert. Wenn es funktioniert, dann bedeutet es wahrscheinlich, dass es etwas falsch mit Ihrem handler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, was du meinst, durch individuelle validation-handler.
Wenn Sie ändern möchten, Validierung, Fehlerbehandlung können Sie erstellen, Klasse Umsetzung javax.xml.binden.ValidationEventHandler
Mir zum Beispiel verwendet diese Vorgehensweise, um zu verhindern, dass JAXB zu werfen Ausnahme auf dem ersten aufgetretenen Fehler an. Meine benutzerdefinierte Ereignis-handler gesammelt, alle nicht-fatalen Fehler bei der Validierung und geworfen entsprechende Ausnahme nach Validierung der gesamte eingehende Nachricht.
Beispiel Verwendung ValidationEventHandler
Um Ihre benutzerdefinierten Validierung event-handler sollten Sie jaxb-Validierung-event-handler-Eigenschaft:
Camel-CXF-endpoint-Konfiguration:
Beispiel-handler, der deaktiviert die überprüfung Fehler und meldet nur die Validierung Nachricht:
Bitte beachten Sie, dass einige Fehler bei der Validierung verursachen CXF überspringen von aufrufen der Prozedur (Siehe details DataReaderImpl.WSUIDValidationHandler.handleEvent(...)). Der handler wird übersprungen, wenn die Fehlermeldung enthält ":Id", string, oder ist einer der folgenden Fehler:
(ehrlich gesagt, scheint es wie ein dirty hack in CXF und wenn es ein problem für dich ist würde ich einen Fehler erstellen für CXF-team).
Wenn du mehr willst Fehlerbehandlung Anpassung, die Sie sollten wahrscheinlich betrachten Sie das schreiben Ihrer eigenen Interceptor. Wohl die beste phase der Ausführung der Validierung wäre eine (PRE/USER/POST)_LOGICAL.