How to add <![CDATA[ and ]]> in XML prepared by Jaxb

cdata, java, jaxb, xml

Solution

Can you make the logic from this

imports

import org.dom4j.CDATA;
import org.dom4j.DocumentHelper;

sample code

public static String appendCdata(String input) {
    CDATA cdata = DocumentHelper.createCDATA(input);      
    return cdata.asXML();
}

Problem

How to prepare XML with CDATA , I am preraring this response via Jaxb, ``` <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> <SOAP-ENV:Header/> <soapenv:Body> <tem:RequestData> <tem:requestDocument> <![CDATA[ <Request> <Authentication CMId="68" Function="1" Guid="5594FB83-F4D4-431F-B3C5-EA6D7A8BA795" Password="poihg321TR"/> <Establishment Id="4297867"/> </Request> ]]> </tem:requestDocument> </tem:RequestData> </soapenv:Body> </soapenv:Envelope> ``` But from Jaxb i am not getting CDATA , how to put CDATA inside `<tem:requestDocument>` element. Here is my Java Code : ``` public static String test1() { try { initJB(); String response = null; StringBuffer xmlStr = null; String strTimeStamp = null; com.cultagent4.travel_republic.gm.Envelope envelope = null; com.cultagent4.travel_republic.gm.Header header = null; com.cultagent4.travel_republic.gm.Body body = null; com.cultagent4.travel_republic.gm.RequestData requestData = null; com.cultagent4.travel_republic.gm.RequestDocument requestDocument = null; com.cultagent4.travel_republic.gm.RequestDocument.Request request = null; com.cultagent4.travel_republic.gm.RequestDocument.Request.Authentication authentication = null; com.cultagent4.travel_republic.gm.RequestDocument.Request.Establishment establishment = null; ObjectFactory objFact = new ObjectFactory(); envelope = objFact.createEnvelope(); header = objFact.createHeader(); envelope.setHeader(header); body = objFact.createBody(); requestData = objFact.createRequestData(); requestDocument = objFact.createRequestDocument(); request = new RequestDocument.Request(); authentication = new RequestDocument.Request.Authentication(); authentication.setCMId("68"); authentication.setGuid("5594FB83-F4D4-431F-B3C5-EA6D7A8BA795"); authentication.setPassword("poihg321TR"); authentication.setFunction("1"); request.setAuthentication(authentication); establishment = new RequestDocument.Request.Establishment(); establishment.setId("4297867"); request.setEstablishment(establishment); requestDocument.setRequest(request); requestData.setRequestDocument(requestDocument); body.setRequestData(requestData); envelope.setBody(body); jaxbMarshallerForBase = jaxbContextForBase.createMarshaller(); OutputStream os = new ByteArrayOutputStream(); System.out.println(); // output pretty printed // jaxbMarshallerForBase.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // jaxbMarshallerForBase.marshal(envelope, System.out); // jaxbMarshallerForBase.marshal(envelope, os); jaxbMarshallerForBase.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); jaxbMarshallerForBase.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // jaxbMarshallerForBase.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false); // get an Apache XMLSerializer configured to generate CDATA XMLSerializer serializer = getXMLSerializer(); // marshal using the Apache XMLSerializer SAXResult result = new SAXResult(serializer.asContentHandler()); System.out.println("*************"); jaxbMarshallerForBase.marshal(envelope, result); System.out.println("--------------"); return null; } catch (JAXBException ex) { Logger.getLogger(GM_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex); } finally { return null; } } private static XMLSerializer getXMLSerializer() { // configure an OutputFormat to handle CDATA OutputFormat of = new OutputFormat(); // specify which of your elements you want to be handled as CDATA. // The use of the ; '^' between the namespaceURI and the localname // seems to be an implementation detail of the xerces code. // When processing xml that doesn't use namespaces, simply omit the // namespace prefix as shown in the third CDataElement below. of.setCDataElements(new String[]{"^Request","^Authentication","^Establishment"}); // set any other options you'd like of.setPreserveSpace(true); of.setIndenting(true); StringWriter writer = new StringWriter(); // create the serializer XMLSerializer serializer = new XMLSerializer(of); serializer.setOutputByteStream(System.out); return serializer; } ``` Here I am getting same xml , but without CDATA. My server is not accepting the request without CDATA.Please help.

Original source

Related problems