I would recommend to try the second way mentioned by Dan: "you can also wrap the writer with a new FilterWriter that overrides close() to do whatever you want and then call message.setContent(Writer.class, filteredWriter);"
As a sample you can look into implementation of org.apache.cxf.feature.transform.XSLTOutInterceptor method transformWriter() and inner filter class XSLTCachedWriter. It does basically the same thing as you want: applies XSLT transformation for outgoing SOAP text JMS message. Cheers, Andrei. From: Larry Presswood [mailto:[email protected]] Sent: Freitag, 4. Januar 2013 23:27 To: [email protected] Subject: Re: Intercepting SOAP Message when using JMS Transport Any idea where in stream I am doing what the StreamIntercepter example had Phase.PRE_STREAM addBefore(SoapPreProtocolOutIntercepter ) But nothing in the writer buffer just empty string so i must be too early? thanks Sent from iCloud On Jan 04, 2013, at 05:18 PM, Daniel Kulp <[email protected]<mailto:[email protected]>> wrote: On Jan 4, 2013, at 5:10 PM, Larry Presswood <[email protected]<mailto:[email protected]>> wrote: > i am using text > > I thought i would get writer on outbound and reader in inbound Yea. You're correct. My mistake. > but i want to mutate message both before send and after read > > at least in the phase i was using on out didnt seem like soap message was > there? It should behave the same as with the Streams used for HTTP. For outbound, you can probably cast to a StringWriter and call the getBuffer() on it to manipulate the string buffer directly assuming you are very late in the chain. If not, you can also wrap the writer with a new FilterWriter that overrides close() to do whatever you want and then call message.setContent(Writer.class, filteredWriter); Dan > > Sent from my iPhone > > On Jan 4, 2013, at 17:05, Daniel Kulp > <[email protected]<mailto:[email protected]>> wrote: > >> >> On Jan 4, 2013, at 3:48 PM, Larry Presswood >> <[email protected]<mailto:[email protected]>> wrote: >> >>> I tried using the stream interceptor when using CXF configured with JMS >>> Transport but it seems that >>> >>> boolean isOutbound = false; >>> isOutbound = message == message.getExchange().getOutMessage() >>> || message == message.getExchange().getOutFaultMessage(); >>> >>> if (isOutbound) { >>> OutputStream os = message.getContent(OutputStream.class); >>> >>> os is null when using jms but not when using straight http >>> >>> both are soap >>> >>> is this a bug or doe i need to intercept in a different stream >>> >>> i can see in the code where the message is being put into a JMSMessage but >>> don't seem to find a way to intercept handily like with HTTP >>> >>> Any ideas or examples? >> >> Are you using a text JMS message or binary JMS message? If using a Text >> message, we keep it as a string and provide a Reader instead to avoid a lot >> of String -> byte[] -> String type conversions. Try: >> >> Reader r = message.getContent(Reader.class); >> >> or switch the JMS setup to use binary messages. >> >> >> -- >> Daniel Kulp >> [email protected]<mailto:[email protected]> - http://dankulp.com/blog >> Talend Community Coder - http://coders.talend.com >> -- Daniel Kulp [email protected]<mailto:[email protected]> - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
