Застрял в реализации Restful (Jax-RS) - PullRequest
0 голосов
/ 14 ноября 2011

Код моего сервера: -

@ApplicationPath("/externalpartnerws")
public class ExternalPartnerApplication extends javax.ws.rs.core.Application {
    public Set<Class<?>> getClasses() {
        return  new HashSet<Class<?>>() { { add(ExternalPartnerApplicationResource.class); } };
  }
}

@Path(value="/retrievetier2")
public class ExternalPartnerApplicationResource {

  /**
   * public constructor according to JSR-3.1.2 specification.
   */
  public ExternalPartnerApplicationResource() {}

  @GET
  @Path("/bycountry/{distributorId}/{countryCd}")
  // type "text/plain"  
  @Produces("application/xml")
  public String retrieveTier2ByCountry(
  @PathParam("distributorId") String distributorId, 
  @PathParam("countryCd") String countryCd
  ) {
      if(distributorId == null && countryCd == null)
          return null;
      else //Moving logic from Controller to (Business) Model.
          return "<?xml version=\"1.0\" encoding=\"UTF-8\"?><retrieveTier2ByCountry/>";
  }

web.xml

<servlet>
    <description>JAX-RS Tools Generated - Do not modify</description>
    <servlet-name>RestServlet</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.ibm.drit.lib.extws.ExternalPartnerApplication
    </param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>RestServlet</servlet-name>
    <url-pattern>/retrievetier2/bycountry/*</url-pattern>
</servlet-mapping>

Клиент: - Вкл. Был 7.0 с RAD 8.0.3

RestClient restClient = new RestClient();
Resource resource = restClient.resource("http://localhost:9080/externalpartnerws/retrievetier2/bycountry/distributorId/2/countryCd/2");
resource.contentType(props.getProperty("text/plain"));
resource.accept(props.getProperty("application/xml"));
ClientResponse response = resource.get();
String responseXml = response.getEntity(String.class);   

Я новичок в Jax-RS и теперь в состоянии мертвой блокировки с небольшим кодом в Jax-RS.

Я получаю

The following error occurred during the invocation of the handlers chain: 404 - Not Found with message ''null'' while processing GET request sent to ......

Я делаю какую-то основную ошибку? Последние два дня я трачу на это. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

1 голос
/ 19 ноября 2011

Похоже, ваш путь или шаблон пути неверен. В приведенном вами примере вы отправляете запрос по следующему пути (относительно корня вашего приложения):

/bycountry/distributorId/2/countryCd/2
(т. е. всего 5 сегментов пути: bycountry, дистрибьютор ID, 2, countryCd, 2)

Однако шаблон на вашем ресурсе гласит:

/bycountry/{distributorId}/{countryCd}
(т.е. только 3 сегмента пути: bycountry, {distributorId}, {countryCd})

Это не соответствует - значит, вы получаете 404.

Либо вам нужно изменить URL-адрес, на который вы отправляете запрос, следующим образом:
/bycountry/2/2

Или вы должны изменить шаблон пути на вашем ресурсе следующим образом: /bycountry/distributorId/{distributorId}/countryCd/{countryCd}

Тогда это должно сработать.

...