users@jersey.java.net

Re: [Jersey] Trouble accessing resource

From: Rod Fitzsimmons Frey <rfrey_at_attassa.com>
Date: Tue, 24 Mar 2009 06:45:54 -0600

Thanks for the reply, Paul. To answer your questions: I'm using
default Tomcat logging, whatever comes out of the box. I'm just
accessing commons logging. Newb question: is there some way to turn
on detailed logging within Jersey so I can see what class is returning
the 201?

The response from the curl is a 201:

rod-fitzsimmons-freys-macbook-pro:~ Rod$ curl -d
"email=test3@here.com&password=test" -H "Accept:application/xml" http://dev.attassa.com/ws/users
  -i
HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Content-Type: application/xml
Content-Length: 0
Date: Tue, 24 Mar 2009 12:47:17 GMT

I'll make sure I have 1.0.2 installed and that there are no other jars
lurking on the classpath somewhere.

Here's the complete post method:


@Path("/users")
public class UsersResource {

     @Context
     private UriInfo context;
     @Context
     private HttpServletRequest hsr;

... etc

     @POST
     @Consumes("application/x-www-form-urlencoded")
     @Produces("application/xml")
     public Response post(@FormParam("email") String email,
@FormParam("password") String password)
                throws MissingParameterException, UserExistsException,
AttassaServerException {
         log.log(Level.INFO, "Creating a user: " + email);
         if (email == null || email.trim().length() == 0 || password
== null || password.trim().length() == 0) {
             throw new MissingParameterException();
         }
         User u = null;
         try {
             if (userDAO.findUserByEmail(email) != null) {
                 System.out.println("UsersResource: Found the user
already!!");
                 throw new UserExistsException();
             }
             System.out.println("UsersResource: Creating the user.
userDAO is " + userDAO);
             u = userDAO.createNewUser(email, password, true);
         } catch (java.sql.SQLException ex) {
             ex.printStackTrace();
             throw new AttassaServerException(ex);
         }
         System.out.println("UsersResource: Created a user. User is
" + u.getEmail());

         String clientguid = hsr.getHeader("X-Attassa-ClientID");
         String agent = hsr.getHeader("User-Agent");
         userDAO.updateClientInstall(clientguid, "usercreate",
u.getDbId(), agent, "");
         return
Response.status(Response.Status.CREATED).entity(u).build();
     }



On 24-Mar-09, at 2:58 AM, Paul Sandoz wrote:

> Hi Rod,
>
> This is indeed perplexing. It sounds like an issue with Tomcat on
> reloading.
>
>
> On Mar 23, 2009, at 9:59 PM, Rod Fitzsimmons Frey wrote:
>
>> I don't even know how to correctly frame this question, so I'm
>> hoping somebody has seen a similar symptom and can point me in the
>> right direction. Failing that, a pointer or two on how to debug
>> would be greatly appreciated.
>>
>> I have a simple resource for accessing and creating users.
>> UsersResource has a post method:
>>
>> @POST
>> @Consumes("application/x-www-form-urlencoded")
>> @Produces("application/xml")
>> public Response post(@FormParam("email") String email,
>> @FormParam("password") String password) {
>> log.log(Level.INFO, "Creating a user: " + email);
>> ..etc
>>
>> Here's the issue: when I deploy this class and call the POST with a
>> curl command, it gets called... until I restart the server. Then
>> the call returns a 201 Created, but my class doesn't get called.
>
> How are you verifying that? debugging or print statements?
>
> What is the response from your resource when you used curl a 200 or
> a 201?
>
>
>> I can get it to go again by modifying the size of the
>> UsersResources.class file (just a touch doesn't work): then it will
>> get called successfully again until I restart the server.
>>
>> A filter I have in place is getting called consistently in both
>> cases.
>>
>> I'm running Jersey bundle 1.0 on Tomcat 6.0.18.
>>
>> AFAIK the default return value should be a 401 if Jersey isn't
>> finding a resource class,
>
> 404.
>
>
>> or 204 No Content for null content.
>
> Only if a resource method of a resource class returns null content.
>
>
>> I'm getting neither of those, rather a 201.
>
> Can you send the complete code for your post method?
>
>
>> Plus that log statement in the first line of the post method is
>> never called.
>>
>> I'm truly perplexed. Any hints?
>>
>
> This is a completely wild guess: do you have logging configuring in
> Tomcat?
>
> There was a bug with Jersey 1.0.1 whereby if Tomcat values or
> servlet filters accessed the request parameters Jersey could not get
> the form parameters, they would be null. This is fixed in Jersey
> 1.0.2. But i am not sure that is the cause of your problem because
> it works before you perform a restart.
>
> Paul.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>