Wildfly 上的 Tika-Parsers 部署问题

Posted

技术标签:

【中文标题】Wildfly 上的 Tika-Parsers 部署问题【英文标题】:Tika-Parsers deployment issue on Wildfly 【发布时间】:2016-03-28 15:28:44 【问题描述】:

作为 Web 应用程序的一部分,我需要解析不同传入文件的文本内容。 使用 tika-parsers 应该很简单,但是一旦我尝试部署我的 webapp 在 Wildfly 上(测试 V.8.2.1 和 V.10.0.0.RC4)我遇到了问题。

这是我在一个非常基本的 webapp 中的 maven 依赖项:

<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.11</version>

这是我在部署过程中遇到的错误(手动部署或使用 arquillian 进行测试):

Caused by: java.lang.Exception: "WFLYCTL0080: Failed services" => "jboss.deployment.unit.\"backend-test.war\".WeldStartService" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"backend-test.war\".WeldStartService: Failed to start service
    Caused by: org.jboss.weld.exceptions.DefinitionException: WELD-000071: Managed bean with a parameterized bean class must be @Dependent: class org.apache.cxf.jaxrs.provider.SourceProvider"

我认为存在依赖冲突,但不知道如何避免它。 bean.xml? jboss-部署-结构.xml?禁用任何 Wildfly 模块?

问候, 菲利普

【问题讨论】:

【参考方案1】:

如果有人还在寻找这个,你可以把这行添加到你的 pom.xml 中:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers</artifactId>
    <version>1.13</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.cxf</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

【讨论】:

这为我解决了这个问题(尽管我的依赖实际上是“org.apache.tika:tika-java7:1.22”)。我没有尝试过其他答案,因为这个看起来更简单。【参考方案2】:

除了 Tika 将一大堆有问题的依赖项以及大量非常不受欢迎的传递依赖项转储到您的运行时类路径之外,您还遇到了这个问题:

http://weld.cdi-spec.org/documentation/#4

https://issues.jboss.org/browse/CDI-377

基本上这是 CDI 1.1 中的一个不兼容问题,已在 CDI 1.2 中解决;在 Wildfly 中手动将 Weld 更新到 2.3.x 版本可能会完全解决这个问题。

除非进行手动升级,否则您可以通过声明包含以下内容的 META-INF/jboss-all.xml 文件来解决问题。假设你有一个战争,准确的路径是 webapp/META-INF/jboss-all.xml。

<jboss xmlns="urn:jboss:1.0">
    <weld xmlns="urn:jboss:weld:1.0" require-bean-descriptor="true"/>
</jboss>

并确保在您自己的需要 CDI 支持的模块中定义一个 WEB-INF/beans.xml 文件(再次:假设发生战争)。这迫使 Weld 只尝试配置包含 beans.xml 文件的模块,而 CXF 不会。

除此之外,我会真正研究依赖关系树,看看通过 Tika 引入了什么;例如,您会发现 javax.inject API 被放在编译范围内,因此与您的应用程序一起部署,这是您真正不想要的。

【讨论】:

谢谢!添加 jboss-all.xml 修复了 deploymen 组织! 啊!现在部署正在运行,tika 没有给我任何内容,例如pdf 或 office 文件。我认为它正在退回使用 EmptyParser... 我认为这是一个副作用,因为它显示的效果与我在 pom 中排除 xcf 依赖项时的效果相同。 @Philipp 很抱歉听到这个消息。但这是一个不同的问题。

以上是关于Wildfly 上的 Tika-Parsers 部署问题的主要内容,如果未能解决你的问题,请参考以下文章

Wildfly 9 上的部署失败

在Wildfly上的Startup bean中通过JMX进行AttributeNotFoundException

Wildfly上的Servlet部署-找不到页面

如何在调试模式下运行 wildfly,作为 Windows 上的服务?

带有独立 ActiveMQ 的 Wildfly 上的 ActiveMQ Artemis

WildFly 21 CLI 无法识别 Amazon Linux 2 上的现有文件路径