Based my work on
http://www.nabble.com/How-to-change-the-namespace-position-in-the-generate-xml-message-(SOAP-message)--to16176819.html#a16194931
 

I intercepted using the CachedOutputStream options (though if I had my time
again I'd intercept at StaxOutInterceptor). Converted from string -> DOM.
Removed the element and added a new CDATA node. I used JDOM for the XPath
support.

---snip---
// Replace the text node with a CDATA node
Document document = null;                       
try {                                   
        SAXBuilder builder = new SAXBuilder(false);                             
                
        
        document = builder.build(new InputSource(new StringReader(tmpXML)));    
                                
        Element root = document.getRootElement();                               
        
        
        XPath xpath = 
XPath.newInstance("/descendant-or-self::x:ppSoapHeader25");                     
                  

xpath.addNamespace("x","http://schemas.microsoft.com/Passport/SoapServices/CredentialServiceAPI/V1";);
                                   
        Element element = (Element) xpath.selectNodes(document).get(0);
                
        // After                                        
        List parent = element.getParentElement().getChildren();
        parent.remove(element);                                 
   
    // Add it again as CDATA
    Element e = new Element("ppSoapHeader25");
    e.addContent((new CDATA(element.getText())));
    parent.add(e);                                  
    
    }                                                                           
                            
} catch (Exception e) {
        System.out.println(e.toString());
}

// Push it back to tmpXML and into the OutputStream
XMLOutputter outputter = new XMLOutputter();
tmpXML = outputter.outputString(document);                                      
                                                                                
                                                                
---snip---




Brad-81 wrote:
> 
> Post it to the list and everyone can see it......magic :-)
> 
> On Tue, Jul 29, 2008 at 4:25 AM, adam_j_bradley
> <[EMAIL PROTECTED]> wrote:
>>
>> Ok, I now have it generating the CDATA entry as I'd hoped!
>> http://www.nabble.com/file/p18704319/2712837314_dae51ea53a_o.jpg
>>
>> Drop me a line if you'd like to see know how :)
>>
>> Adam
>>
>>
>>
>>
>> dkulp wrote:
>>>
>>>
>>> I don't believe their is anyway to do this.  I don't think the JAXB
>>> runtime EVER calls writeCDATA of the Stax stuff.   Most likely, you
>>> should just remove the "<[CDATA[" and tailing "]]>" parts of the
>>> string and just pass that.   It will get escaped, but that SHOULD be OK.
>>>
>>>
>>> Dan
>>>
>>>
>>> On Jul 28, 2008, at 1:13 AM, adam_j_bradley wrote:
>>>
>>>>
>>>> I have a parameter I want to populate with CDATA but I'm having
>>>> trouble.
>>>> Currently the String is defined as
>>>>
>>>> ---snip---
>>>> String element = "!<[CDATA[<s:ppSoapHeader
>>>> xmlns:s=\"http://schemas.microsoft.com/Passport/SoapServices/SoapHeader
>>>> \"
>>>> version=\"1.0\"><s:lcid>1033</s:lcid><s:sitetoken><t:siteheader
>>>> xmlns:t=\"http://schemas.microsoft.com/Passport/SiteToken\"; id=\"" +
>>>> siteID
>>>> + "\"/></s:sitetoken>" +
>>>> </s:ppSoapHeader>]]>";
>>>> ---snip---
>>>>
>>>> I wind up with
>>>> ---snip---
>>>> !<[CDATA[<s:ppSoapHeader
>>>> xmlns:s="http://schemas.microsoft.com/Passport/SoapServices/
>>>> SoapHeader"version="1.0"><s:lcid>1033</
>>>> s:lcid><s:sitetoken><t:siteheader
>>>> xmlns:t="http://schemas.microsoft.com/Passport/SiteToken";
>>>> id="253988"/></s:sitetoken></s:ppSoapHeader>]]>
>>>> ---snip---
>>>>
>>>> But I want
>>>> ---snip---
>>>> !<[CDATA[<s:ppSoapHeader
>>>> xmlns:s="http://schemas.microsoft.com/Passport/SoapServices/
>>>> SoapHeader"version="1.0"><s:lcid>1033</
>>>> s:lcid><s:sitetoken><t:siteheader
>>>> xmlns:t="http://schemas.microsoft.com/Passport/SiteToken";
>>>> id="253988"/></s:sitetoken><s:ppSoapHeader>]]>
>>>> ---snip---
>>>>
>>>> I don't want it to delimit the "<" with "<", expecially the one
>>>> before
>>>> the CDATA section!
>>>> Any ideas?
>>>>
>>>> Thanks in advance!
>>>> Adam
>>>> --
>>>> View this message in context:
>>>> http://www.nabble.com/Q%3A-Marshall-CDATA-tp18684232p18684232.html
>>>> Sent from the cxf-user mailing list archive at Nabble.com.
>>>>
>>>
>>> ---
>>> Daniel Kulp
>>> [EMAIL PROTECTED]
>>> http://www.dankulp.com/blog
>>>
>>>
>>>
>>>
>>>
>>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Q%3A-Marshall-CDATA-tp18684232p18704319.html
>> Sent from the cxf-user mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Q%3A-Marshall-CDATA-tp18684232p18770055.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to