2014-11-06 49 views
1

我的应用程序具有运行泽西服务+ PrettyFaces冲突的

<servlet> 
    <servlet-name>jersey-servlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>org.okkam.sameauthor.api</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>jersey-servlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

而且PrettyFaces RESTful Web服务做一些URL重写,以下规则(从漂亮-config.xml的配置文件)

<url-mapping id="home"> 
    <pattern value="/" /> 
    <view-id value="/index.xhtml" /> 
</url-mapping> 

<url-mapping id="demo"> 
    <pattern value="/demo" /> 
    <view-id value="/demo.xhtml" /> 
</url-mapping> 

<url-mapping id="notfound"> 
    <pattern value="/notfound" /> 
    <view-id value="/notfound.xhtml" /> 
</url-mapping> 

<url-mapping id="stop"> 
    <pattern value="/stop" /> 
    <view-id value="/stop.xhtml" /> 
</url-mapping> 

请注意,规则不适用于/rest/路径,但这不起作用。从我的浏览器到达其他路径以下异常被抛出时:

SEVERE: Servlet.service() for servlet [jersey-servlet] in context with path [/sameauthor] threw exception [Servlet execution threw an exception] with root cause 
java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder; 
    at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:662) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.ocpsoft.rewrite.servlet.RewriteFilter.doFilter(RewriteFilter.java:205) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

读例外,我猜过滤器也适用于所有其他路径和泽西似乎不喜欢它。我应该如何解决这个冲突?

回答

3

如果你有异常仔细看看,你会看到:

java.lang.AbstractMethodError: 
javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder; 

这看起来像一个类路径的问题。可能的原因是:

  • 你必须在你的WAR JAX-RS API,并且它部署到Java EE服务器。您应该从WAR中删除API或将范围更改为provided
  • 您的类路径上有多个JAX-RS API版本,并且正在部署到一个普通的servlet容器,如Tomcat或Jetty。

我希望这有助于。