Hi,
I'm running servicemix 3.3.2, cxf 2.2.6, in jdk 1.5, linux.

We use a ServicemixClientFacade inside a cxf enpoint to invoke another cxf
component running inside servicemix.

Profiling the application for memory usage and allocations I found that huge
soap messages cause a lot of temporary allocations inside the
DocLiteralInterceptor class (and also a significant CPU cost).

We are using huge messages, containing up to 4MB of bae64 endoded data, to
keep compatibility with systems where attachments are not supported (eg.
websphere 6.0 with no patches) and as a workaround for this problem:

http://servicemix.396122.n5.nabble.com/JBIConduitOutputStream-does-not-copy-attachments-td4665737.html


Checking the code for DocLiteralInInterceptor I think that all the parsing
and decoding costs could be avoided entering the if on line 76

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-rt-core/2.2.6/org/apache/cxf/interceptor/DocLiteralInInterceptor.java


So I'm trying to understand if and how this can be done. Maybe adding
another interceptor right before the DocLiteralInterceptor or placing the
right data inside the NormalizedMessage I send in the first place.

I'm confused because the message inside the interceptor is not the
NomalizedMessage I send but a "conversion" happens and I'm still debugging
the code to better understand the details. The same happens for the
MessageExchange and the Exchange.

Is BindingOperationInfo initialization a good idea? Is there any example
around on how to do this?


Thanks, bye

Lorenzo

Reply via email to