Hi Mandy, Nice to hear you again ;)
Don't the XSLT feature http://cxf.apache.org/docs/xslt-feature.html and XSLTOut[In]Interceptor fit for your use case? I guess they do almost the same as your code. Regards, Andrei. > -----Original Message----- > From: Mandy Warren [mailto:[email protected]] > Sent: Freitag, 19. August 2016 17:49 > To: [email protected] > Subject: Changing message output > > Hi, > > We have a requirement to apply XSLT to incoming request XML and outgoing > response XML within CXF interceptors (to avoid changes to the endpoint code). > > We have used the following approach to modify the response XML and would > appreciate your comments to see whether this is an acceptable approach or > not. Note that the interceptor is registered at "pre-stream". > > try (OutputStream outputStream = message.getContent(OutputStream.class); > CachedOutputStream cachedStream = new CachedOutputStream(); > InputStream resourceInputStream = resource.getInputStream()) { > > message.setContent(OutputStream.class, cachedStream); > > //Allow other interceptors execution so that finally output stream will be > populated with outgoing message. > message.getInterceptorChain().doIntercept(message); > > //flush the stream so that we can see/extract the message. > cachedStream.flush(); > > //Get the xml message on which you want to apply transformation. > Source inputSource = getInputSource(message); > > Source xslt = new StreamSource(resourceInputStream); > Transformer transformer = transformerFactory.newTransformer(xslt); > StreamResult streamResult = new StreamResult(outputStream); > > transformer.transform(inputSource, streamResult); > > outputStream.flush(); > message.setContent(OutputStream.class, outputStream); > if(LOGGER.isDebugEnabled()){ > //TODO response needs to be logged > LOGGER.debug("Transformed response: "+new > String(((CachedOutputStream)outputStream).getBytes())); > } > } > > It seems to work but we're worried about any side effects. > > Many thanks > Mandy > > Sent from a mobile device
