Hi Gary

I ended up writing my own converter for JSON that uses its own annotations
seperate from JAXB.  It's a pretty quick implementation, and only does what
I need it to do.  It depends on the JSON objects from json.org, which are
also included in Jettison under a different package.  The annotations can be
used alongside JAXB like so:

@XmlRootElement(name = "response")
@JsonObject
public class MyResponse {
 @XmlAttribute
 @JsonField
 private boolean success;
 @XmlElement(name = "msg")
 @JsonField(name = "msg")
 private String message;
 @XmlElementWrapper(name = "errors")
 @XmlElement(name = "error")
 @JsonField(name = "errors", required = true)
 private List<String> errors;
 ...
}

Would you be interested in updating the existing CXF JSONProvider (the one based on Jettison) for it to support @JsonObject/etc annotations ? I was about to do it myself but given my JSON experience (not great so to say) I thought I would ping you first :-) we can introduce a new package, org.apache.cxf.jaxrs.providers.json, or org.apache.cxf.jaxrs.ext.json, and add these annotations there, and then rely on the fact Jettison ships JSonObject/etc...

cheers, Sergey


This will produce this JSON:

{success: true, msg: "Test Message", errors: ["a", "b"]}

And this XML:

<response success="true"><msg>Test
Message</msg><errors><error>a</error><error>b</error></errors></response>

Since this was written only for personal use, it's a fair bit aways from
being a full-featured library.  Stuff that needs to be done before public
consumption:

1) Two-way serialization.  Currently it's only bean -> JSON but not the
other way around.
2) Reflection caching.  Currently all reflection happens in the middle of
serialization.  Breaking it up into reflection + serialization phases as
JAXB does it would speed things up considerably.
3) Ability to switch between field/method accessors (currently it only reads
fields)

As well as some features that could be really useful such as:

1) Pluggable annotation adapters that can be used to read directly from JAXB
annotations
2) Type adapters that will allow custom marshalling/unmarshalling, although
this could also be done via getters/setters

What's the interest level in putting something like this into CXF?

Cheers,
Gary


Reply via email to