2016-11-17 60 views
1

我有一個休息應用程序。我的目標是刪除IBM JAX-RS並使用RESTEasy JAX-RS實現。我正在使用WAS8,我只想使用它。無法爲REST API測試RESTEasy JAX-RS實現

對於禁用IBM JAX-RS,我已經刪除了IBMRestServlet和IBMRestFilter類,並在管理控制檯中將com.ibm.websphere.jaxrs.server.DisableIBMJAXREngine JVM prop設置爲tru。

對於的RESTEasy JAX-RS implementaion,在聚甲醛加RestEasy的-JAXRS依賴性和配置的servlet在web.xml

 <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>3.0.11.Final</version> 
      </dependency> 

Web.xml中

<context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
     <param-value>/</param-value> 
    </context-param> 

    <listener> 
    <listener-class> 
    org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap 
    </listener-class> 
    </listener> 

<servlet> 
<servlet-name>resteasy-servlet</servlet-name> 
<servlet-class> 
    org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
</servlet-class> 
    <init-param> 
<param-name>javax.ws.rs.Application</param-name> 
<param-value>com.application.RestApplication</param-value> 
</init-param> 

    </servlet> 

    <servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

A)首先我的「java。 lang.NoSuchMethodError:org/jboss/resteasy/specimpl/BuiltResponse.getHeaders()「異常。展望不同的答案,下面添加作爲依賴首先在pom.xml(雖然這並不作出任何意義,我)

 <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>jaxrs-api</artifactId> 
     <version>3.0.11.Final</version> 
     </dependency> 

B)現在在這之後,我得到java.lang.NoSuchMethodError:使用javax/WS /rs/ClientErrorException.validate(Ljavax/ws/rs/core/Response;Ljavax/ws/rs/core/Response$Status$Family;Ljavax/ws/rs/core/Response)

你能幫我解決嗎A和B例外。我只想在WAS8中嘗試。

另外,如何確保已完全禁用IBM JAX-RS,並且服務器僅選擇REST Easy jaxrs。

回答

3

您是否將您的Web模塊的類加載器設置爲使用「父最後」委派模式?這是在WebSphere中引入您自己的JAX-RS提供程序的必需部分。 「禁用」內置提供程序(通過您提到的系統屬性)阻止它初始化,但其類仍可通過類加載器看到。您需要配置您的Web應用程序的類加載器,以確保它首先加載本地類。

請注意,如果您擔心導致應用程序中的其他問題的「最後一個父母」設置,則可以將您的JAX-RS API和實現放入共享庫,將共享庫設置爲使用隔離類加載器,並將其與您的Web模塊相關聯。它更有針對性(並因此更安全),以獲得這種類型的加載。

+0

是的,我改變了它。我的應用程序類加載器順序是首先使用本地類加載器加載的類(父類最後一個)。 – user3766874

+0

仔細檢查您是在Web模塊上設置的,而不是應用程序 - 它們具有單獨的類加載器,它們必須單獨配置該設置。如果THAT沒有解決這個問題,並且您確定API和實現jar都在使用該設置的加載器中,那麼也許堆棧跟蹤將有助於縮小它的範圍 - 可能存在一些問題,意想不到的範圍。 – Jarid