CXF jaxb send string as CData


From http://cxf.547215.n5.nabble.com/CXF-jaxb-send-string-as-CData-td5524523.html
Finalmente no he necesitado usarlo, pero lo guardo por si algún día…

public class CdataWriterInterceptor extends AbstractPhaseInterceptor<Message> { 

        public CdataWriterInterceptor() { 
                super(Phase.PRE_STREAM); 
                addAfter(AttachmentOutInterceptor.class.getName()); 
        } 

        @Override 
        public void handleMessage(Message message) { 
                message.put("disable.outputstream.optimization", Boolean.TRUE); 
                XMLStreamWriter writer = 
StaxUtils.createXMLStreamWriter(message.getContent(OutputStream.class)); 
                message.setContent(XMLStreamWriter.class, new CDataXMLStreamWriter(writer)); 
        } 
} 
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() { 
                if("MessageBody".equals(currentElementName)) return true; 
                return false; 
        } 

        public void writeStartElement(String prefix, String local, String 
uri) throws XMLStreamException { 
                currentElementName = local; 
                super.writeStartElement(prefix, local, uri); 
        } 
}
Anuncios
CXF jaxb send string as CData

2 comentarios en “CXF jaxb send string as CData

  1. jmzc dijo:

    Gracias

    Una pregunta

    ¿ cómo se selecciona el campo que quiero envolver en CDATA ?
    Veo un “checkIfCDATAneededForCurrentElement()” pero no parece que seleccione ningun campo en concreto

    1. prietopa dijo:

      No lo he usado, pues realmente el servidor al final me aceptaba sin poner CDATA. No llegué a comprenderlo, falta de tiempo.
      Este código lo vi en los foros de CXF, me pareció interesante no olvidarlo y por ello lo publiqué.

      un saludo
      JMPrieto

Los comentarios están cerrados.