【问题标题】:Dropwizard Application crashed by AbstractJAXBProviderDropwizard 应用程序被 AbstractJAXBProvider 崩溃
【发布时间】:2016-03-12 05:52:35
【问题描述】:

我有一个使用Dropwizard 和 Gradle 作为构建系统实现的服务器应用程序。现在我想集成Apache Mahout 以进行一些推荐系统操作。

添加 Mahout 依赖并尝试运行后,出现异常。

我的初始依赖项看起来像

dependencies {
    compile 'io.dropwizard:dropwizard-core:0.9.1'
    compile 'io.dropwizard:dropwizard-jdbi:0.9.1'
    compile 'mysql:mysql-connector-java:5.1.37'
    compile 'redis.clients:jedis:2.8.0'
    compile 'com.google.guava:guava:18.0'
    compile 'joda-time:joda-time:2.9.1'
    compile 'org.apache.commons:commons-math3:3.4.1'
}

为了做一些基本的推荐系统工作,我集成了依赖项

compile 'org.apache.mahout:mahout-mr:0.11.1'

当我现在运行应用程序时,我得到一个 NoClassDefFoundException:

WARN  [2015-12-07 15:03:09,696] org.glassfish.jersey.internal.Errors: 
The following warnings have been detected: WARNING: HK2 service reification 
failed for [com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider] 
with an exception:
MultiException stack 1 of 2
java.lang.NoClassDefFoundError: javax/mail/internet/ParseException

所以我尝试将这些东西作为额外的依赖项通过

compile 'com.sun.mail:javax.mail:1.5.4'

再次运行应用程序,我得到一个不同的异常:

WARN  [2015-12-07 15:05:02,161] org.glassfish.jersey.internal.Errors: The 
following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 2
java.lang.NullPointerException at 
com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.setConfiguration(AbstractJAXBProvider.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)

导致异常的代码来自Jersey:

@Context
public void setConfiguration(FeaturesAndProperties fp) {
    formattedOutput = fp.getFeature(FeaturesAndProperties.FEATURE_FORMATTED); // << Crash here
    xmlRootElementProcessing = fp.getFeature(FeaturesAndProperties.FEATURE_XMLROOTELEMENT_PROCESSING);
}

所以看起来这个特性在这里是空的,我们不能用它做任何事情。任何人都知道发生了什么,或者我该如何管理?

【问题讨论】:

    标签: java jersey mahout dropwizard mahout-recommender


    【解决方案1】:

    问题是 / 是 Dropwizard 附带了 Jersey 依赖项(在我的情况下 org.glassfish.jersey 在 2.22.x 中),而 Apache Mahout 附带了不同的 Jersey 依赖项(在我的情况下 com.sun.jersey 在 1.9 )。

    因此,排除 Mahout Jersey 依赖项就可以了。就我而言,这是由

    完成的
    compile('org.apache.mahout:mahout-integration:0.11.1') {
        exclude group: 'com.sun.jersey'
    }
    

    【讨论】:

      【解决方案2】:

      您正在使用的依赖项很可能具有与您的模块不兼容的依赖项。

      如果你使用的是 maven,请使用mvn dependency:tree 弄清楚。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        相关资源
        最近更新 更多