静态调用 MediaType 的 MediaType 格式错误:“*” q=.2”

发布于 2024-10-11 12:13:19 字数 9955 浏览 6 评论 0原文

尝试使用 POST 方法执行 Restful Web 服务。这是我的界面的相关部分:

@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(来源未知) 在 java.lang.Thread.run(来源未知) 2011 年 1 月 12 日上午 9:47:35 org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate fromString 严重:MediaType 的 MediaType 格式错误:“; q=.2” 2011 年 1 月 12 日上午 9:47:35 org.apache.wink.server.internal.RequestProcessor 处理请求 严重:未处理的异常 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(来源未知) 在 java.lang.Thread.run(来源未知) 引起原因:java.lang.ArrayIndexOutOfBoundsException:1 在 org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate.java:54) ... 40 更多

Trying to execute restful web service using POST method. Here is the relevant part of my interface:

@Path("/customers")
public interface CustomerResource {
 @POST
 @Consumes(MediaType.APPLICATION_XML)
 public Response createCustomer(InputStream is);
        .....
}

The implementation:

 // 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();
 }

The client makes a call (relevant part)

  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();

Here is my 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>

When I make a call all I have back is huge exception witch is actually says:
INFO: WebApplicationException (404 - Not Found) occured during the handlers chain invocation
javax.ws.rs.WebApplicationException
at org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:60)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)
at org.apache.wink.server.internal.handlers.HeadMethodHandler.handleRequest(HeadMethodHandler.java:47)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)
at org.apache.wink.server.internal.handlers.OptionsMethodHandler.handleRequest(OptionsMethodHandler.java:42)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)
at org.apache.wink.server.internal.handlers.SearchResultHandler.handleRequest(SearchResultHandler.java:33)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)
at org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)
at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:43)
at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:136)
at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:117)
at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:102)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:281)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1671)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Jan 12, 2011 9:47:35 AM org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate fromString
SEVERE: Wrong MediaType format for MediaType:"; q=.2"
Jan 12, 2011 9:47:35 AM org.apache.wink.server.internal.RequestProcessor handleRequest
SEVERE: Unhandled exception
java.lang.IllegalArgumentException: Wrong MediaType format for MediaType:"
; q=.2"
at org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate.java:67)
at org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate.java:32)
at javax.ws.rs.core.MediaType.valueOf(MediaType.java:119)
at org.apache.wink.common.internal.providers.header.AcceptHeaderDelegate.fromString(AcceptHeaderDelegate.java:47)
at org.apache.wink.common.internal.providers.header.AcceptHeaderDelegate.fromString(AcceptHeaderDelegate.java:32)
at org.apache.wink.common.internal.http.Accept.valueOf(Accept.java:139)
at org.apache.wink.server.internal.contexts.HttpHeadersImpl.getAcceptHeader(HttpHeadersImpl.java:115)
at org.apache.wink.server.internal.contexts.HttpHeadersImpl.getAcceptableMediaTypes(HttpHeadersImpl.java:84)
at org.apache.wink.server.internal.handlers.PopulateResponseMediaTypeHandler.handleResponse(PopulateResponseMediaTypeHandler.java:82)
at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:38)
at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)
at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)
at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55)
at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:43)
at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:145)
at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:117)
at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:102)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:281)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1671)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString(MediaTypeHeaderDelegate.java:54)
... 40 more

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

呆° 2024-10-18 12:13:19

正如我在您的客户端代码中看到的,您注释掉了内容类型。
为什么?您发送什么类型的内容?
无论如何,正确的媒体类型应该是 */*;q=0.2

顺便说一句,您使用什么版本的 Wink?我认为最新版本对于媒体类型错误更可以原谅。

As I see in your client code, you commented out the content type.
Why? What content type do you send?
Anyway correct media type should be */*;q=0.2

Btw, what version of Wink do you use? I think the latest version is more forgivable about media types mistakes.

绻影浮沉 2024-10-18 12:13:19

这个错误是由于jar文件冲突引起的。我删除了jetty.jar,jetty-util.jar,还删除了jsr305.jar,REST API工作正常。
希望这可以帮助你。

This error is caused by the jar file conflict.I deleted jetty.jar,jetty-util.jar and also deleted jsr305.jar,the REST API just work fine.
Hope this can help you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文