//

Mule+CXF haben Probleme mit Encodings in Anführungszeichen

25.11.2009 | 1 Minuten Lesezeit

Nach einem Upgrade der Java Version auf 1.6.0.17 liefen unsere CXF basierten Webservice im Mule ESB nicht mehr.

Caused by: javax.xml.stream.XMLStreamException: java.io.UnsupportedEncodingException: "utf-8"
    at com.ctc.wstx.stax.WstxOutputFactory.createSW(WstxOutputFactory.java:257)
    at com.ctc.wstx.stax.WstxOutputFactory.createXMLStreamWriter(WstxOutputFactory.java:124)
    at org.apache.cxf.interceptor.StaxOutInterceptor.handleMessage(StaxOutInterceptor.java:67)
    ... 25 more
Caused by: java.io.UnsupportedEncodingException: "utf-8"
    at sun.nio.cs.StreamEncoder.forOutputStreamWriter(StreamEncoder.java:42)
    at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:83)
    at com.ctc.wstx.stax.WstxOutputFactory.createSW(WstxOutputFactory.java:253)
    ... 27 more

Auf den ersten Blick ist das merkwürdig, da utf-8 ein unterstütztes Encoding ist. Schaut man aber genauer hin stellt man fest daß die Anführungszeichen Teil des Encodings sein sollen. Dies funktioniert nicht. Laut Spezifikation ist dies zulässig, wenn aber meiner Meinung nach ungewöhnlich.
Diese Änderung ist Teil von JAX-WS 2.1.2.

Patchen lässt es sich aber leicht, wobei der Patch keinen Anspruch auf Vollständigkeit besitzt:

if (encoding != null && encoding.startsWith("\"") && encoding.endsWith("\"")) {
  encoding = encoding.substring(1, encoding.length() - 1);
}

Einzufügen ist dieser Code an zwei Stellen:

org.apache.cxf.interceptor.StaxInInterceptor#handleMessage()
nach
String encoding = (String)message.get(Message.ENCODING);
 
und
org.apache.cxf.interceptor.StaxInInterceptor#getEncoding()
vor
return encoding;

Die gepatchte Klasse sollte auf dem Classpath vor dem original liegen. Danach funktionieren die Webservices wieder.
Mittels eines kleinen UnitTests stell ich zudem sicher daß man nach einem CXF Fix/Upgrade testen kann ob dieses Verhalten nun sauber funktioniert.

Beitrag teilen

Gefällt mir

0

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//

Gemeinsam bessere Projekte umsetzen

Wir helfen Deinem Unternehmen

Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.

Hilf uns, noch besser zu werden.

Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.