OK, also nach viel Forschung habe ich einige Möglichkeiten der CXF-Fehlerbehandlung gefunden.
*. ValidationEventHandler gibt Ihnen die Möglichkeit, Ihre eigene Ausnahme anstelle der Standardausnahme auszulösen. ABER Sie können das Antwortverhalten nicht ändern, und Sie können das SOAP-Antwortformat nicht ändern.
*. Eine weitere Möglichkeit, die Fehlerbehandlung zu ändern, besteht darin, einen eigenen Interzeptor zu erstellen. Der CXF-Workflow basiert auf einer Kette von Interzeptoren. Es gibt 4 Arten von Interzeptoren: inInterceptor, outInterceptor, inFaultInterceptor und outFaultInterceptor.
Mithilfe einiger intelligenter Hacks können Sie den Arbeitsablauf ändern, indem Sie Ihren eigenen Interzeptor erstellen (indem Sie ihn der Kette hinzufügen) und den Standardabfanger aus der Kette entfernen (wenn Sie seinen Klassennamen kennen). Sie können also alles tun, was Sie brauchen.
ABER soweit all diese Interzeptoren Marshall-Antwort manuell (xmlWriter.writeStartElement() usw.) kann es eine große Herausforderung sein, Ihre eigenen Interzeptoren für jede Flow-Phase zu schreiben. Es könnte wirklich ein riesiger Haufen Arbeit sein.
Leider habe ich keine gute Referenz über CXF-Interzeptoren gefunden.
Eine andere Sache - wenn Sie regelmäßige Antwort anstelle von SOAPFaultException zurückgeben müssen Sie möglicherweise zusätzliche Informationen wie: tatsächlichen Service, der diese Antwort zurückgeben, Service-Parameter in Anfrage übergeben usw. Ich habe diese Informationen nicht in zugänglichen Parametern in Interzeptoren gefunden . Und dadurch betrügen Sie den Client-Code, der OK statt einer echten Ausnahme zurückgibt.
*. Entwerfen Sie Ihre WSDL mit allen Parametern als Text möglicherweise sehr nicht sehr gut Lösung:
a. Verbraucher Ihrer Dienste können wirklich verwirrt sein, wenn keine Datentypen und Validierungsregeln in WSDL.
b. Sie müssen das Rad für die Validierung neu erfinden. Ich meine, dass Sie Ihren eigenen Prüfer schreiben müssen, der mit einigen komplizierten Regeln sehr schwierig sein könnte. Zur gleichen Zeit hat XSD alle diese Validierungen implementiert und gut getestet.
Und schließlich über meine Situation: Wir diskutierten es mit Anforderungsmanager und beschlossen, CXF werfen eigene Standardausnahmen, wenn XML-Schema-Anforderungen in Anforderung verletzt. Es ist eine gute Lösung, denn jetzt nutzen wir alle Möglichkeiten der XSD-Validierung und verschwenden keine Zeit mit komplizierten und nutzlosen Arbeiten.
Vielen Dank an @ericacm für die Antwort.
Vielen Dank für die Zusammenfassung der Forschung, die Sie zu diesem Thema gemacht haben. Ich stehe jetzt vor einer ähnlichen Herausforderung. – Withheld