> -----Original Message-----
> From: KARR, DAVID
> Sent: Monday, August 19, 2013 3:05 PM
> To: [email protected]
> Subject: RE: Debugging json WebClient unmarshal in older CXF (2.3.2) release
> 
> > -----Original Message-----
> > From: KARR, DAVID
> > Sent: Monday, August 19, 2013 2:44 PM
> > To: [email protected]
> > Subject: Debugging json WebClient unmarshal in older CXF (2.3.2) release
> >
> > I'm trying to put together a component that makes a WebClient request to a
> > JAX-RS (Jersey) REST service and unmarshals json into a Java object.
> > Unfortunately, I'm using CXF 2.3.2, and I can't really upgrade at this
> point.
> 
> Just so it's clear, I'm going to need to be able to manually configure the
> WebClient.  I won't be able to use a Spring context for htis.
> 
> > I was given the URL to send for the service, and I can see what JSON it's
> > returning.  From that, I tried to construct a POJO with Xml annotations,
> and
> > then I constructed the WebClient call to get the response and unmarshal
> into
> > the POJO.  I first did a query returning String, so I could verify I get
> the
> > JSON at least.  That part works fine.
> >
> > The query that specifies the POJO type is failing, however.
> >
> > When I defined the POJO, I only defined one property that I know is coming
> in
> > the JSON.  I just wanted to verify the single property gets set before I
> > defined more properties that I need to get.  I assume other properties
> > present in the JSON will be ignored.
> >
> > The response I get looks something like this:
> >
> > {"copyright":"<copyright
> >
> stuff>","termsurl":"http://...","logourl":"http://...","status":200,"resp_cod
> > e":0,"results":[{"id":"M100"},{"id":"M101"}]}
> >
> > My POJO looks like this:
> >
> > @XmlType(name = "queryResponse")
> > @XmlRootElement(name = "queryResponse")
> > public class QueryResponse {
> >     private String  copyright;
> >
> >     @XmlElement
> >     public String getCopyright() { return this.copyright; }
> >
> >     public void setCopyright(String copyright) { this.copyright =
> copyright;
> > }
> > }
> >
> > When I try to run the query, I get the following:
> >
> > UnmarshalException: unexpected element (uri:"", local:"copyright").
> Expected
> > elements are <{}queryResponse>]
> >
> > Is the problem that I don't have a top-level element in the json called
> > "queryResponse"?  If so, I can't change the service that's returning this
> > data.
> >
> > In my pom, I'm specifying "cxf-rt-core", "cxf-rt-frontend-jaxrs", "cxf-rt-
> > databinding-jaxb", "cxf-rt-bindings-http", and "cxf-rt-transports-http".

I think I figured this out.  I needed to build a JSONProvider with the 
"supportUnwrapped" property set to true.  This appears to be working now.

Reply via email to