I encountered the following exception (snippet):
java.lang.NullPointerException
at
org.restlet.resource.ServerResource.getAvailableVariants(ServerResource.java:681)
at
org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:556)
at
org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:254)
at org.restlet.resource.ServerResource.handle(ServerResource.java:930)
...
while trying to implement the following "post" method (snippet):
@Post("xml:xml")
public Representation postXml() throws IOException { ...}
Apparently, the following call in ServerResource::getAvailableVariants():
List<Metadata> allMetadata = getMetadataService()
.getAllMetadata(annotationInfo.getValue());
returns null when the annotation is "xml:xml", but not just "xml". I didn't
see anything in the bug database, but just wanted to make sure before reporting
it. [The javadoc for the Post annotation actually has an example of
"@Post("xml:xml") which I
originally assumed was a convention for
"@Post("<consumes>:<produces>")".]
The other, related questions I have are:
Q1 - What is the @Post annotation's value supposed to mean? I originally
assumed was a convention for "@Post("<consumes>")", but it's acting like
@Post("<produces>")[1]. If so, then it seems like I can't implement the
following functionality via annotations only:
@Post("html:html|xml|json")
That is, I'd like to:
- submit "form" data (e.g. application/x-www-form-urlencoded) from a client
that accepts html, xml, or json
- "route" the call to the method that can process form data
- return xml|json|html based on a provided query parameter (e.g.
<resource_url>?format=json) (which overrides any accept header preference)
Q2 - is the JAX-RS support (which provides parallel functionality) ready for
general use? I remember seeing a note somewhere that it wasn't ready (at least
in release 2.0 M4). If it's ready then I'm assuming I could do something like
(I'm sure I don't have the right annotation values, but you get the gist):
@Post
@Consumes("html")
@Produces("xml|json|html")
public Representation
methodThatAcceptsFormDataButCanReturnHtmlOrJsonOrXmlBasedOnQueryParameter() {
... }
Regards,
Bob
Notes:
[1] I have the following code (snippet)
@Post("xml")
public Representation postXml() {...}
@Post("html")
public Representation postHtml() {...}
If I post form data via a browser (which has an accept header that prefers HTML
over XML) then postHtml() gets called. If I post form data via curl (which has
accept header with "*/*") then postXml() gets called (because xml shows up
first in the supported variants list and no format preference was stated).
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2396102