Willem,

I think I've narrowed it down to saying that when it's asynchronous the 
TraceHandler is being called before the Out message is available, whereas when 
it is synchronous 
the TraceHandler is not called until the Out message is ready.
I suspect this means it's called as soon as the CXF message has left (i.e. 
before any reply is seen), but it's not very easy to prove that.

Jim


On Tue, Jul 19, 2011 at 11:58:35AM +0100, James Talbut wrote:
> Willem,
> 
> Yes, that works (obviously missing out on the benefits of Asynch).
> 
> The two MessageLoggers are based on the code in the CXF message loggers - 
> they use the same techniques to capture the on-the-wire message and then:
> MessageLoggerOut simply logs the message along with a correlation ID found in 
> the CXF headers (put there by the TraceHandler).
> MessageLoggerIn puts the entire message as a header in the CxfMessage, this 
> is then picked up by the TraceHandler to be logged.
> 
> The aim is to capture the on-the-wire messages and to associate them with the 
> trace (obviously this is not particularly helpful for PAYLOAD dataFormat, but 
> it's used for 
> POJO too).
> 
> I've got all the CXF and Camel logging turned up to full to try to work out 
> why I'm losing that inbound message, if it'd help I can send the relevant 
> bits of those.
> 
> Jim
> 
> 
> On Tue, Jul 19, 2011 at 06:40:16PM +0800, Willem Jiang wrote:
> > What are the MessageLogger{In|Out}bound doing ?
> > Can you try to change your route like this to see if the error goes out?
> > 
> > <camel:route>
> >         <camel:from 
> > uri="cxf:bean:serviceGroups?dataFormat=PAYLOAD&amp;synchronous=false"/>
> >          <camel:to 
> > uri="cxf:bean:targetGroups?dataFormat=PAYLOAD&amp;synchronous=true"/>
> > </camel:route>
> > 
> > On 7/19/11 6:20 PM, James Talbut wrote:
> > > Willem,
> > >
> > > I'm afraid I can't give you the actual WSDL and URLs (they're from a 
> > > third party), but I don't think they'll make a difference, they just 
> > > return a soap:Fault.
> > >
> > > The route (and associated config) is:
> > >    <bean id="traceHandler" 
> > > class="com.groupgti.routemaster.trace.test.RouteMasterLoggingTraceHandler"
> > >  xmlns:cxf="http://camel.apache.org/schema/cxf"/>
> > >    <bean id="soapFaultConverter" 
> > > class="com.groupgti.routemaster.soapFaultConverter.SoapFaultConverter" 
> > > xmlns:cxf="http://camel.apache.org/schema/cxf"/>
> > >
> > >    <bean id="tracer" 
> > > class="org.apache.camel.processor.interceptor.Tracer">
> > >      <property name="traceHandler" ref="traceHandler"/>
> > >      <property name="enabled" value="true"/>
> > >      <property name="traceOutExchanges" value="true"/>
> > >      <property name="logLevel" value="OFF"/>
> > >    </bean>
> > >
> > >    <bean id="cxfInboundLoggingInterceptor" 
> > > class="com.groupgti.routemaster.cxf.interceptors.test.MessageLoggerInbound"/>
> > >    <bean id="cxfOutboundLoggingInterceptor" 
> > > class="com.groupgti.routemaster.cxf.interceptors.test.MessageLoggerOutbound"/>
> > >
> > >    <cxf:bus>
> > >      <cxf:inInterceptors>
> > >        <ref bean="cxfInboundLoggingInterceptor"/>
> > >      </cxf:inInterceptors>
> > >      <cxf:outInterceptors>
> > >        <ref bean="cxfOutboundLoggingInterceptor"/>
> > >      </cxf:outInterceptors>
> > >      <cxf:inFaultInterceptors>
> > >        <ref bean="cxfInboundLoggingInterceptor"/>
> > >      </cxf:inFaultInterceptors>
> > >      <cxf:outFaultInterceptors>
> > >        <ref bean="cxfOutboundLoggingInterceptor"/>
> > >      </cxf:outFaultInterceptors>
> > >    </cxf:bus>
> > >
> > >    <camel-cxf:cxfEndpoint xmlns:ns="http://schemas.datacontract.org/...";
> > >                           id="targetGroups"
> > >                           address="https://remotehost/...";
> > >                           wsdlURL="http://...";
> > >                           serviceName="ns:Groups"
> > >                           endpointName="ns:GroupsSoap"
> > >                           serviceClass="GroupsSoap"/>
> > >
> > >    <camel-cxf:cxfEndpoint xmlns:ns="http://schemas.datacontract.org/..";
> > >                           id="serviceGroups"
> > >                           address="http://localhost:9000/...";
> > >                           wsdlURL="http://...";
> > >                           serviceName="ns:Groups"
> > >                           endpointName="ns:GroupsSoap"/>
> > >
> > >    <camel:camelContext id="sampleHashCamelContext">
> > >
> > >      <camel:route>
> > >        <camel:from 
> > > uri="cxf:bean:serviceGroups?dataFormat=PAYLOAD&amp;synchronous=false"/>
> > >        <camel:to 
> > > uri="cxf:bean:targetGroups?dataFormat=PAYLOAD&amp;synchronous=false"/>
> > >      </camel:route>
> > >
> > >    </camel:camelContext>
> > >
> > >
> > >
> > > Changing the dataFormat doesn't seem to make any difference.
> > > The "synchronous=false" was added just to see if I could make it hit the 
> > > problem under the debugger, and it does hit it there now.
> > >
> > > It looks like the Camel TraceHandler is being called before the CXF 
> > > interceptor, but at this stage I can't work out how that happens.
> > >
> > > Thanks.
> > >
> > > Jim
> > >
> > >
> > > On Tue, Jul 19, 2011 at 06:04:16PM +0800, Willem Jiang wrote:
> > >> Can you post your route, or submit a simple test case to show the error ?
> > >> It look like a time issue of CXF endpoint which is working in async
> > >> module by default. But I cannot tell more just by looking up the
> > >> description that you gave in the mail.
> > >>
> > >>
> > >>
> > >> On 7/19/11 4:43 PM, James Talbut wrote:
> > >>> Hi,
> > >>>
> > >>> I'm using a combination of a Camel TraceHandler and a CXF interceptor 
> > >>> to capture on-the-wire messages and log them with the Camel message.
> > >>> In normal use this all works, but when I have an error the Camel 
> > >>> TraceHandler isn't being called (the rest of the route is picking up 
> > >>> the error correctly, it's just the
> > >>> tracing that isn't working).
> > >>>
> > >>> When I run under the debugger everything works as expected.
> > >>> When I add synchronous=true to the CXF endpoints everything works as 
> > >>> expected.
> > >>>
> > >>> Anyone got any ideas or suggestions for where I should look?
> > >>>
> > >>> This is with Camel 2.7.1, running on Windows.
> > >>>
> > >>> Thanks.
> > >>>
> > >>> Jim
> > >>>
> > >>
> > >>
> > >> --
> > >> Willem
> > >> ----------------------------------
> > >> FuseSource
> > >> Web: http://www.fusesource.com
> > >> Blog:    http://willemjiang.blogspot.com (English)
> > >>            http://jnn.javaeye.com (Chinese)
> > >> Twitter: willemjiang
> > >> Weibo: willemjiang
> > >
> > 
> > 
> > -- 
> > Willem
> > ----------------------------------
> > FuseSource
> > Web: http://www.fusesource.com
> > Blog:    http://willemjiang.blogspot.com (English)
> >           http://jnn.javaeye.com (Chinese)
> > Twitter: willemjiang
> > Weibo: willemjiang

Reply via email to