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.
Weitere Beiträge
von Fabian Lange
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
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.
Blog-Autor*in
Fabian Lange
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.