Ich schreibe einen SOAP-Client gegen einen Server, der einen Fehler erzeugt, der nicht der Spezifikation entspricht. Insbesondere fehlt das lang
Attribut in dem Element Text
im Fehlergrund (spec). Ich benutze Spring WS 2.4.0. Gibt es eine Möglichkeit, die Antwort abzufangen und das Attribut zu injizieren, bevor es in eine SaajSoapMessage
geparst wird? Ich habe versucht, einen ClientInterceptor zu erstellen, aber das XML wurde bereits analysiert, als es den Interceptor trifft. Müsste ich meine eigene MessageFactory erstellen?Umgang mit einem fehlerhaften Soap-Fehler
0
A
Antwort
1
Ich habe dies mit Hilfe von this answer und this answer gelöst.
Wenn ich meine WebServiceGatewaySupport
instanziiert, fügte ich eine ClientInterceptor
, wo ich die handleFault()
Methode konfiguriert:
@Override
public boolean handleFault(MessageContext messageContext) throws WebServiceClientException {
LOGGER.debug("intercepted a fault.");
TransformerFactory transformerFactory = TransformerFactory.newInstance();
WebServiceMessage response = messageContext.getResponse();
Source source = response.getPayloadSource();
StreamResult streamResult = new StreamResult(new StringWriter());
try {
Transformer displayTransformer = transformerFactory.newTransformer();
displayTransformer.transform(source, streamResult);
LOGGER.debug("\t>> initial response\n" + streamResult.getWriter().toString());
StreamSource xslSource = new StreamSource(new File(
FaultInterceptor.class.getResource("/SoapFaultFix.xsl").getFile()
));
Transformer modifyingTransformer = transformerFactory.newTransformer(xslSource);
modifyingTransformer.transform(source, response.getPayloadResult());
} catch (TransformerException e) {
e.printStackTrace();
}
return true;
}
Dies nimmt einfach die XML-Quell und führt es durch eine XSL-Transformation. Es ist wichtig, mit einem identity transformation zu beginnen, damit Sie Inhalt nicht verlieren. Ich fügte dann das Attribut und den Wert hinzu und ließ dann den vorhandenen Wert fallen. Meine SoapFaultFix.xsl
sah wie folgt aus:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
>
<xsl:template match="/ | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//soapenv:Fault/soapenv:Reason/soapenv:Text">
<soapenv:Text>
<xsl:attribute name="xml:lang">en</xsl:attribute>
<xsl:value-of select="."/>
</soapenv:Text>
</xsl:template>
</xsl:stylesheet>
ich diesen Ansatz gemocht, weil ich Bohren gefunden in die DOM beschwerliche mit reinem Java war, und ich konnte die xsl machen andere Änderungen leicht erweitern.
Verwandte Themen
- 1. Umgang mit fehlerhaften Bibliotheken, die Threads nicht stoppen
- 2. SAX-Parser - Umgang mit fehlerhaften Daten aus .XML-Datei
- 3. Umgang mit einem Streaming-Server
- 4. Umgang mit einem Popup-Fenster mit Selen
- 5. Umgang mit einem String mit mehreren Zeichenkodierungen
- 6. Umgang mit einem Formular mit mehreren Aktionen
- 7. Umgang mit Fremdschlüsselausnahmen in PHP
- 8. Problemeinstellungsintervalle mit Jquery & einer fehlerhaften Funktion
- 9. Griff einen fehlerhaften Ausdruck
- 10. Umgang mit Future.Failure in einem Diodeneffekt
- 11. Umgang mit einem varbinary-Feld in VB.NET
- 12. Umgang mit Portabilitätsproblemen in einem binären Dateiformat
- 13. Umgang mit Behauptungen in einem benutzerdefinierten Helfer
- 14. JQuery $ Schnipsel und mit einem resultset Umgang
- 15. Umgang mit privaten Dateien in einem Microservice
- 16. Umgang mit einem Array von SQL-Fehlercodes
- 17. Javascript Umgang mit Daten in einem gridview
- 18. Emacs als IDE: Umgang mit einem Projektverzeichnis?
- 19. Umgang mit einem WebRTC-byte [] stream?
- 20. Umgang mit Optionen in einem Befehlszeilenprogramm
- 21. Wie wird mit fehlerhaften Daten verfahren?
- 22. audit-argument-checks mit fehlerhaften Paketen
- 23. eine Postgres-Tabelle mit fehlerhaften Zeilen bereinigen
- 24. VB.NET mit einem Teil der Gleichung Umgang einem Überlauf Ausnahme
- 25. Umgang mit einem Klick für alle Steuerelemente in einem Formular
- 26. Wiederherstellen von fehlerhaften Verbindungen in einem Peer-to-Peer-Netzwerk
- 27. Wie behebe ich X11 nach einem fehlerhaften Macports Upgrade?
- 28. Umgang mit geparsten Text
- 29. WSDL-Importeur erzeugt fehlerhaften Server
- 30. R Datei generiert fehlerhaften Namen