Hadoop в веб-приложении RESTful Java - конфликтующие шаблоны URI - PullRequest
2 голосов
/ 25 февраля 2012

У меня есть небольшое веб-приложение на Java, в котором я использую Jersey 1.12 и файл JAR Hadoop 1.0.0 (hadoop-core-1.0.0.jar).Когда я развертываю свое приложение на моем сервере JBoss 5.0, файл журнала записывает следующую ошибку:

SEVERE: Conflicting URI templates. The URI template / for root resource class   
org.apache.hadoop.hdfs.server.namenode.web.resources.NamenodeWebHdfsMethods and the URI  
template / transform to the same regular expression (/.*)?

Чтобы убедиться, что мой код не является проблемой, я создал новое веб-приложение, которое не содержит ничего, кромеJAR-файлы из Jersey и Hadoop вместе с небольшой заглушкой.Мой web.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"   
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-  class>
    <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
    <servlet-name>ServletAdaptor</servlet-name>
    <url-pattern>/mytest/*</url-pattern>
   </servlet-mapping>    
   <session-config>
    <session-timeout>
        30
    </session-timeout>
   </session-config>
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
</web-app>

Моя простая заглушка RESTful выглядит следующим образом:

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Path;

@Path("/mytest")
public class MyRest {

@Context
private UriInfo context;

  public MyRest() {
  }
}

В моем обычном приложении при удалении файлов JAR Hadoop (и кодакоторый использует Hadoop), все работает так, как я ожидал.Развертывание прошло успешно, а остальные службы RESTful работают.Я также попробовал JAR-файлы Hadoop 1.0.1, и у меня были те же проблемы с конфликтующим шаблоном URL в классе NamenodeWebHdfsMethods.Любые предложения или советы по решению этой проблемы будут с благодарностью.

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Я исправил проблему, добавив init-params, чтобы дать команду Jersey ServletContainer искать только ресурсы, которые я определил в определенном пакете (см. Ниже).

<servlet>
    <servlet-name>ServletAdaptor</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param> 
        <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> 
        <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value> 
    </init-param> 
    <init-param> 
        <param-name>com.sun.jersey.config.property.packages</param-name> 
        <param-value>org.test.myrest</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup>
</servlet>
0 голосов
/ 13 декабря 2012

У меня похожая проблема. Проблема была вызвана тем, что я изменил пакет классов REST. Когда сервер GlassFish запускается, он говорит, что нашел предыдущие классы. В журнале GlassFish v3 вы можете найти строку «ИНФО: Найдены корневые ресурсы:», и, вероятно, вы увидите дубликаты.

Теперь я пытаюсь очистить классы ресурсов.

...