Hi Jairo,
It is definitely preferred to directly ask
for the MallDetail entity, and i am happy to hear that
it works fine for you:
MallDetail entity = response.getEntity(MallDetail .class);
(Please note, there is no need for any cast above)
The reason why "manual" unmarshalling does not work for you
is that you most likely do not use the right
JSONUnmarshaller/XmlStreamReader implementation.
The internal Jersey implementations are not supposed
to be used outside of Jersey and are also not part of the public API.
Is there any particular reason why you want
to do the unmarshalling manually?
~Jakub
On 05/08/2011 02:38 AM, Jairo1 wrote:
> Hello Jakub (or whoever could help)
>
> I'm facing with the following problem.
> REST web server provides me a response on my POST request in JSON or XML
> format.Using ClientResponse approach I'm checking the type of the response:
>
> ACCEPT_MEDIA_TYPES -> both json& xml accepted
> ClientResponse response =
> server.path("malls").type(MediaType.APPLICATION_JSON).accept(ACCEPT_MEDIA_TYPES).post(ClientResponse.class);
>
> //get response media type (XML or JSON)
> responseType = response.getType();
>
> Based on the response type I'm using JSONJAXBContext& JSONUnmarshaller to
> deserialize JSON data or JAXBContext& Unmarshaller to deserialize XML data.
>
> (hope this is correct approach...)
>
> Based on the:
> String textEntity = (String)response.getEntity(String.class);
> data in both formats are received correctly.
>
>
> The PROBLEM is with unmarshaling these following beans:
> **************
>
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "", propOrder = {
> "mall",
> "shopDetail"
> })
> @XmlRootElement(name = "mallDetail")
> public class MallDetail {
>
> @XmlElement(required = true)
> protected Mall mall;
> @XmlElement(required = true)
> protected List<ShopDetail> shopDetail;
>
> public Mall getMall() {
> return mall;
> }
>
> public void setMall(Mall value) {
> this.mall = value;
> }
>
> public List<ShopDetail> getShopDetail() {
> if (shopDetail == null) {
> shopDetail = new ArrayList<ShopDetail>();
> }
> return this.shopDetail;
> }
> }
>
> ***********
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name = "", propOrder = {
> "shop",
> "preferredFood",
> "food"
> })
> @XmlRootElement(name = "shopDetail")
> public class ShopDetail {
>
> @XmlElement(required = true)
> protected Shop shop;
> @XmlElement(required = true)
> @XmlSchemaType(name = "unsignedLong")
> protected BigInteger preferredFood;
> @XmlElement(required = true)
> protected List<Food> food;
>
> public Shop getShop() {
> return shop;
> }
>
> public void setShop(Shop value) {
> this.shop = value;
> }
>
> public BigInteger getPreferredFood() {
> return preferredFood;
> }
>
> public void setPreferredFood(BigInteger value) {
> this.preferredFood = value;
> }
>
> public List<Food> getFood() {
> if (food == null) {
> food = new ArrayList<Food>();
> }
> return this.food;
> }
>
> }
>
> > From POST response I get MallDetail containing
> 1.Mall mall
> 2.List<ShopDetail> shopDetail
>
>
> The problem is that when the namespace = "http://example.com/malls" is just
> in the package-info.java, only JSON deserializing works fine.
> XML unmarshalling returns :
> 1.Mall bean of MallDetail is correct
> 2.List<ShopDetail> of MallDetail is not empty but 'Shop' and 'List<Food>'
> are null.
>
>
> And vice versa. If I add namespace annotations also to 'ShopDetail' bean:
> ...
> @XmlElement(namespace = "http://example.com/malls", required = true)
> protected Shop shop;
> @XmlElement(required = true)
> @XmlSchemaType(name = "unsignedLong")
> protected BigInteger preferredFood;
> @XmlElement(namespace = "http://example.com/malls", required = true)
> protected List<Food> food;
> ...
> and MallDetail
> @XmlElement(namespace = "http://example.com/malls", required = true)
> protected Mall mall;
> @XmlElement(namespace = "http://example.com/malls", required = true)
> protected List<ShopDetail> shopDetail;
>
>
> XML response is not null, but JSON unmarshalling returns NULL for 'Shop' and
> 'List<Food>'
>
>
> What could be wrong or what is missing regarding namespace annotations ?
> Is it even possible to handle both data types JSON&XML using the same
> annotated JAXB-beans and stringEntity generated from ClientResponse class?
>
>
> NOTE: Meantime I have found out that direct
> MallDetail entity = (MallDetail )response.getEntity(MallDetail .class);
> works fine for JSON&XML response (using namespace annotations). But there
> is still open question why this doesn't work using stringEntity + JSON and
> XML unmarshalling.
>
> Thanks for your advice.
> Jairo
>
>
>
>
>
> --
> View this message in context: http://jersey.576304.n2.nabble.com/XML-JSON-namespace-PROBLEM-tp6341028p6341028.html
> Sent from the Jersey mailing list archive at Nabble.com.
>