camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jim Talbut <jtal...@spudsoft.co.uk>
Subject Re: Modifying SOAP:Fault errors raised by endpoints
Date Fri, 19 Mar 2010 07:04:20 GMT
Thanks Claus, but that still doesn't let me do what I want and is 
inefficient.

What it won't let me do:
I want to be able to correlate the "out" trace with the "in" trace, in 
one database row without commiting the row until the route has completed.
This requires a JPA transaction to exist around each of the nodes that 
are called.
I'm finding that the transaction has ended by the time of the "out" trace.

Inefficiencies:
1. It causes the construction of the new Exchange object and a bunch of 
String objects that I don't want.
2. It causes the invocation of a new route, that is unnecessary.

I think it would be better to:
1. Pass the class to use as the TraceInterceptor into Tracer.
2. Break the existing TraceInterceptor into two, a base class that 
tracks the RouteNodes and a subclass that implements traceExchange.
3. Change traceExchange so that it returns an Object and pass that 
Object in to the call to traceExchange for "out" traces.

If you think this is a sane approach I can produce a patch for it.

Jim


I want to be able to correlate the

On 17/03/2010 19:42, Claus Ibsen wrote:
> Hi
>
> Looks like the getTracedExchange method was removed a bit later. I
> have adde a ticket to track this
> https://issues.apache.org/activemq/browse/CAMEL-2556
>
>
>
> On Wed, Mar 17, 2010 at 7:06 PM, Jim Talbut<jtalbut@spudsoft.co.uk>  wrote:
>    
>> I'm sorry, but I'm afraid I must be missing something.
>> You say "just use your own JPA code to persist the message" like it's a
>> simple thing to do, but it doesn't appear to be.
>>
>> The out of the box TraceInterceptor hard codes the canonical name of the
>> class that it's loading, and loads it excplicitly, so I can't intercept that
>> other than by providing another class in the same package.
>> That's nasty and hacky and still doesn't solve the problem because it just
>> gets called by the IntrospectionSupport, so I don't get the opportunity to
>> access the Exchange object.
>> That led me to try to replace the TraceInterceptor with my own, but that is
>> complicated because the TraceInterceptor also builds up the TracedRouteNodes
>> (and because I can't remove the out of the box TraceInterceptor).
>>
>> It seems to me that there should be a way to subclass the TraceInterceptor
>> and just get access to the pre and post Exchange object to log it - that
>> would need to be set on the default Trace object before any routes get
>> created.
>> But as I said, I must be missing something.
>>
>> Jim
>>
>>
>>
>> On 13/03/2010 09:06, Claus Ibsen wrote:
>>      
>>> You can just use your own JPA code to persist the message instead of
>>> the out of the box feature.
>>>
>>>
>>>
>>> On Sat, Mar 13, 2010 at 9:54 AM, Jim Talbut<jtalbut@spudsoft.co.uk>
>>>   wrote:
>>>
>>>        
>>>> On 13/03/2010 07:36, Claus Ibsen wrote:
>>>>
>>>>          
>>>>> On Sat, Mar 13, 2010 at 8:27 AM, Jim Talbut<jtalbut@spudsoft.co.uk>
>>>>>   wrote:
>>>>>
>>>>>
>>>>>            
>>>>>> Willem,
>>>>>>
>>>>>> Ah.
>>>>>> I still have no idea how the TypeConverter is being called, but it's
>>>>>> working
>>>>>> great :).
>>>>>>
>>>>>> I can make my SOAP:Fault converter into an interceptor, which has
the
>>>>>> benefit of making the routes simpler and thus more understandable
by my
>>>>>> clients.
>>>>>> However if I do so the Tracer (using JPA) does not record the altered
>>>>>> SOAP:fault.
>>>>>> I have got tracer.setTraceInterceptors( true ); but that doesn't
seem
>>>>>> to
>>>>>> make any difference, neither does the order in which the interceptors
>>>>>> are
>>>>>> added.
>>>>>> Is it possible to make the Tracer record the output from another
>>>>>> interceptor?
>>>>>> If it isn't I'll just log the change myself.
>>>>>>
>>>>>> When the Tracer logs an exception it's just using toString, which
>>>>>> misses
>>>>>> out
>>>>>> on a lot of information in a soap:fault.
>>>>>> I tried writing a TypeConverter for
>>>>>> org.apache.cxf.binding.soap.SoapFault,
>>>>>> but that's not being called.
>>>>>> Is there a way to make the Tracer use a TypeConverter for logging
>>>>>> exceptions?
>>>>>>
>>>>>>
>>>>>>
>>>>>>              
>>>>> You can implement your own
>>>>> org.apache.camel.processor.interceptor.TraceFormatter and format the
>>>>> traced message exactly how you like it.
>>>>>
>>>>>
>>>>>
>>>>>            
>>>> TraceFormatter is just for logged tracing - I'm using JPA.
>>>>
>>>> Thanks.
>>>>
>>>> Jim
>>>>
>>>>
>>>>
>>>>          
>>>
>>>
>>>        
>>
>>      
>
>
>    


Mime
View raw message