Невозможно использовать веб-сервис RestFul с помощью клиента джерси - PullRequest
1 голос
/ 10 мая 2011

Мой сервисный код реализован с использованием 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: Ошибка при синтаксическом анализе типа носителя '*; д = 0,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) at 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 10 мая 2011 г. 7:14:50 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service () для сервлета Resteasy бросил исключение 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) at java.lang.Thread.run (неизвестный источник) 10 мая 2011 г. 7:14:50 AM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service () для сервлета AdDetailsServlet сгенерировал исключение 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.AdDetailsServlet.doPost (AdDetailsServlet.java:48) на com.pandora.client.servlets.AdDetailsServlet.doGet (AdDetailsServlet.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) at java.lang.Thread.run (неизвестный источник)

где я совершаю ошибку ??

Спасибо

1 Ответ

4 голосов
/ 10 мая 2011

Сообщение об ошибке таково:

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

Что заставляет меня думать, что я должен искать проблемы с каким-либо заголовком, связанным с типом носителязапроса от клиента.Возможно, вам следует указать тип MIME для ответа.Похоже, вы ожидаете, что служба вернет JSON, так как насчет , указывающего Accept заголовок в запросе?

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