I have a simple SOAP message in which I have some string data that uses
French characters. I am using "ISO-8869-1" encoding. When I send this
message into ServiceMix via a cxf:consumer endpoint, I notice in the logs
that the resulting XML message embedded inside the SOAP envelope enters the
system with a "UTF-8" encoding. Then, the message gets placed into an
ActiveMQ queue where I have a jms:consumer endpoint read it back into the
system during which operation I get a stack trace:


2010-06-15 17:24:13:406 GMT-0400, WARN , DefaultMessageListenerContainer-3,
org.springframework.jms.listener.DefaultMessageListenerContainer - Execution
of JMS message listener failed
javax.jms.JMSException: Error sending JBI exchange
        at
org.apache.servicemix.jms.endpoints.AbstractConsumerEndpoint.onMessage(AbstractConsumerEndpoint.java:580)
        at
org.apache.servicemix.jms.endpoints.JmsConsumerEndpoint$1.onMessage(JmsConsumerEndpoint.java:505)
        at
org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:518)
        at
org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:479)
        at
org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:451)
        at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:323)
        at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:241)
        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:982)
        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:974)
        at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:876)
        at java.lang.Thread.run(Thread.java:619)
Caused by: org.apache.servicemix.soap.api.Fault:
com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 middle byte 0x20 (at char
#621, byte #-1)
        at
org.apache.servicemix.soap.interceptors.xml.StaxInInterceptor.handleMessage(StaxInInterceptor.java:64)
        at
org.apache.servicemix.soap.core.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:85)
        at
org.apache.servicemix.jms.endpoints.DefaultConsumerMarshaler.populateMessage(DefaultConsumerMarshaler.java:192)
        at
org.apache.servicemix.jms.endpoints.DefaultConsumerMarshaler.createExchange(DefaultConsumerMarshaler.java:115)
        at
org.apache.servicemix.jms.endpoints.AbstractConsumerEndpoint.onMessage(AbstractConsumerEndpoint.java:549)
        ... 10 more

My cxfbc:consumer is configured like this:

<cxfbc:consumer wsdl="classpath:my_jms.wsdl"
                service="test:myJMSQueue"
                endpoint="mySOAPJMSQueueIn"
                targetService="test:My_JMS_Receive_Service" 
                targetInterface="test:My_JMS_Receive_Interface"
                targetEndpoint="endpoint"
                useJBIWrapper="false"
                useSOAPEnvelope="false">
                <cxfbc:features>
                        <bean 
class="org.apache.cxf.transport.jms.JMSConfigFeature">
                                <property name="jmsConfig">
                                        <bean 
class="org.apache.cxf.transport.jms.JMSConfiguration">
                                                <property 
name="concurrentConsumers">
                                                        <value>5</value>
                                                </property>
                                                <property 
name="connectionFactory">
                                                        <ref 
bean="myConnectionFactory" />
                                                </property>
                                                <property 
name="targetDestination">
                                                        
<value>My.Inbound.Queue</value>
                                                </property>
                                                <property name="useJms11">
                                                        <value>false</value>
                                                </property>
                                        </bean>
                                </property>
                        </bean>
                </cxfbc:features>
        </cxfbc:consumer>

My JMS consumer is configured like this:
<jms:consumer service="test:My_JMS_RMD_Consumer"
        endpoint="Input"
        targetService="test:My_JMS_Router"
        targetEndpoint="Input"
        destinationName="RMD"
        connectionFactory="#connectionFactory2"
        cacheLevel="3"
        transacted="xa"
        messageSelector ="TargetComponent LIKE 'My_JMS_In'"
        useMessageIdInResponse="true"/>    


It doesn't seem to make any difference if I encode the original message in
UTF-8 either.
-- 
View this message in context: 
http://servicemix.396122.n5.nabble.com/Character-Encoding-Problems-Using-CXF-Consumer-with-JMS-tp461424p461424.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.

Reply via email to