Попытка выполнить restful веб-сервис, используя метод POST. Вот соответствующая часть моего интерфейса:
@Path("/customers")
public interface CustomerResource {
@POST
@Consumes(MediaType.APPLICATION_XML)
public Response createCustomer(InputStream is);
.....
}
Реализация:
// Create customer
public Response createCustomer(InputStream is) {
logger.debug("In createCustomer");
Customer customer = readCustomer(is);
customer.setId(idCounter.incrementAndGet());
customerDB.put(customer.getId(), customer);
logger.debug("Created customer " + customer.getId());
logger.debug("Out createCustomer");
return Response.created(URI.create("/customers/"
+ customer.getId())).build();
}
Клиент звонит (соответствующая часть)
URL postUrl = new URL("http://localhost:8080/ShoppingApplication/rest/customers");
HttpURLConnection connection =
(HttpURLConnection) postUrl.openConnection();
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/xml");
OutputStream os = connection.getOutputStream();
os.write(newCustomer.getBytes());
os.flush();
Вот мой web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>My Shop</display-name>
<servlet>
<servlet-name>MyShopping</servlet-name>
<servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.restfully.shop.services.ShoppingApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MyShopping</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Когда я звоню, все, что я получаю, это огромное исключение, которое на самом деле говорит:
ИНФОРМАЦИЯ: WebApplicationException (404 - не найдено) произошла во время вызова цепочки обработчиков
javax.ws.rs.WebApplicationException
в org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest (FindRootResourceHandler.java:60)
в org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:26)
в org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:22)
в org.apache.wink.server.handlers.AbstractHandlersChain.doChain (AbstractHandlersChain.java:55)
в org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest (HeadMethodHandler.java:47)
в org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:26)
в org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:22)
в org.apache.wink.server.handlers.AbstractHandlersChain.doChain (AbstractHandlersChain.java:55)
в org.apache.wink.server.internal.handlers.OptionsMethodHandler.handleRequest (OptionsMethodHandler.java:42)
в org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:26)
в org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:22)
в org.apache.wink.server.handlers.AbstractHandlersChain.doChain (AbstractHandlersChain.java:55)
в org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest (SearchResultHandler.java:33)
в org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:26)
в org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:22)
в org.apache.wink.server.handlers.AbstractHandlersChain.doChain (AbstractHandlersChain.java:55)
в org.apache.wink.server.handlers.AbstractHandlersChain.run (AbstractHandlersChain.java:43)
в org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier (RequestProcessor.java:136)
в org.apache.wink.server.internal.RequestProcessor.handleRequest (RequestProcessor.java:117)
в org.apache.wink.server.internal.servlet.RestServlet.service (RestServlet.java:102)
на javax.servlet.http.HttpServlet.service (HttpServlet.java:722)
в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:304)
в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208)
в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:240)
в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:203)
в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:164)
в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:108)
в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:558)
в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118)
в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:379)
в org.apache.coyote.http11.Http11AprProcessor.process (Http11AprProcessor.java:281)
в org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process (Http11AprProtocol.java:357)
в org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run (AprEndpoint.java:1671)
в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (Неизвестный источник)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (неизвестный источник)
at java.lang.Thread.run (неизвестный источник)
12 января 2011 г. 9:47:35 утра org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate fromStringSEVERE: неправильный формат MediaType для MediaType: "; q = .2"
12 января 2011 г. 9:47:35 утра org.apache.wink.server.internal.RequestProcessor handleRequest
SEVERE: необработанное исключение
java.lang.IllegalArgumentException: неправильный формат MediaType для MediaType: "; q = .2"
на org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString (MediaTypeHeaderDelegate.java:67)
на org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString (MediaTypeHeaderDelegate.java:32)
в javax.ws.rs.core.MediaType.valueOf (MediaType.java:119)
в org.apache.wink.common.internal.providers.header.AcceptHeaderDelegate.fromString (AcceptHeaderDelegate.java:47)
в org.apache.wink.common.internal.providers.header.AcceptHeaderDelegate.fromString (AcceptHeaderDelegate.java:32)
на org.apache.wink.common.internal.http.Accept.valueOf (Accept.java:139)
в org.apache.wink.server.internal.contexts.HttpHeadersImpl.getAcceptHeader (HttpHeadersImpl.java:115)
в org.apache.wink.server.internal.contexts.HttpHeadersImpl.getAcceptableMediaTypes (HttpHeadersImpl.java:84)
в org.apache.wink.server.internal.handlers.PopulateResponseMediaTypeHandler.handleResponse (PopulateResponseMediaTypeHandler.java:82)
в org.apache.wink.server.handlers.AbstractHandler.handleResponse (AbstractHandler.java:38)
в org.apache.wink.server.handlers.ResponseHandlersChain.handle (ResponseHandlersChain.java:26)
в org.apache.wink.server.handlers.ResponseHandlersChain.handle (ResponseHandlersChain.java:22)
в org.apache.wink.server.handlers.AbstractHandlersChain.doChain (AbstractHandlersChain.java:55)
в org.apache.wink.server.handlers.AbstractHandler.handleResponse (AbstractHandler.java:39)
в org.apache.wink.server.handlers.ResponseHandlersChain.handle (ResponseHandlersChain.java:26)
в org.apache.wink.server.handlers.ResponseHandlersChain.handle (ResponseHandlersChain.java:22)
в org.apache.wink.server.handlers.AbstractHandlersChain.doChain (AbstractHandlersChain.java:55)
в org.apache.wink.server.handlers.AbstractHandler.handleResponse (AbstractHandler.java:39)
в org.apache.wink.server.handlers.ResponseHandlersChain.handle (ResponseHandlersChain.java:26)
в org.apache.wink.server.handlers.ResponseHandlersChain.handle (ResponseHandlersChain.java:22)
в org.apache.wink.server.handlers.AbstractHandlersChain.doChain (AbstractHandlersChain.java:55)
в org.apache.wink.server.handlers.AbstractHandlersChain.run (AbstractHandlersChain.java:43)
в org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier (RequestProcessor.java:145)
в org.apache.wink.server.internal.RequestProcessor.handleRequest (RequestProcessor.java:117)
в org.apache.wink.server.internal.servlet.RestServlet.service (RestServlet.java:102)
на javax.servlet.http.HttpServlet.service (HttpServlet.java:722)
в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:304)
в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208)
в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:240)
в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:203)
в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:164)
в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:108)
в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:558)
в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118)
в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:379)
в org.apache.coyote.http11.Http11AprProcessor.process (Http11AprProcessor.java:281)
в org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process (Http11AprProtocol.java:357)
в org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run (AprEndpoint.java:1671)в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (Неизвестный источник)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (неизвестный источник)
at java.lang.Thread.run (неизвестный источник)
Вызывается: java.lang.ArrayIndexOutOfBoundsException: 1
на org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString (MediaTypeHeaderDelegate.java:54)
... еще 40