I have a web service which supports both SOAP and RESTful calls which works
great except for one small issue with JSON serialization on List results.
I have two methods, one that returns a single entity and one that returns a
List of entities.
@GET
@Path("/parcel/{id}")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public Parcel getParcel(@PathParam("id") String id) {...}
and
@GET
@Path("/parcels")
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
public List<Parcel> getParcels() {...}
When these methods are called via SOAP or Rest with XML return it all works
perfectly. When I call with JSON return it all looks decent but breaks
down. With no JSONProvider configuration the results look like this:
getParcel
{"ns1.Parcel": {
"ns1.ParcelID": 26,
"ns1.Fragile": false,
"ns1.Weight": 34
}}
getParcels
{"ns1.Parcel": [
{
"ns1.ParcelID": 1,
"ns1.Fragile": true,
"ns1.Weight": 100},
{
"ns1.ParcelID": 2,
"ns1.Fragile": false,
"ns1.Weight": 1000}
]}
Since the ns1 prefix is "random" (it's changed on me several times) I
wanted to define my own static prefix so I added a namespace map to the
JSONProvider and get these results
getParcel
{"p.Parcel": {
"p.ParcelID": 26,
"p.Fragile": false,
"p.Weight": 34
}}
getParcels
{"ns1.Parcel": [
{
"p.ParcelID": 1,
"p.Fragile": true,
"p.Weight": 100},
{
"p.ParcelID": 2,
"p.Fragile": false,
"p.Weight": 1000}
]}
The return of the single item came across as I expected (everything with a
single prefix p) but the List return still had the collection node with the
random ns1 prefix. Since that didn't work the way I wanted, I removed the
namespace map and added <property name="ignoreNamespaces" value="true"/>
and got these results
getParcel
{"Parcel": {
"ParcelID": 26,
"Fragile": false,
"Weight": 34
}}
getParcels
{"ns1.Parcel": [
{"Parcel": {
"ParcelID": 1,
"Fragile": true,
"Weight": 100}},
{"Parcel": {
"ParcelID": 2,
"Fragile": false,
"Weight": 1000}}
]}
Again, the single item came across fine but the List return wasn't what I
expected at all. I also tried to fool with some of the other options but
nothing I could try seemed to work. I want to get rid of the ns1 prefix on
the List wrapper element but can't figure it out.
Thanks,
Chris