cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rbinion <>
Subject Re: XSLTJaxbProvider and json
Date Wed, 27 Jul 2011 01:06:52 GMT
Well, this might be getting a bit involved for this forum, but if anyone has
any thoughts I would very much so appreciate hearing them.

I am close to getting the XsltJsonProvider working. I actually have it
working for writing, but I've run into a conceptual roadblock getting it to
work for reading.

I basically merged XsltJaxbProvider with JsonProvider (at least to get it
working), and in the marshalToOutputStream method I just passed in the
streamwriter for handling json.

	protected void marshalToOutputStream(Marshaller ms, Object obj,
			OutputStream os, MediaType mt, XMLStreamWriter writer)
			throws Exception {
		TransformerHandler th = factory.newTransformerHandler(createTemplates(
				getOutTemplates(mt), outParamsMap, outProperties));
		// Result result = new StreamResult(os);
		Result result = new StaxResult(writer);
		if (systemId != null) {
		ms.marshal(obj, th);

So the xslt is applied and then is written using jettison. Works great! :)

I'm actually not familiar enough with these API's to know for sure what is
going on in the marshal method, but my guess is that the Object is being
converted to xml with jaxb, the xslt is then applied, then it is written it
to the output stream using the jettison writer which converts the xml to
json as it is being written.

If this is correct then the reverse, reading/unmarshaling, would first have
to convert the json to xml, apply the xslt, and then use jaxb to construct
the object. Unlike with writing though, I am not seeing a way to hand a
jettison reader and a filter to the unmarshaller all at once.

I am trying something like the following (with multiple variations), to no
avail ...

XMLFilter filter = factory.newXMLFilter(createTemplates(
		getInTemplates(mt), inParamsMap, inProperties));

StaxSource source2 = new StaxSource(xsw); //where xsw is a XmlStreamReader
for handling json

response = unmarshaller.unmarshal(??);

Unlike with marshaling I am just not seeing a way to get those two concepts
together. Is there not a way to do this in one step, and so I should
manually convert the json to xml first? Am I misunderstanding how this whole
thing works?

Again, I can provide more code if it would be useful, and any insight is
greatly appreciated. :)



View this message in context:
Sent from the cxf-dev mailing list archive at

View raw message