The question isn't whether its OK to POST with an empty body. The question
is whether its correct Provider semantics to POST with an empty body. I feel
that the Provider interface implies that there should at least be a root XML
element. The Spec/Javadocs are kind of moot on this point though. I'm not
fundamentally opposed to changing this assumption, but I think thats why it
is the way it is...
- Dan
On 7/2/07, Conrad O'Dea <[EMAIL PROTECTED]> wrote:
Hi,
if a client attempts to send a POST with an empty body to a RESTful
service, the server throws the exception below. This can be easily
reproduced in the restful_dispatch sample by changing
InputStream in = url.openStream();
to
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("PUT");
InputStream in = conn.getInputStream();
I am guessing that this is not intentional.
"Note that it is possible to use POST even without supplying data in
an HTTP message body." -- from
http://www.w3.org/2001/tag/doc/whenToUseGet.html
I've created CXF-758 for it.
thanks
Conrad
[java] Jul 2, 2007 3:33:12 PM
org.apache.cxf.phase.PhaseInterceptorChain doIntercept
[java] INFO: Interceptor has thrown exception, unwinding now
[java] org.apache.cxf.interceptor.Fault: Could not parse the XML
stream.
[java] at
org.apache.cxf.databinding.source.XMLStreamDataReader.read(
XMLStreamDataReader.java:96)
[java] at
org.apache.cxf.databinding.source.XMLStreamDataReader.read(
XMLStreamDataReader.java:86)
[java] at
org.apache.cxf.databinding.source.XMLStreamDataReader.read(
XMLStreamDataReader.java:48)
[java] at
org.apache.cxf.jaxws.interceptors.ProviderInDatabindingInterceptor.handleMessage
(ProviderInDatabindingInterceptor.java:103)
[java] at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
PhaseInterceptorChain.java:206)
[java] at
org.apache.cxf.transport.ChainInitiationObserver.onMessage(
ChainInitiationObserver.java:67)
[java] at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(
JettyHTTPDestination.java:253)
[java] at
org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(
JettyHTTPDestination.java:213)
[java] at
org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(
JettyHTTPHandler.java:54)
[java] at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
[java] at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
[java] at
org.mortbay.jetty.handler.ContextHandlerCollection.handle(
ContextHandlerCollection.java:211)
[java] at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
[java] at org.mortbay.jetty.Server.handle(Server.java:281)
[java] at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
[java] at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(
HttpConnection.java:821)
[java] at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java
:513)
[java] at
org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:208)
[java] at
org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
[java] at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java
:368)
[java] at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java
:442)
[java] Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected
EOF in prolog
[java] at [row,col {unknown-source}]: [1,0]
[java] at
com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:661)
[java] at
com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2134)
[java] at
com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java
:2040)
[java] at
com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
[java] at
org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:663)
[java] at org.apache.cxf.staxutils.StaxUtils.read(StaxUtils.java
:518)
[java] at
org.apache.cxf.databinding.source.XMLStreamDataReader.read(
XMLStreamDataReader.java:93)
[java] ... 20 more
--
Dan Diephouse
Envoi Solutions
http://envoisolutions.com | http://netzooid.com/blog