[ 
https://issues.apache.org/activemq/browse/SM-1526?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=45329#action_45329
 ] 

Ron Gavlin commented on SM-1526:
--------------------------------

Hi Freeman,

In my scenario, I am auditing message exchanges to an ActiveMQ JMS queue and 
then asynchronously  consuming exchanges from the queue and persisting them to 
a database.

With the fix for CXF-1779 applied, my attempts to de-serialize the audited 
exchange from the JMS queue result in the following:

ERROR - MonitorStandardConsumerProcessor - Unable to extract Exchange from 
message
javax.jms.JMSException: Failed to build body from bytes. Reason: 
java.io.IOException: javax.xml.ws.handler.MessageContext$Scope
   at 
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35)
   at 
org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:183)
   at 
org.spagic.monitoring.smx.components.jms.MonitorStandardConsumerProcessor.onMessage(MonitorStandardConsumerProcessor.java:74)
   at 
org.apache.servicemix.jms.standard.StandardConsumerProcessor.poll(StandardConsumerProcessor.java:94)
   at 
org.apache.servicemix.jms.standard.StandardConsumerProcessor$1.run(StandardConsumerProcessor.java:56)
...
Caused by: java.io.IOException: javax.xml.ws.handler.MessageContext$Scope
   at 
org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:179)
... 6 more

The source code for method MonitorStandardConsumerProcessor.onMessage() is 
listed below. This class extends 
org.apache.servicemix.jms.standard.StandardConsummerProcessor. Line 74, which 
causes the exception, is noted below with a comment.

Let me know if you have additional questions. 

- Ron

        @Override
        public void onMessage(Message message) {
                
                if (!(message instanceof ObjectMessage)) {
                        log.warn("The message is not of type ObjectMessage");
                        return; 
                }
                
                try {
// -------------------------- Line 74 is below 
---------------------------------------------------------------------------------------------
 //
                        MessageExchange exchange = 
(MessageExchange)((ObjectMessage)message).getObject(); 
                        JBIMessage jbiMessage = new JBIMessage(exchange, log);
                        
                debug("traceExchange. Exchange = " + exchange);
                MonitorServiceJBI monitorService = new 
MonitorServiceJBI(storeExchangesForRestart, keepOnlyFaultedExchanges, log);
                monitorService.traceMessage(jbiMessage);
                }
                catch (JMSException ex) {
                        log.error("Unable to extract Exchange from message", 
ex);
                }
        }


> MessageExchange (org.apache.cxf.transport.jbi.JBIDestination) not serializable
> ------------------------------------------------------------------------------
>
>                 Key: SM-1526
>                 URL: https://issues.apache.org/activemq/browse/SM-1526
>             Project: ServiceMix
>          Issue Type: Bug
>          Components: servicemix-cxf-bc
>    Affects Versions: 3.2.3
>            Reporter: Ron Gavlin
>            Assignee: Freeman Fang
>            Priority: Critical
>             Fix For: 3.2.3, 3.3
>
>         Attachments: wsdl-first-cxf-sa-3.3.1.3-fuse.jar
>
>
> When I invoke the attached flow with the JdbcAuditor enabled in 
> servicemix.xml, the following error is generated. This prevents us from 
> monitoring flows that use CXF components which is a major problem for us.
> 02:33:21,390 | ERROR | pool-flow.seda.servicemix-cxf-se-thread-1 | 
> JdbcAuditor              | mix.jbi.audit.jdbc.JdbcAuditor  137 | Could not 
> persist exchange
> java.io.NotSerializableException: org.apache.cxf.transport.jbi.JBIDestination
>       at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
>       at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
>       at java.util.HashMap.writeObject(HashMap.java:1039)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:585)
>       at 
> java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
>       at 
> java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
>       at 
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
>       at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
>       at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
>       at 
> org.apache.servicemix.jbi.messaging.NormalizedMessageImpl.writeExternal(NormalizedMessageImpl.java:311)
>       at 
> java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1310)
>       at 
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1288)
>       at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
>       at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
>       at 
> org.apache.servicemix.jbi.messaging.ExchangePacket.writeExternal(ExchangePacket.java:406)
>       at 
> java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1310)
>       at 
> java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1288)
>       at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
>       at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
>       at 
> org.apache.servicemix.jbi.messaging.ExchangePacket.getData(ExchangePacket.java:472)
>       at 
> org.apache.servicemix.jbi.audit.jdbc.JdbcAuditor.exchangeSent(JdbcAuditor.java:122)
>       at 
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.doSend(DeliveryChannelImpl.java:379)
>       at 
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:470)
>       at 
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.sendSync(DeliveryChannelImpl.java:442)
>       at 
> org.apache.servicemix.common.EndpointDeliveryChannel.sendSync(EndpointDeliveryChannel.java:95)
>       at 
> org.apache.cxf.transport.jbi.JBIDestinationOutputStream.commitOutputMessage(JBIDestinationOutputStream.java:127)
>       at 
> org.apache.cxf.transport.jbi.JBIDestinationOutputStream.doClose(JBIDestinationOutputStream.java:69)
>       at 
> org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:167)
>       at 
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
>       at 
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
>       at 
> org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:74)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
>       at 
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77)
>       at 
> org.apache.cxf.transport.jbi.JBIDispatcherUtil.dispatch(JBIDispatcherUtil.java:156)
>       at 
> org.apache.servicemix.cxfse.CxfSeEndpoint.process(CxfSeEndpoint.java:232)
>       at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLifeCycle.java:540)
>       at 
> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(AsyncBaseLifeCycle.java:492)
>       at 
> org.apache.servicemix.common.BaseLifeCycle.onMessageExchange(BaseLifeCycle.java:46)
>       at 
> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBound(DeliveryChannelImpl.java:610)
>       at 
> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlow.java:172)
>       at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.java:167)
>       at 
> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.java:134)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>       at java.lang.Thread.run(Thread.java:595)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to