2015-12-22 161 views
2

作为Web应用程序的一部分,我需要解析不同传入文件的文本内容。 这应该是使用蒂卡的解析器相当简单,但只要我尝试在Wildfly(测试V.8.2.1和V.10.0.0.RC4)部署web应用程序我我 遇到问题。Tika-Parsers在Wildfly上的部署问题

这是一个非常基本的web应用程序我的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"}} 

我假设有是一种依赖性冲突,但对如何避免它却一无所知。 beans.xml? JBoss的部署,structure.xml?禁用任何wildfly模块?

问候, 菲利普

回答

1

除此之外提卡转储可疑依赖的一个巨大的桩非常不受欢迎的传递依赖的又一山到运行时类路径的事实,你正在运行到这个问题:

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> 

,并确保定义一个WEB-INF/beans.xml的文件(再次:假设战争中的)在自己的模块需要支持CDI。这迫使Weld只尝试配置具有beans.xml文件的模块作为它们的一部分,CXF不会。

除了所有我会真正调查依赖关系树并查看什么是通过Tika拉入的;例如,你会发现javax.inject API被放在编译范围内,因此被部署在你的应用程序中,这是你真正不想要的东西。

+0

谢谢!添加jboss-all.xml修复了部署人员的组织! – Philipp

+0

啊!现在部署工作正常,tika没有为我提供任何内容。 pdf或办公室文件。我认为这是回落使用EmptyParser ...我认为这是一种副作用,因为它显示了与我在我的POM中排除xcf依赖关系时的效果相同。 – Philipp

+0

@Philipp很抱歉听到这些。但这是一个不同的问题。 – Gimby