2016-10-14 41 views
2

我一直在用球衣和Java建立了我自己的REST API。今天,它停止了工作,雖然一位也在工作的朋友推動了他的改變。他沒有改變依賴方面的任何東西,但他確實添加了我們的主要API類創建的控制器。現在,每當我試圖達成一個資源Tomcat服務器拋出一個錯誤:創建我自己的REST API拋出的servlet執行異常

exception 

javax.servlet.ServletException: Servlet execution threw an exception 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
root cause 

java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder; 
    javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119) 
    com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.ja 

我們相信的時候就開始他補充說jsoup依賴後。

編輯: 我編輯我的依賴和web.xml,現在我只拿到404未找到。

這是我的依賴構成了我的pom.xml

<dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-client</artifactId> 
      <version>2.23.2</version> 
     </dependency>  
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet-core</artifactId> 
      <version>2.23.2</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.codehaus.jettison</groupId> 
      <artifactId>jettison</artifactId> 
      <version>1.3.8</version> 
     </dependency> 
     <dependency> 
     <groupId>org.jsoup</groupId> 
      <artifactId>jsoup</artifactId> 
      <version>1.9.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.twitter4j</groupId> 
      <artifactId>twitter4j-core</artifactId> 
      <version>[4.0,)</version> 
     </dependency> 
     <dependency> 
      <groupId>org.facebook4j</groupId> 
      <artifactId>facebook4j-core</artifactId> 
      <version>[2.4,)</version> 
     </dependency> 
    </dependencies> 

這是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
    <display-name>api</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 



    <servlet> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey Web Application</servlet-name> 
     <url-pattern>/api/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

編輯 如果我試圖達到:http://localhost:8080/api-mashup-api/api/v1/foobar

@Path("/v1") 
public class API { 
private Controller controller; 

public API(){ 
    controller = new Controller(); 
} 


/** 
* Prints to the screen if we are in /v1/foobar 
* 
* @return 
*/ 
@GET 
@Path("/foobar") 
@Produces(MediaType.TEXT_HTML) 
public String print2() { 
    return "Please specify what resource you need."; 
} 

我只是得到404

+0

請分享代碼 –

+0

分享代碼和更多信息 – Nivesh

+0

'現在每當我嘗試訪問資源':您的資源如何配置?你試圖達到什麼樣的URI?你用'controller'來表示什麼? – ujulu

回答

0

1)你有一個AbstractMethodError例外,這是當應用程序試圖調用一個抽象方法拋出。
uriUriBuilder一個抽象方法,所以你需要一個這樣的實現。

您應該使用JAX-RS 2.0澤西2 *實現JAX-RS 2.0,幷包含uri方法的實現。

2)通過查看您的堆棧跟蹤它明確規定,您使用兩個版本的澤西1 & 2這是不可能的,因此類加載器拿起錯URIBuilder類。

堆棧跟蹤:

com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669) 

在組com.sun.jersey澤西依賴關係是所有澤西版本1版本澤西2使用組org.glassfish.jersey

+0

正如你可以在我的編輯中看到的那樣,我已經修復了這個問題,現在我只得到了404。我可能會補充說我們以前使用過澤西1.x,但是昨天更改爲2.23.2並且它工作正常。 – stackerlow

+0

是的,我可以看到,但您的更改尚未反映出來。與您的項目中的球衣1罐有一些聯繫。需要做一些清理工作,刪除球衣1罐,如果存在從maven下載它的位置。否則,請創建一個新項目並複製粘貼您的代碼庫。 –

1

也許您的問題所造成的錯誤球衣,容器的servlet這可能會導致錯誤的uribuilder是拾取

https://jersey.java.net/documentation/latest/modules-and-dependencies.html#server-jdk

球衣,容器的servlet =>新澤西核心的Servlet 3.X實現

jersey-container-servlet-core => Jersey核心Servlet 2。X實現

變化:

<dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet-core</artifactId> 
      <version>2.23.2</version> 
      <scope>provided</scope> 
     </dependency> 

<dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>2.23.2</version> 
      <scope>provided</scope> 
     </dependency> 

另請參閱https://jersey.java.net/documentation/latest/modules-and-dependencies.html#dependencies找出哪些相關性您需要根據提供Glassfish和其他的Servlet(非JAX-RS集成)容器

相關問題