【问题标题】:Unable to consume RestFul web service using jersey client无法使用球衣客户端使用 RestFul Web 服务
【发布时间】:2011-08-22 02:38:00
【问题描述】:

我的服务端代码是使用 Resteasy 实现的

@GET
@Path("/ad-details/{query}")
@Produces("application/json")
public String getAdDetails(@PathParam("query") String id)
{
    //Validator v =  ESAPI.encoder().encodeForHTML(id);
    //String id1 = ;
    //System.out.println(ESAPI.encoder().encodeForHTML(ESAPI.encoder().canonicalize(id1)));
    String adDetailsResult = "";
     System.out.println("reached Service");
    AdServiceProvider ad = new AdServiceProviderImpl();
    AdDetails details = ad.getAdDetailsById(Long.parseLong(id.trim()));
    adDetailsResult = gson.toJson(details);
    //System.out.println(adDetailsResult);
    //adDetailsResult = ESAPI.encoder().encodeForHTML(ESAPI.encoder().canonicalize(adDetailsResult));
    System.out.println(adDetailsResult);
    return adDetailsResult;


}

我使用此服务的客户端代码正在使用 jersey api 代码如下。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    System.out.println("reached servlet");
    response.setContentType("application/json");
    String adId = request.getParameter("adId");
    System.out.println(adId);
    Client client = Client.create();
    WebResource wr = client.resource("http://localhost:8080/com.pandora.services/service");
    String adDetailsResult = wr.path("ad-details").path(adId).get(String.class);

    PrintWriter out = response.getWriter();
    out.print(adDetailsResult);
}'`

但是当我拨打电话时,我收到以下错误

WARN org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher 解析请求失败。 java.lang.IllegalArgumentException:解析媒体类型'*时出错; q=.2' 在 com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:80) 在 com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:53) 在 javax.ws.rs.core.MediaType.valueOf(MediaType.java:173) 在 org.jboss.resteasy.util.MediaTypeHelper.parseHeader(MediaTypeHelper.java:204) 在 org.jboss.resteasy.plugins.server.servlet.ServletUtil.extractAccepts(ServletUtil.java:119) 在 org.jboss.resteasy.plugins.server.servlet.ServletUtil.extractHttpHeaders(ServletUtil.java:82) 在 org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:186) 在 org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) 在 org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 在 java.lang.Thread.run(未知来源) 引起:java.text.ParseException:预期的分隔符'/'而不是';' 在 com.sun.jersey.core.header.reader.HttpHeaderReader.nextSeparator(HttpHeaderReader.java:117) 在 com.sun.jersey.core.impl.provider.header.MediaTypeProvider.valueOf(MediaTypeProvider.java:91) 在 com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:78) ... 21 更多 2011 年 5 月 10 日上午 7:14:50 org.apache.catalina.core.StandardWrapperValve 调用 严重:Servlet Resteasy 的 Servlet.service() 引发异常 java.lang.NullPointerException 在 org.jboss.resteasy.plugins.server.servlet.HttpServletInputMessage.(HttpServletInputMessage.java:60) 在 org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.createHttpRequest(HttpServletDispatcher.java:71) 在 org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.createResteasyHttpRequest(HttpServletDispatcher.java:60) 在 org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:197) 在 org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55) 在 org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 在 java.lang.Thread.run(未知来源) 2011 年 5 月 10 日上午 7:14:50 org.apache.catalina.core.StandardWrapperValve 调用 严重:Servlet AdDetailsS​​ervlet 的 Servlet.service() 引发异常 com.sun.jersey.api.client.UniformInterfaceException: GET http://localhost:8080/com.pandora.services/service/ad-details/1 返回响应状态为 500 在 com.sun.jersey.api.client.WebResource.handle(WebResource.java:565) 在 com.sun.jersey.api.client.WebResource.get(WebResource.java:182) 在 com.pandora.client.servlets.AdDetailsS​​ervlet.doPost(AdDetailsS​​ervlet.java:48) 在 com.pandora.client.servlets.AdDetailsS​​ervlet.doGet(AdDetailsS​​ervlet.java:34) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 在 java.lang.Thread.run(Unknown Source)

我在哪里犯错了??

谢谢

【问题讨论】:

    标签: web-services rest jersey resteasy


    【解决方案1】:

    错误信息是这样的:

    Error parsing media type '*; q=.2'

    这让我觉得我应该寻找来自客户端请求的某种与媒体类型相关的标头的问题。也许您应该为响应指定 MIME 类型。看起来您希望服务返回 JSON,那么请求中的 specifying the Accept header 怎么样?

    Client client = Client.create();
    WebResource wr =
        client.resource("http://localhost:8080/com.pandora.services/service");
    String adDetailsResult = wr.path("ad-details").path(adId)
        .accept(MediaType.APPLICATION_JSON).get(String.class);
    

    【讨论】:

    • 在使用 RESTful Web 服务时,请求/响应的 HTTP 标头比任何堆栈跟踪都有用。响应头指示接受的内容类型;而 JSON 不是,因为它属于 *(其他所有人)。查看响应标头就足以了解如何与此资源进行交互。
    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多