Hi Jan,
I recommend also taking a look at the working example:
http://download.java.net/maven/2/com/sun/jersey/samples/HypermediaSample/1.2-SNAPSHOT/HypermediaSample-1.2-SNAPSHOT-project.zip
When you run it you will get an output like that attached at the end
of the email.
Thanks for taking the time to look into this and provide feedback, it
is most valuable.
Note that from an implementation perspective it is all plugable,
nothing is hardcoded, thus allowing for evolution and experimentation,
either of iterative improvements or some alternative approach.
And one area of definite controversy is the client proxy will utilize
WADL, dynamically via OPTIONS, to obtain additional meta-data e.g. to
know if a name corresponds say to a query parameter or say a form
parameter. As i said this is experimental :-)
Paul.
Starting grizzly...
Feb 10, 2010 11:01:19 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 1 * Client out-bound request
1 > GET
http://localhost:9998/orders/1
1 >
Feb 10, 2010 11:01:19 AM
com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
com.sun.jersey.samples.hypermedia.server.controller
Feb 10, 2010 11:01:19 AM
com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class
com.sun.jersey.samples.hypermedia.server.controller.ProductResource
class
com.sun.jersey.samples.hypermedia.server.controller.CustomersResource
class
com.sun.jersey.samples.hypermedia.server.controller.CustomerResource
class
com.sun.jersey.samples.hypermedia.server.controller.ProductsResource
class
com.sun.jersey.samples.hypermedia.server.controller.OrdersResource
class
com.sun.jersey.samples.hypermedia.server.controller.OrderResource
Feb 10, 2010 11:01:19 AM
com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Feb 10, 2010 11:01:19 AM
com.sun.jersey.server.impl.application.WebApplicationImpl initiate
INFO: Initiating Jersey application, version 'Jersey: 1.2-SNAPSHOT
02/09/2010 05:29 PM'
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 1 * Client in-bound response
1 < 200
1 < Link: <
http://localhost:9998/orders/1/refresh>;op=GET;rel=refresh
1 < Link: <
http://localhost:9998/orders/1/review>;op=POST;rel=review
1 < Link: <
http://localhost:9998/orders/1/cancel>;op=POST;rel=cancel
1 < Link: <
http://localhost:9998/orders/1/update>;op=PUT;rel=update
1 < Content-Length: 391
1 < Date: Wed, 10 Feb 2010 10:01:20 GMT
1 < Content-Type: application/xml
1 < server: grizzly/1.9.8
1 <
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<order>
<id>1</id>
<customer>
http://localhost:9998/customers/21</customer>
<shippingAddress>
http://localhost:9998/customers/21/address/1</
shippingAddress>
<orderItems>
<product>
http://localhost:9998/products/3345</product>
<quantity>1</quantity>
</orderItems>
<status>RECEIVED</status>
</order>
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 2 * Client out-bound request
2 > OPTIONS
http://localhost:9998/orders/1/review
2 >
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 2 * Client in-bound response
2 < 200
2 < Content-Length: 605
2 < Allow: OPTIONS,POST
2 < Date: Wed, 10 Feb 2010 10:01:20 GMT
2 < Content-Type: application/vnd.sun.wadl+xml
2 < server: grizzly/1.9.8
2 <
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="
http://wadl.dev.java.net/2009/02">
<doc xmlns:jersey="
http://jersey.dev.java.net/"
jersey:generatedBy="Jersey: 1.2-SNAPSHOT 02/09/2010 05:29 PM"/>
<resources base="
http://localhost:9998/">
<resource path="orders/1/review">
<method name="POST" id="review">
<request>
<param xmlns:xs="
http://www.w3.org/2001/
XMLSchema" type="xs:string" style="header" name="notes"/>
</request>
</method>
</resource>
</resources>
</application>
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 3 * Client out-bound request
3 > POST
http://localhost:9998/orders/1/review
3 > notes: approve
3 >
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 3 * Client in-bound response
3 < 204
3 < Link: <
http://localhost:9998/orders/1/refresh>;op=GET;rel=refresh
3 < Link: <
http://localhost:9998/orders/1/cancel>;op=POST;rel=cancel
3 < Link: <
http://localhost:9998/orders/1/update>;op=PUT;rel=update
3 < Link: <
http://localhost:9998/orders/1/pay>;op=POST;rel=pay
3 < Date: Wed, 10 Feb 2010 10:01:20 GMT
3 < server: grizzly/1.9.8
3 <
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 4 * Client out-bound request
4 > GET
http://localhost:9998/orders/1/refresh
4 > Accept: application/xml
4 >
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 4 * Client in-bound response
4 < 200
4 < Link: <
http://localhost:9998/orders/1/refresh>;op=GET;rel=refresh
4 < Link: <
http://localhost:9998/orders/1/cancel>;op=POST;rel=cancel
4 < Link: <
http://localhost:9998/orders/1/update>;op=PUT;rel=update
4 < Link: <
http://localhost:9998/orders/1/pay>;op=POST;rel=pay
4 < Content-Length: 391
4 < Date: Wed, 10 Feb 2010 10:01:20 GMT
4 < Content-Type: application/xml
4 < server: grizzly/1.9.8
4 <
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<order>
<id>1</id>
<customer>
http://localhost:9998/customers/21</customer>
<shippingAddress>
http://localhost:9998/customers/21/address/1</
shippingAddress>
<orderItems>
<product>
http://localhost:9998/products/3345</product>
<quantity>1</quantity>
</orderItems>
<status>REVIEWED</status>
</order>
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 5 * Client out-bound request
5 > GET
http://localhost:9998/customers/21
5 >
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 5 * Client in-bound response
5 < 200
5 < Link: <
http://localhost:9998/customers/21/
refresh>;op=GET;rel=refresh
5 < Link: <
http://localhost:9998/customers/21/update>;op=PUT;rel=update
5 < Link: <
http://localhost:9998/customers/21/
activate>;op=POST;rel=activate
5 < Content-Length: 258
5 < Date: Wed, 10 Feb 2010 10:01:20 GMT
5 < Content-Type: application/xml
5 < server: grizzly/1.9.8
5 <
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
<id>21</id>
<name>John</name>
<addresses>
http://localhost:9998/customers/21/address/1</addresses>
<cardNumber>12345678</cardNumber>
<status>SUSPENDED</status>
</customer>
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 6 * Client out-bound request
6 > POST
http://localhost:9998/customers/21/activate
6 >
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 6 * Client in-bound response
6 < 204
6 < Link: <
http://localhost:9998/customers/21/
refresh>;op=GET;rel=refresh
6 < Link: <
http://localhost:9998/customers/21/update>;op=PUT;rel=update
6 < Link: <
http://localhost:9998/customers/21/
suspend>;op=POST;rel=suspend
6 < Date: Wed, 10 Feb 2010 10:01:20 GMT
6 < server: grizzly/1.9.8
6 <
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 7 * Client out-bound request
7 > POST
http://localhost:9998/orders/1/pay?newCardNumber=123456789
7 >
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 7 * Client in-bound response
7 < 204
7 < Link: <
http://localhost:9998/orders/1/refresh>;op=GET;rel=refresh
7 < Link: <
http://localhost:9998/orders/1/ship>;op=PUT;rel=ship
7 < Link: <
http://localhost:9998/orders/1/update>;op=PUT;rel=update
7 < Date: Wed, 10 Feb 2010 10:01:20 GMT
7 < server: grizzly/1.9.8
7 <
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 8 * Client out-bound request
8 > OPTIONS
http://localhost:9998/orders/1/ship
8 >
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 8 * Client in-bound response
8 < 200
8 < Content-Length: 669
8 < Allow: OPTIONS,PUT
8 < Date: Wed, 10 Feb 2010 10:01:20 GMT
8 < Content-Type: application/vnd.sun.wadl+xml
8 < server: grizzly/1.9.8
8 <
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="
http://wadl.dev.java.net/2009/02">
<doc xmlns:jersey="
http://jersey.dev.java.net/"
jersey:generatedBy="Jersey: 1.2-SNAPSHOT 02/09/2010 05:29 PM"/>
<resources base="
http://localhost:9998/">
<resource path="orders/1/ship">
<method name="PUT" id="ship">
<request>
<representation mediaType="application/xml"/>
</request>
<response>
<representation mediaType="application/xml"/>
</response>
</method>
</resource>
</resources>
</application>
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 9 * Client out-bound request
9 > PUT
http://localhost:9998/orders/1/ship
9 > Content-Type: application/xml
9 >
<?xml version="1.0" encoding="UTF-8" standalone="yes"?
><address><street>Main</street><city>Springfield</city></address>
Feb 10, 2010 11:01:20 AM
com.sun.jersey.api.client.filter.LoggingFilter log
INFO: 9 * Client in-bound response
9 < 200
9 < Link: <
http://localhost:9998/orders/1/refresh>;op=GET;rel=refresh
9 < Content-Length: 390
9 < Date: Wed, 10 Feb 2010 10:01:20 GMT
9 < Content-Type: application/xml
9 < server: grizzly/1.9.8
9 <
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<order>
<id>1</id>
<customer>
http://localhost:9998/customers/21</customer>
<shippingAddress>
http://localhost:9998/customers/21/address/1</
shippingAddress>
<orderItems>
<product>
http://localhost:9998/products/3345</product>
<quantity>1</quantity>
</orderItems>
<status>SHIPPED</status>
</order>