我已通过Jersey
在JSF应用中集成了一些网络服务。一切正常,即使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)
击> <击> 撞击>
(编辑2:上面现已解决)
和这个警告:
...
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
开发。
这并不妨碍我让所有关于webservices的工作正常。但每次我在Glassfish上重新发布内容时,都会出现错误。
如下面的答案中所述,根据JIRA bug JERSEY-709,这应该已在1.7版中修复。但是我在1.17版本上非常好,而且我还是得到了这个。
我还在堆栈跟踪中添加了警告。如果这有助于确定问题!
搜索网络:我找到了The same unresolved issue here
如下所述,更新我的OAuthClient.jar
确实解决了第一个error
。我仍然得到WARNING: Provider com.sun.xml.internal.bind.v2.ContextFactory not found
。
在我认为会成为this question的领导者之后尝试更新JAXB。这并没有带来任何成功。同样的警告。删除web.xml
中的泽西位时,此警告会停止显示(只是为了确认这确实是在启动问题)。
答案 0 :(得分:5)
在另一个上下文中:使用Maven的独立Java App
在pom.xml中,使用以下行定义了jaxb:
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.1</version>
</dependency>
项目编译成功,但在运行时,我收到了相同的异常 (java.lang.ClassNotFoundException:com.sun.xml.bind.v2.ContextFactory)
在jaxb-api依赖
之前添加这些行解决了问题<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.1.2</version>
</dependency>
答案 1 :(得分:1)
升级到Jersey 1.18时,此错误已消失。
请参阅https://java.net/jira/browse/JERSEY-1932
要将Glassfish升级至Jersey 1.18,请参阅:https://jersey.java.net/nonav/documentation/1.18/glassfish.html
答案 2 :(得分:0)
根据JERSEY-709,这应该已在v1.7中修复。
答案 3 :(得分:0)
M8,我也遇到了这个:
NetBeans 7.2
Glassfish 3.1.2.2 which have jersey 1.11, and jersey-oauth 1.11.
但它可以用于:
NetBeans 7.3
Glassfish 3.1.2.2 which have jersey 1.11 (I didn't modify jars in glassfish/module folder)
jersey 1.13 and jersey-oauth 1.13 (which is packed in war)
然后异常不再存在。
我仍然不太确定它是如何解决的,但我希望这可以帮到你。