Hi Sergey, Thank you for your reply. Per your suggestion, I added a default
constructor and now I am getting data but somehow it is in json format:

{"Locations":{"locations":[{"id":1},{"id":2}]}}

I thought the default binding is jaxb. Also I am still getting empty list
when I do a POST (see my issue #2 in my last post), can you please also shed
some light here? Thank you for your help!


Sergey Beryozkin wrote:
> 
> Hi
> 
> Unfortunately the actual messages available from JAXBExceptions are
> limiting, it is really a stack trace which contains some useful
> information, so on the trunk the stack traces are also being logged now.
> I'm quite convinced it's a JAXB thing - some sort of naming convention
> issue or whatever. I'd advise to check on JAXB lists in such cases.
> 
> Doing a quick test on the trunk reveals :
> 
> 24-Jul-2009 09:53:49 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider
> handleJAXBException
> WARNING: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts
> of IllegalAnnotationExceptions
> org.apache.cxf.jaxrs.provider.JAXBElementProviderTest$Location does not
> have a no-arg default constructor.
>       this problem is related to the following location:
>               at 
> org.apache.cxf.jaxrs.provider.JAXBElementProviderTest$Location
>               at public java.util.List
> org.apache.cxf.jaxrs.provider.JAXBElementProviderTest$Locations.getLocations()
>               at 
> org.apache.cxf.jaxrs.provider.JAXBElementProviderTest$Locations
> 
> After adding a default Location constructor we now get :
> 
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <Locations><locations><id>1</id></locations></Locations>
> 
> cheers, Sergey
> 
> 
> 
> yong wrote:
>> 
>> Hello,
>> 
>> I have googled these issues before coming to tihs forum. I have seen a
>> couple of related posts on this forum but didn't see how they were
>> resolved.
>> 
>> Here is the simple test code I have:
>> 
>> Locations.java
>> --------------
>> @XmlRootElement(name = "Locations")
>> public class Locations
>> {
>>     private List<Location> locations;
>> 
>>     public void setLocations(final List<Location> locations)
>>     {
>>         this.locations = locations; 
>>     }
>> 
>>     public List<Location> getLocations()
>>     {
>>         return locations;
>>     }
>> }
>> 
>> Location.java
>> -------------
>> @XmlRootElement(name = "Location")
>> public class Location
>> {
>>     private String id;
>> 
>>     public Location(String id)
>>     {
>>         this.id = id;
>>     }
>>     
>>     public void setId(String id)
>>     {
>>         this.id = id;
>>     }
>> 
>>     public String getId()
>>     {
>>         return id;
>>     }
>> }
>> 
>> LocationServices.java
>> ---------------------
>> @Path("/locationservices/")
>> public class LocationServices
>> {
>>     private static final Logger log = LogManager
>>             .getLogger(LocationManagerServiceImpl.class);
>> 
>>     @POST
>>     @Path("/pilot/{id}")
>>     public Response updatePilotLocations(@PathParam("id") String id,
>> Locations locations)
>>     {
>>          Long appId = Long.parseLong(id);
>>          log.debug("Received appid = " + appId);
>> 
>>         if (locations == null || locations.getLocations() == null)
>>         {
>>             log.warn("Received empty location list.");
>>             return Response.notModified().build();
>>         }
>>         
>>         for (Location loc : locations.getLocations())
>>         {
>>             log.debug("Received loc = " + loc.getId());
>>         }
>>         
>>         return Response.ok(locations).build();
>>     }
>> 
>>     @GET
>>     @Path("/pilot/{id}")
>>     public String getPilotLocation(@PathParam("id") String id)
>>     {
>>         log.debug("Received id = " + id);
>>         return "OK";
>>     }
>> 
>>     @GET
>>     @Path("/pilot/")
>>     public Locations getPilotLocations()
>>     {
>>         log.debug("In getPilotLocations");
>>         Locations locs = new Locations();
>>         List<Location> l = new ArrayList<Location>();
>>         l.add(new Location("1"));
>>         l.add(new Location("2"));
>>         locs.setLocations(l);
>>         return locs;
>>     }
>> }
>> 
>> I am seeing 2 issues related to Collection/List:
>> 
>> Issue #1
>> ======
>> In getPilotLocations(), it is giving:
>> 2009-07-23 17:09:49,387 INFO  [STDOUT] (TP-Processor3) 7145811
>> [TP-Processor3] DEBUG com.apps.service.rest.LocationServices  - In
>> getPilotLocations
>> 2009-07-23 17:09:49,484 ERROR [STDERR] (TP-Processor3) Jul 23, 2009
>> 5:09:49 PM org.apache.cxf.jaxrs.provider.AbstractJAXBProvider
>> handleJAXBException
>> WARNING: JAXBException occurred : 1 counts of IllegalAnnotationExceptions
>> 2009-07-23 17:09:49,485 INFO  [STDOUT] (TP-Processor3) 7145909
>> [TP-Processor3] ERROR STDERR  - Jul 23, 2009 5:09:49 PM
>> org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
>> WARNING: JAXBException occurred : 1 counts of IllegalAnnotationExceptions
>> 2009-07-23 17:09:49,493 ERROR [STDERR] (TP-Processor3) Jul 23, 2009
>> 5:09:49 PM org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper
>> toResponse
>> WARNING: WebApplicationException has been caught : 1 counts of
>> IllegalAnnotationExceptions
>> 2009-07-23 17:09:49,494 INFO  [STDOUT] (TP-Processor3) 7145918
>> [TP-Processor3] ERROR STDERR  - Jul 23, 2009 5:09:49 PM
>> org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse
>> WARNING: WebApplicationException has been caught : 1 counts of
>> IllegalAnnotationExceptions
>> 2009-07-23 17:09:49,517 ERROR [STDERR] (TP-Processor3) Jul 23, 2009
>> 5:09:49 PM
>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
>> INFO: Outbound Message
>> ---------------------------
>> ID: 1
>> Encoding: 
>> Content-Type: text/plain
>> Headers: {Content-Type=[text/plain]}
>> Payload: JAXBException occurred : 1 counts of IllegalAnnotationExceptions
>> --------------------------------------
>> 2009-07-23 17:09:49,518 INFO  [STDOUT] (TP-Processor3) 7145942
>> [TP-Processor3] ERROR STDERR  - Jul 23, 2009 5:09:49 PM
>> org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
>> INFO: Outbound Message
>> ---------------------------
>> ID: 1
>> Encoding: 
>> Content-Type: text/plain
>> Headers: {Content-Type=[text/plain]}
>> Payload: JAXBException occurred : 1 counts of IllegalAnnotationExceptions
>> --------------------------------------
>> 
>> Issue #2
>> ======
>> In my updatePilotLocations() - a POST, I am seeing null for
>> locations.getLocations():
>> 
>> 2009-07-23 16:01:33,850 INFO  [STDOUT] (TP-Processor2) 3050274
>> [TP-Processor2] ERROR STDERR  - Jul 23, 2009 4:01:33 PM
>> org.apache.cxf.interceptor.LoggingInInterceptor logging
>> INFO: Inbound Message
>> ----------------------------
>> ID: 1
>> Address: /rest/locationservices/pilot/
>> Encoding: ISO-8859-1
>> Content-Type: text/xml; charset=ISO-8859-1
>> Headers: {content-length=[62], host=[test.apps.com], user-agent=[Jakarta
>> Commons-HttpClient/3.0], Content-Type=[text/xml; charset=ISO-8859-1],
>> content-type=[text/xml; charset=ISO-8859-1], Accept=[text/xml]}
>> Payload: <Locations>
>> <Location>
>> <id>1</id>
>> </Location>
>> </Locations>
>> --------------------------------------
>> 2009-07-23 16:01:34,023 WARN  [com.apps.service.rest.LocationServices]
>> (TP-Processor2) Received empty location list.
>> 2009-07-23 16:01:34,024 INFO  [STDOUT] (TP-Processor2) 3050448
>> [TP-Processor2] WARN com.apps.service.rest.LocationServices  - Received
>> empty location list.
>> 
>> Could someone please shed some light on these issues? I would really
>> appreciate your help!
>> Thanks
>> 
>> 
>> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/CXF-2.2.2-handling-of-Collection-broken--tp24637431p24643852.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to