|
From: Bill B. <bb...@re...> - 2013-11-26 20:52:05
|
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
> Res...@li...
> https://lists.sourceforge.net/lists/listinfo/resteasy-users
>
--
Bill Burke
JBoss, a division of Red Hat
http://bill.burkecentral.com
|