Wrong encoding using JMS Transport
----------------------------------
Key: CXF-1668
URL: https://issues.apache.org/jira/browse/CXF-1668
Project: CXF
Issue Type: Bug
Components: Transports
Affects Versions: 2.1
Environment: MS Windows XP, Sun Solaris
Reporter: Eduard Hildebrandt
In class JMSConduit getBytes() is used to transform the string in a byte array.
byte[] bytes = null;
if (response instanceof String) {
String requestString = (String)response;
bytes = requestString.getBytes();
} else {
bytes = (byte[])response;
}
getBytes() uses the standard encoding of the plattform. This is wrong because
the encoding of the message must be used.
I have written an interceptor as workaround to solve this issue:
public class EncodingInterceptor extends AbstractPhaseInterceptor<Message> {
public EncodingInterceptor() {
super(Phase.RECEIVE);
}
public void handleMessage(Message message) {
try {
InputStream inputStream = message.getContent(InputStream.class);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while (true) {
int datum = inputStream.read();
if (datum == -1)
break;
baos.write(datum);
}
String string = baos.toString();
ByteArrayInputStream bais = new
ByteArrayInputStream(string.getBytes("UTF-8"));
message.setContent(InputStream.class, bais);
} catch (IOException e) {
e.printStackTrace();
}
}
public void handleFault(Message messageParam) {
}
}
But the issue should be solved in JMSConduit class.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.