1

POST メソッドを使用して、安らかな 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>

私が電話をかけると、巨大な例外だけが戻ってきますが、魔女は実際には次のように言っています: INFO: org.apache.wink.server.internal. org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) の handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:60) 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 org.apache.wink.server の .apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)。org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55) の handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) 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) at org.apache.wink.server org.apache.wink.server.handlers.RequestHandlersChain の .handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26)。org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:55) でハンドル (RequestHandlersChain.java:22) 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) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304) ) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) で、org.apache.catalina.core.StandardWrapperValve で。org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203) の invoke(StandardWrapperValve.java:240) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) の org.apache org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java) で .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108) :118) org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:281) で org.apache.coyote.http11 で org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379) で。 Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1671) at java.util.2011 年 1 月 12 日 9:47:35 AM org の java.util.concurrent.ThreadPoolExecutor$Worker.run(不明なソース) .apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate fromString SEVERE: MediaType の MediaType 形式が正しくありません:"; q=.2" 2011 年 1 月 12 日 9:47:35 AM org.apache.wink.server.internal.RequestProcessor handleRequest SEVERE: 未処理の例外 java.lang.IllegalArgumentException: MediaType の 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) で 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) 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:

4

2 に答える 2

1

クライアント コードを見ると、コンテンツ タイプがコメント アウトされています。
なんで?送信するコンテンツの種類は何ですか?
とにかく正しいメディアタイプは*/*;q=0.2

ところで、どのバージョンの Wink を使用していますか? メディアの種類の間違いについては、最新版の方が寛容だと思います。

于 2011-01-12T17:53:09.320 に答える
0

このエラーは、jar ファイルの競合が原因です。jetty.jar、jetty-util.jar を削除し、jsr305.jar も削除しました。REST API は問題なく動作します。これがあなたを助けることを願っています。

于 2013-10-23T08:20:26.347 に答える