2011-01-12 4 views
1

POST 메서드를 사용하여 안정적인 웹 서비스를 실행하려고합니다. 여기 내 인터페이스의 관련 부분은 다음과 같습니다편안한 전화 MediaType의 잘못된 MediaType 형식 : "*; q = .2"

@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 - Not Found)이 발생했습니다 javax.ws.rs.WebApplicationException at org.apache.wink.server.internal.handlers org.apache.wink.server.handlers.RequestHandlersChain.handle에서 org.apache.wink.server.handlers.RequestHandlersChain.handle (RequestHandlersChain.java:26) 에서 .FindRootResourceHandler.handleRequest (FindRootResourceHandler.java:60) (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.RequestHandl ersChain.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. org.apache.wink.server.handlers.AbstractHandlersChain.run (AbstractHandlersChain.java:43) 에서 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) (javax.servlet.http.HttpServlet.service (HttpServlet.java:722) at org.apac) 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 $ (알 수없는 소스) at SocketProcessor.run Thread.run (알 수없는 소스) 2011 년 1 월 12 일 9:47:35 AM org.apache.wink.common.internal.providers.heade r.MediaTypeHeaderDelegate fromString 심각도 : MediaType에 대해 잘못된 MediaType 형식 : "; q = .2 " 2011 년 1 월 12 일 9:47:35 AM org.apache.wink.server.internal.RequestProcessor handleRequest 심각 : 처리되지 않은 예외 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) 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.inte rnal.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) at org.apache.wink.server.handlers.ResponseHandlersChain.handle (ResponseHandlersChain.java:26) at org.apache.wink.server.handlers.ResponseHandlersChain.handle (ResponseHandlersChain.handle. 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.ja va : 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. org.apache.wink.server.handlers.AbstractHandlersChain.doChain (AbstractHandlersChain.java:55) at org.apache.wink.server.handlers.AbstractHandlersChain. 실행 (AbstractHandlersChain.java:43) at org.apache.wink.server.internal.RequestProcessor.handleRequestWith outFaultBarrier (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. org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:164) 에서 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.ht tp11.Http11AprProcessor.process (Http11AprProcessor.java:281) at org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process (Http11AprProtocol.java:357) at org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor. (AprEndpoint.java:1671) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (알 수없는 소스) at java.util.concurrent.ThreadPoolExecutor $ Worker.run (알 수없는 소스) at java.lang.Thread. java.lang.ArrayIndexOutOfBoundsException : 1 org.apache.wink.common.internal.providers.header.MediaTypeHeaderDelegate.fromString (MediaTypeHeaderDelegate.java:54) 에서 ... 40 개

에 의한 실행 (알 수없는 소스)
+0

예외는 어디입니까? – Anders

+0

죄송합니다. 이유가 게시되지 않은 이유를 모르겠습니다. 나는 그것을 다시 추가했다. – BigWonder

+0

apache-wink 태그를 추가하십시오 – Tarlog

답변

1

클라이언트 코드에서 볼 수 있듯이 내용 유형을 주석 처리했습니다.
왜? 어떤 콘텐츠 유형을 보냅니 까?
어쨌든 올바른 미디어 유형은 */*;q=0.2

이어야합니다. Btw, 어떤 버전의 윙크를 사용합니까? 나는 최신 버전이 미디어 유형 실수에 대해 더 용서할 만하다고 생각한다.

+0

주석 처리를 제거했지만 동일한 오류가 있습니다. Wink의 버전은 0.1 – BigWonder

+0

입니다. 먼저, AFAIK Wink 1.1.2가 이미 릴리스되었습니다. 그래서 당신이 더 나은 업그레이 드하십시오. 두 번째는 나에게 이상하게 들린다. http 프록시를 넣고 결과를 게시 할 수 있습니까? – Tarlog

+0

여러분, 도와 주셔서 대단히 감사합니다. 지금 일하고있다. 문제는 오래된 윙크 버전이었습니다. 내가 1.1.2로 업 그레 이드하자마자 작동합니다. 다시 감사드립니다. – BigWonder

0

이 오류는 jar 파일 충돌로 인해 발생합니다. jetty.jar, jetty-util.jar가 삭제되었으며 jsr305.jar도 삭제되었으므로 REST API가 제대로 작동합니다. 희망이 도움이 될 수 있습니다.