Gopal,

Thanks for the pointer. It seems I can marshall the xml into a friendly format like in the code below but I am kind of lost as how I am supposed to work with it now. I have been trying to trace through the source code to see what happens not getting very far. I was assuming that marshaller.marshal(entity, doc); would put a Node in the message so I could get at it with message.getContent(...) from within an Interceptor but that does not seem the case as I still only have an OutputStream and a List<Response> when I call message.getContentFormats() (I have tried moving my Interceptor to different phases also to see if the Node appears in a different phase than expected). If I am supposed to play with the XML in the message body writer where do I put the Node when I am done so the execution chain can continue as normal? Some more hints would be greatly appreciated.

public void writeTo(Template entity, MediaType media,
                MultivaluedMap<String, Object> map, OutputStream os)
                throws IOException {
    try {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setNamespaceAware(true);
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.newDocument();

        JAXBContext context = getJAXBContext(entity.getClass());
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
        marshaller.marshal(entity, doc);

    } catch (JAXBException e) {
        //TODO: better exception handling
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
}

Best Regards,

- Anthony


On Jun 27, 2008, at 5:34 PM, Gopal Patwa wrote:


You might want to see JAXBElementProvider class you can find marshal and
unmarshal jaxb methods

And you can easily override the default JAXB provider by copying it make the
changes and to register user  defined provider.

Here is the example from my app spring context file

   <jaxrs:server id="service" address="/">
       <jaxrs:serviceBeans>
<bean class="com.liquid.fulfiller.sample.server.CustomerService"
/>
       </jaxrs:serviceBeans>
       <jaxrs:entityProviders>
<bean class="com.liquid.fulfiller.jaxrs.JAXBElementProvider"/>
       </jaxrs:entityProviders>
   </jaxrs:server>


Hope this help

-Gopal


Anthony Schexnaildre wrote:

Hello group,

I very much want to diddle the response xml on it's way out to add
attributes and other bits. Unfortunately I seem to be at a loss of how to accomplish this even though it seems like it should be very easy. I
am using CXF 2.1.1, JAXRS and JAXB if that is of interest.

I have written an Interceptor to test with modeled after what I think
is happening in the LoggingOutInterceptor, placed it in all different
locations on the interceptor chain to see what happens in the message
and I am not finding too much.

If I iterate through message.getInterceptorChain() I get:

org.apache.cxf.interceptor.MessageSenderInterceptor
org.apache.cxf.interceptor.LoggingOutInterceptor
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor
com.mypackage.cxf.ContentsDumpInterceptor
org.apache.cxf.interceptor.MessageSenderInterceptor
$MessageSenderEndingInterceptor

If I iterate through message.getContentFormats() I get:

OutputStream
List

The list is filled with a ResponseImpl as that is what I am returning
from the method invocation.

If I try to print the OutputStream like the LoggingOutInterceptor does
nothing happens:

public void handleMessage(Message message) throws Fault {       
        StringBuilder s = new StringBuilder();
        try {
                CachedOutputStream cos = new
CacheAndWriteOutputStream(message.getContent(OutputStream.class));
                cos.writeCacheTo(s);
                LOG.info("~~~~~~~~My Message: " + s.toString() );
        } catch (IOException e) {
                e.printStackTrace();
        }       
}

Where does the XML live? How to I get at it? Please point me in the
right direction. This must be very simple.

-Anthony





--
View this message in context: 
http://www.nabble.com/Modify-Response-XML-tp18162638p18164257.html
Sent from the cxf-user mailing list archive at Nabble.com.


Reply via email to