Beliebte Suchanfragen
|
//

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.

1Caused by: javax.xml.stream.XMLStreamException: java.io.UnsupportedEncodingException: "utf-8"
2    at com.ctc.wstx.stax.WstxOutputFactory.createSW(WstxOutputFactory.java:257)
3    at com.ctc.wstx.stax.WstxOutputFactory.createXMLStreamWriter(WstxOutputFactory.java:124)
4    at org.apache.cxf.interceptor.StaxOutInterceptor.handleMessage(StaxOutInterceptor.java:67)
5    ... 25 more
6Caused by: java.io.UnsupportedEncodingException: "utf-8"
7    at sun.nio.cs.StreamEncoder.forOutputStreamWriter(StreamEncoder.java:42)
8    at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:83)
9    at com.ctc.wstx.stax.WstxOutputFactory.createSW(WstxOutputFactory.java:253)
10    ... 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:

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

Einzufügen ist dieser Code an zwei Stellen:

1org.apache.cxf.interceptor.StaxInInterceptor#handleMessage()
2nach
3String encoding = (String)message.get(Message.ENCODING);
4 
5und
6org.apache.cxf.interceptor.StaxInInterceptor#getEncoding()
7vor
8return 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

//

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.