You are on the INBOUND chain but looking for an OUTPUT stream?
I think something is a bit mixed up there....
Dan
On Tuesday, April 03, 2012 08:14:51 AM Stephane Eybert wrote:
> Hello,
>
> I have an inbound interceptor on the client side, that is correctly
> contributed, added and invoked:
>
> 2012-04-03 16:58:07,453 DEBUG [ClientImpl] Interceptors contributed by
> client: [no.nki.stas.ws.client.interceptor.XmlInInterceptor@1fc3828,
> org.apache.cxf.interceptor.LoggingInInterceptor@1cb048e]
>
> 2012-04-03 16:58:07,454 DEBUG [PhaseInterceptorChain] Adding interceptor
> no.nki.stas.ws.client.interceptor.XmlInInterceptor@1fc3828 to phase
> receive
>
> 2012-04-03 16:58:07,457 DEBUG [PhaseInterceptorChain] Invoking
> handleMessage on interceptor
> no.nki.stas.ws.client.interceptor.XmlInInterceptor@1fc3828
> 2012-04-03 16:58:07,457 DEBUG [XmlInInterceptor] ============>> In client
> handleMessage
>
> But its registered callback is not fired up.
>
> The logger "============>> In LoggingCallback constructor" is not
> displayed in the console log, nor is the logger "============>> In
> onClose".
>
> Here is my interceptor class:
>
> @NoJSR250Annotations
> public class XmlInInterceptor extends AbstractSoapInterceptor {
>
> private Logger logger =
LoggerFactory.getLogger(XmlInInterceptor.class);
>
> public XmlInInterceptor() {
> super(Phase.RECEIVE);
> }
>
> public void handleMessage(SoapMessage soapMessage) throws Fault {
> logger.debug("============>> In handleMessage");
> final OutputStream os =
soapMessage.getContent(OutputStream.class);
> if (os == null) {
> return;
> }
> final CacheAndWriteOutputStream newOut = new
> CacheAndWriteOutputStream(os);
> soapMessage.setContent(OutputStream.class, newOut);
>
> newOut.registerCallback(new LoggingCallback(soapMessage, os));
> }
>
> private class LoggingCallback implements CachedOutputStreamCallback {
>
> private final Message message;
> private final OutputStream origStream;
>
> public LoggingCallback(final Message msg, final OutputStream
> os) {
> this.message = msg;
> logger.debug("============>> In LoggingCallback
constructor");
> this.origStream = os;
> }
>
> public void onFlush(CachedOutputStream cos) {
> }
>
> public void onClose(CachedOutputStream cos) {
> logger.debug("============>> In onClose");
> String encoding = (String)
> message.get(Message.ENCODING);
> String ct = (String) message.get(Message.CONTENT_TYPE);
> StringBuilder builder = new StringBuilder();
> try {
> writePayload(builder, cos, encoding, ct);
> } catch (IOException ex) {
> throw new RuntimeException("Cannot generate
> audit log
for soap
> response", ex);
> }
>
> String msg = builder.toString();
> logger.debug("CLIENT IN MESSAGE {}", msg);
> message.setContent(OutputStream.class, origStream);
> }
>
> protected void writePayload(StringBuilder builder,
CachedOutputStream
> cos, String encoding, String contentType) throws IOException {
> if (StringUtils.isEmpty(encoding)) {
> cos.writeCacheTo(builder);
> } else {
> cos.writeCacheTo(builder, encoding);
> }
> }
>
> }
>
> }
>
> Kind Regards,
>
> Stephane
>
>
> --
> View this message in context:
> http://cxf.547215.n5.nabble.com/Client-inbound-interceptor-registered-cal
> lback-not-fired-up-tp5615483p5615483.html Sent from the cxf-user mailing
> list archive at Nabble.com.
--
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com