Ok i am now trying to create an interceptor that captures element name and prints CDATA in the correct element.
The problem is my code intercept everyting until soap:body tag, then it stops. I probably have it injected the wrong way in the cxf interceptro chain. Can anyone point me in the right direction. the output is now: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><![CDATA[]]><Insert public class CDataXMLStreamWriter extends DelegatingXMLStreamWriter { private String currentElementName; public CDataXMLStreamWriter(XMLStreamWriter del) { super(del); } @Override public void writeCharacters(String text) throws XMLStreamException { boolean useCData = checkIfCDATAneededForCurrentElement(); if (useCData) { System.out.println("WritingCData" + text); super.writeCData(text); }else { super.writeCharacters(text); } } private boolean checkIfCDATAneededForCurrentElement() { System.out.println("ElementName " + currentElementName); return true; } public void writeStartElement(String prefix, String local, String uri) throws XMLStreamException { currentElementName = local; super.writeStartElement(prefix, local, uri); } } public class CdataWriterInterceptor extends AbstractPhaseInterceptor<Message> { public CdataWriterInterceptor() { super(Phase.WRITE); addBefore(BareOutInterceptor.class.getName()); } @Override public void handleMessage(Message message) { System.out.println("setting altinnfix on message"); XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(message.getContent(OutputStream.class)); message.setContent(XMLStreamWriter.class, new CDataXMLStreamWriter(writer)); } } -- Idar
