2012-02-24 85 views
2

我有一個小型Java Web應用程序,其中使用了Jersey 1.12和Hadoop 1.0.0 JAR文件(hadoop-core-1.0.0.jar)。當我部署我的應用我的JBoss 5.0服務器,日誌文件記錄了以下錯誤:RESTful Java Web應用程序中的Hadoop - 衝突URI模板

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 (/.*)? 

要確保我的代碼是沒有問題的,我已經創建了一個包含什麼,但新澤西州和新的Web應用程序Hadoop JAR文件以及一個小存根。我的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() { 
    } 
} 

在我的正常應用中,當我刪除了Hadoop的JAR文件(就是用Hadoop的代碼),一切都按我所期望的那樣工作。部署成功,剩餘的RESTful服務工作。我也嘗試了Hadoop 1.0.1 JAR文件,並且在NamenodeWebHdfsMethods類中的衝突URL模板中遇到了同樣的問題。任何建議或技巧解決這個問題將不勝感激。

回答

3

我已經通過添加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

我有一個類似的問題,但這並沒有解決我的問題。任何人都可以提出其他解決方案 – 2012-09-02 09:53:10

+0

發現了困難的方式。去挖掘源代碼。 我們可以像這樣創建服務器,明確指定我們想要的配置類: HttpServer server = HttpServerFactory.create(WSProperties.ADDRESS,new PackagesResourceConfig(「my.packages」)); 至於爲什麼在web.xml中指定它有問題,它仍然是一個謎。 – 2012-09-02 10:59:13

0

我有類似的問題。這個問題是由於我更改了REST類的包而產生的。 GlassFish服務器啓動時說已找到以前的類。在GlassFish v3的日誌中,您可以找到「INFO:找到的根資源類:」行,並且可能會看到重複。

現在,我正在尋求清理資源類。