Java CXF 2.7.x Woodstox通过Maven的兼容性
在CXF的文档中,据说2.7.x版本要求在类路径中提供不在4.2.0版本下的Woodstox JAR 有人能建议Woodstox使用Maven依赖项与CXF一起工作吗? 主要问题是,当我尝试使用cxf的客户机时,出现了一个异常“无法创建安全的XMLInputFactory”。根据不同的论坛(),可以使用“org.apache.cxf.stax.allowInsecureParser”系统属性来解决问题,但这似乎不是一个好方法。所以maven依赖关系是一条路要走Java CXF 2.7.x Woodstox通过Maven的兼容性,java,web-services,cxf,woodstox,Java,Web Services,Cxf,Woodstox,在CXF的文档中,据说2.7.x版本要求在类路径中提供不在4.2.0版本下的Woodstox JAR 有人能建议Woodstox使用Maven依赖项与CXF一起工作吗? 主要问题是,当我尝试使用cxf的客户机时,出现了一个异常“无法创建安全的XMLInputFactory”。根据不同的论坛(),可以使用“org.apache.cxf.stax.allowInsecureParser”系统属性来解决问题,但这似乎不是一个好方法。所以maven依赖关系是一条路要走 提前感谢。现在我唯一能解决这个问题
提前感谢。现在我唯一能解决这个问题的方法是在spring的上下文中添加这样的行:
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject">
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.lang.System" />
<property name="targetMethod" value="getProperties" />
</bean>
</property>
<property name="targetMethod" value="putAll" />
<property name="arguments">
<util:properties>
<prop key="org.apache.cxf.stax.allowInsecureParser">true</prop>
</util:properties>
</property>
</bean>
真的
好了,我终于找到了解决办法。首先我要感谢斯塔克斯曼的帮助
我的环境是:
Weblogic 11g,CXF 2.7.5
问题是WLS已经包含了STAXAPI和xml解析器的实现,这就是为什么应用程序在使用CXF时看不到Woodstox解析器的原因
以下是pom.xml文件:
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
</dependency>
org.apache.cxf
cxfapi
org.apache.cxf
cxf rt前端jaxws
org.apache.cxf
cxf rt传输http
主要部分——位于参考资料/META-INF/中的weblogic-application.xml:
<prefer-application-packages>
<package-name>com.ctc.wstx.*</package-name>
<package-name>org.apache.*</package-name>
</prefer-application-packages>
com.ctc.wstx*
org.apache*
请注意,如果这样做,可能会出现“NoClassDefinition”错误。如果是这样,请添加包含缺少类的maven依赖项
希望这对某人有所帮助。这对我来说很有用,但我不喜欢应用程序包impl:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
<exclusions>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>${cxf.version}</version>
</dependency>
<!-- Jetty is needed if you're using the CXFServlet -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>${cxf.version}</version>
</dependency>
org.apache.cxf
cxf rt前端jaxws
${cxf.version}
com.sun.xml.bind
jaxb impl
com.sun.xml.bind
jaxb impl
2.2.2
org.apache.cxf
cxf rt传输http
${cxf.version}
org.apache.cxf
cxf rt传输http jetty
${cxf.version}
为什么不更新到Woodstox 4.2.0?它具有与4.0和4.1相同的组和工件ID。是的,我尝试添加woodstox core asl 4.2.0 maven依赖项和woodstox stax2 api,但无论如何都会引发“无法创建安全的XMLInputFactory”异常。是否可能以某种方式将多个Stax实现作为依赖项包括在内(比如BEA的参考实现,或者Sun SJSXP显式添加)?嗯,我认为这是可能的。您知道如何排除这些依赖项,或者如何设置首选项(Woodstox)在.pom文件中实现cxf?这实际上是特定于cxf的。但您可以显式地排除pom中包含的其他内容;首先需要查看它们是否加入(使用“mvn dependency:tree”)。问题是,如果CXF使用SPI样式的stax impl检测,则未指定选项之间的优先顺序。但它可能有特定的覆盖。我的朋友,这很漂亮。Thanx很多:),我认为它不是weblogic的选项10@Neron,我认为您的WLS中仍有一些包阻止了配置。请参考这篇文章。我已经添加了你在解决方案中给出的必要内容,但没有帮助。这应该没有那么痛苦:(很遗憾,但对于CXF来说,除了基本示例之外,要使某些东西正常工作总是非常困难的。一些人建议排除“javax.xml.*”包(使用“首选应用程序包”).你试过这个吗?这个方法也在上面的帖子中给出。谢谢Dmitry,我也有同样的问题,现在它已经解决了@2787184提到的链接是broken@AzhaguSurya:似乎已被社区删除。