Hi David,

Yes, JSONProvider's "supportUnwrapped" property is the one to use in this case

Thanks, Sergey

On 20/08/13 01:38, KARR, DAVID wrote:
-----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