On 07/03/13 10:35, Jason Chaffee wrote:
I would want to return a Resource on CustomerService.getOrder(String orderId)

So, in the example you have this:

@Path("/customerservice/")
public class CustomerService {

     @Path("/orders/{orderId}/")
     public Order getOrder(@PathParam("orderId") String orderId) {
        ......
     }
}


I would like to do it like this:

@Path("/customerservice/")
public class CustomerService {

     @Path("/orders/{orderId}/")
     public Response getOrder(@PathParam("orderId") String orderId) {
        ......
     }
}


That way a GET on /customerservice/orders/1234 would have custom headers, etc.  
 However, I would still like to have a sub-resource defined on the Order object 
that is the entity in the Resource so that this call works

GET http://localhost:9000/customerservice/orders/223/products/323

So that it calls getOrder(223) first and that returns a Response object with an 
entity and that entity is the Order objet.  So, next you call getProducts(323) 
on that object.

Either the following:

 @Path("/customerservice/")
 public class CustomerService {

      @Path("/orders/{orderId}/")
      public Order getOrder(@PathParam("orderId") String orderId) {
         return doGetOrder(orderId);
      }

      @GET
      @Path("/orders/{orderId}/")
      public Response getOrder(@PathParam("orderId") String orderId) {
         return Response.ok(doGetOrder(orderId)).header("a", "b").build();
      }

      private Order doGetOrder(String orderId) {
         ...
      }
 }

or

 @Path("/customerservice/")
 public class CustomerService {

      @Path("/orders/{orderId}/")
      public Order getOrder(@PathParam("orderId") String orderId) {
         ...
      }
 }

 public class Order {
    @GET
    public Response get() {return this};

    @GET @Path("product")
    public Response getProduct() {...}
 }


will work.


It is not possible to have a single method acting both as a subresource locator and the final resource method,

HTH, Sergey


Jason


On Mar 7, 2013, at 2:13 AM, Sergey Beryozkin<[email protected]>  wrote:

Hi
On 07/03/13 05:12, Jason Chaffee wrote:
I would like to do something similar to the order/product example outlined here:

http://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-Subresourcelocators.


However, I would like to have my CustomerService.getOrder(String id) and the 
the Order.getProduct(String id) return Response objects so that I can customize 
the headers.  However, when I do that, it doesn't seem to work.  I have to 
return the raw entity objects.


I would think it could be smart enough to grab the entity object out of the 
Response object and still find the correct path.

Do you mean you are actually returning Response from subresource locator ? For 
example,

Path("/")
public class Root {
@Path("/sub")
public Response getSubResource() {
  ...
}
}

if not, can you please type an example here ?

In the wiki example, returning Response from Order.getProduct really has to 
work but not if Response returned from CustomerService.getOrder,

Sergey


Any thoughts?

Jason






--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to