警告:找不到提供程序com.sun.xml.internal.bind.v2.ContextFactory

blo*_*p3r 5 java jaxb jersey glassfish-3

我已经在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'
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

(编辑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)
Run Code Online (Sandbox Code Playgroud)

这是我的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>
Run Code Online (Sandbox Code Playgroud)

我的课看起来像这样:

@Path("/rest")
public class MyClass {

    @GET 
    @Path("/{id}/results")
    @Produces("application/json")
    public String getResults(@Context HttpContext hc, @PathParam("id")) {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用Majorra 2.1.20Glassfish 2.1.2.2PrimeFaces 3.4.1Jersey 1.17作为插件.Eclipse Juno如果这影响任何事情,就要发展.

编辑

这并不妨碍我在网络服务方面处于工作状态.但每次我在Glassfish上重新发布内容时,错误都会显示出来.

如下面的答案中所述,根据JIRA错误JERSEY-709,这应该已在1.7版中修复.但是我在1.17版本上非常好,而且我还是得到了这个.

我还在堆栈跟踪中添加了警告.如果这有助于确定问题!

搜索网络:我在这里找到了同样未解决的问题

编辑2

如下所述,更新我OAuthClient.jar的确解决了第一个error.我还是得到了WARNING: Provider com.sun.xml.internal.bind.v2.ContextFactory not found.

编辑3 - 尝试的解决方案

尝试更新JAXB后,我认为这将成为这个问题的主角.这并没有带来任何成功.同样的警告.当我删除泽西位时,web.xml这个警告停止显示(只是为了确认这确实是启动问题).

Bar*_*rge 10

在另一个上下文中:使用Maven的独立Java App

在pom.xml中,使用以下行定义了jaxb:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

项目编译成功,但在运行时,我收到了相同的异常(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>
Run Code Online (Sandbox Code Playgroud)


blo*_*p3r 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