我已经在一个 JSF 应用程序中集成了一些 web 服务Jersey
。一切正常,甚至 OAuth 标识也正常工作。但!启动我的网络服务器时,我总是收到此错误:
INFO: Scanning for root resource and provider classes in the packages:
com.mysite.webService
INFO: Root resource classes found:
class com.mysite.webService.Accounts
INFO: No provider classes found.
INFO: Initiating Jersey application, version 'Jersey: 1.17 01/17/2013 03:31 PM'
SEVERE: The provider class, class com.sun.jersey.oauth.server.OAuthProviderInjectionProvider, could not be instantiated. Processing will continue but the class will not be utilized
java.lang.RuntimeException: No OAuthProvider implementation found in the list of providers.
at com.sun.jersey.oauth.server.OAuthProviderInjectionProvider.<init>(OAuthProviderInjectionProvider.java:71)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
(edit2:上面现在解决了)
这个警告:
...
WARNING: Provider com.sun.xml.internal.bind.v2.ContextFactory not found
javax.xml.bind.JAXBException: Provider com.sun.xml.internal.bind.v2.ContextFactory not found
- with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory not found by com.sun.jersey.glassfish.v3.osgi.jersey-gf-server [157]]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:148)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:361)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:446)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:409)
at com.sun.jersey.server.impl.wadl.WadlApplicationContextImpl.<init>(WadlApplicationContextImpl.java:95)
这是我的web.xml
相关条目:
<servlet>
<servlet-name>Jersey Web Application</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>my.site.webService</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
我的课程看起来像这样:
@Path("/rest")
public class MyClass {
@GET
@Path("/{id}/results")
@Produces("application/json")
public String getResults(@Context HttpContext hc, @PathParam("id")) {
//...
}
}
我正在使用Majorra 2.1.20
和Glassfish 2.1.2.2
作为PrimeFaces 3.4.1
插件Jersey 1.17
。Eclipse Juno
如果这会影响任何事情,请继续发展。
编辑
这并不妨碍我在 web 服务方面一切正常。但每次我在 Glassfish 上重新发布某些内容时,都会出现错误。
正如下面的答案中提到的,这应该已根据JIRA bug JERSEY-709在版本 1.7 中修复。但我在 v. 1.17 上做得很好,我仍然得到这个。
我还添加了一个警告,我正在堆栈跟踪中。如果这可以帮助确定问题!
在网上搜索:我在这里发现了同样的未解决问题
编辑 2
如下所述,更新我的OAuthClient.jar
确实解决了第一个error
. 我仍然得到WARNING: Provider com.sun.xml.internal.bind.v2.ContextFactory not found
.
编辑 3 - 尝试的解决方案
在我认为会成为这个问题的线索之后尝试更新 JAXB 。这并没有带来任何成功。同样的警告。当删除我的此警告中的 Jersey 位时,web.xml
此警告停止显示(只是为了确认这确实引发了问题)。