首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泽西服务+ PrettyFaces冲突

泽西服务+ PrettyFaces冲突
EN

Stack Overflow用户
提问于 2014-11-06 11:56:01
回答 1查看 1.1K关注 0票数 1

我的应用程序运行了一个RESTFul web服务。

代码语言:javascript
复制
<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还使用以下规则进行了一些URL重写(来自漂亮的config.xml配置文件)

代码语言:javascript
复制
<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/路径,但是这是行不通的。当从我的浏览器到达rest路径时,将引发以下异常:

代码语言:javascript
复制
    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)

读取异常时,我猜过滤器也适用于所有其他路径,而泽西岛似乎不喜欢它。我该如何解决这场冲突?

EN

回答 1

Stack Overflow用户

发布于 2014-11-10 07:05:28

如果您仔细查看异常,您将看到以下内容:

代码语言:javascript
复制
java.lang.AbstractMethodError:
 javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;

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

  • WAR中有Java,并将其部署到Java服务器上。您应该从WAR中删除API,或者将作用域更改为provided
  • 您的类路径上有多个版本的JAX,并且部署到一个普通的servlet容器中,比如Tomcat或Jetty。

我希望这能帮到你。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26778891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档