This is a Resteasy Client -> JAX-RS 2.0 mismatch migration problem.

Replace:

response.getEntity()

with:

response.readEntity(String.class);

replace String.class to whatever class you want to marshal to. 
getEntity() returns null if you haven't unmarshalled anything with 
readEntity().



On 11/26/2013 2:59 PM, Gabriella Turek wrote:
> After upgrading from Resteasy 2.4 to 3.0.5, none of my client calls work
> anymore. The entity which I am expecting (as simple as a String) is
> always null. In debug mode I can see it being set in the Response object
> on the server side, but on the client side the entity in the Response is
> null.
> Here is an example call:
>
> The interface:
>
> |   /**
>     * @return all expired licenses
>     */
>    @GET
>    @ClientResponseType(entityType=  LicenseList.class)
>    @Path("/expired")
>    @Produces(MediaType.APPLICATION_XML)
>    public  Response  getExpiredLicenses();|
>
> The implementation:
>
> |   /**
>     * @return all expired licenses
>     */
>    @Override
>    public  Response  getExpiredLicenses()  {
>      try  {
>        LicenseList  list=  LicensesDBUtil.getExpiredLicenses();
>        Response  resp=  Response.ok().entity(list).build();
>        return  resp;
>      }  catch  (SQLException  e)  {
>        LOG.error("Error getting expired licenses :"  +  e.getMessage());
>        return    
> Response.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()).type(MediaType.TEXT_PLAIN).build();
>      }|
>
> The test call :
>
> |   @Test
>    public  void  testGetExpiredLicenses()  throws  Exception  {
>          ResteasyClientBuilder  rsb=  new  ResteasyClientBuilder();
>      ResteasyClient  rsc=  rsb.build();
>      ResteasyWebTarget  target=  rsc.target(BASEURL);
>      return  target.proxy(RiskScapeLicenseService.class);
>      Response  response=  client.getExpiredLicenses();
>      assertTrue(HttpResponseCodes.SC_OK==  response.getStatus());
>      @SuppressWarnings("unchecked")
>      JAXBElement<LicenseList>  element=  (JAXBElement<LicenseList>)  
> response.getEntity();
>      LicenseList  list=  element.getValue();
>      assertEquals(4,  list.getLicenses().size());
>      for  (License  lic:  list.getLicenses())  {
>        assertTrue((new  Date()).after(DateUtils.parseDate(lic.getValidTo(),  
> new  String[]  {  "yyyy-MM-dd"  })));
>      }
>    }|
>
> My web.xml file:
>
> |<?xml version="1.0"  encoding="UTF-8"?>
> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";  
> xmlns="http://java.sun.com/xml/ns/javaee";  
> xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";  
> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";  version="2.5">
>    <display-name>riskscapelic_rest</display-name>
>    <listener>
>      <listener-class>
>              org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
>      </listener-class>
>    </listener>
>    <servlet>
>      <servlet-name>Resteasy</servlet-name>
>      
> <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
>    </servlet>
>    <servlet-mapping>
>      <servlet-name>Resteasy</servlet-name>
>      <url-pattern>/*</url-pattern>
>    </servlet-mapping>
>    <context-param>
>      <param-name>resteasy.scan</param-name>
>      <param-value>true</param-value>
>    </context-param>
>    <context-param>
>      <param-name>resteasy.servlet.mapping.prefix</param-name>
>      <param-value>/</param-value>
>    </context-param>
> </web-app>|
>
> The LicenseList class:
>
> |@XmlRootElement(name=  "LicenseList")
> @XmlAccessorType(XmlAccessType.FIELD)
> @XmlType(name=  "licenseList",  propOrder=  {
>      "licenses"
> })
> public  class  LicenseList  {
>
>      @XmlElement(name=  "Licenses",  required=  true)
>      protected  List<License>  licenses;
>
>      /**
>       * Gets the value of the licenses property.
>       *
>       * <p>
>       * This accessor method returns a reference to the live list,
>       * not a snapshot. Therefore any modification you make to the
>       * returned list will be present inside the JAXB object.
>       * This is why there is not a <CODE>set</CODE> method for the licenses 
> property.
>       *
>       * <p>
>       * For example, to add a new item, do as follows:
>       * <pre>
>       *    getLicenses().add(newItem);
>       * </pre>
>       *
>       *
>       * <p>
>       * Objects of the following type(s) are allowed in the list
>       * {@link License }
>       *
>       *
>       */
>      public  List<License>  getLicenses()  {
>          if  (licenses==  null)  {
>              licenses=  new  ArrayList<License>();
>          }
>          return  this.licenses;
>      }
>
> }|
>
> I am using JDK 1.7, Tomcat 7.0.47
> --
> Dr Gabriella Turek
> Sr. Software Engineer, Systems Development Team
> NIWA Auckland, New Zealand
> Tel: +64 9 3754645
> www.niwa.co.nz
> NIWA - Enhancing the benefit of New Zealand’s natural resources.
> --
> Please consider the environment before printing this email.
> NIWA is the trading name of the National Institute of Water &
> Atmospheric Research Ltd.
>
>
> ------------------------------------------------------------------------------
> Rapidly troubleshoot problems before they affect your business. Most IT
> organizations don't have a clear picture of how application performance
> affects their revenue. With AppDynamics, you get 100% visibility into your
> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
> http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
>
>
>
> _______________________________________________
> Resteasy-users mailing list
> Resteasy-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/resteasy-users
>

-- 
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com

------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
Resteasy-users mailing list
Resteasy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/resteasy-users

Reply via email to