CXF在AIX+Weblogic环境下出现包冲突问题

项目中碰到一个问题,折腾了半天才终于解决,记录一下:

环境:AIX操作系统

    JDK1.7(IBM)

    Weblogic(10.3.3)

    Informix

项目架构是Struts2.3.15.1+Spring3.2.3.RELEASE+Hibernate4.2.3.Final,一个需求需要用到WebService,采用的是CXF的实现方式,本地启动正常运行,在测试环境上用CXF做客户端测试通过,但是CXF服务端却提示异常,异常如下:

java.lang.VerifyError: JVMVRFY013 class loading constraint violated; class=com/sun/xml/bind/v2/runtime/unmarshaller/UnmarshallerImpl

, method=unmarshal(Ljavax/xml/stream/XMLEventReader;)Ljava/lang/Object;, pc=0
        at java.lang.J9VMInternals.verifyImpl(Native Method)
        at java.lang.J9VMInternals.verify(J9VMInternals.java:93)
        at java.lang.J9VMInternals.initialize(J9VMInternals.java:170)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.createUnmarshaller(JAXBContextImpl.java:780)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.createUnmarshaller(JAXBContextImpl.java:142)
        at org.apache.cxf.jaxb.io.DataReaderImpl.createUnmarshaller(DataReaderImpl.java:109)
        at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:160)
        at org.apache.cxf.binding.soap.interceptor.RPCInInterceptor.handleMessage(RPCInInterceptor.java:178)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
        at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
        at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
        at com.cib.oams.base.servlet.AbstractAppSessionFilter.doHttpFilter(AbstractAppSessionFilter.java:332)
        at com.cib.oams.base.servlet.HttpFilter.doFilter(HttpFilter.java:46)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.doIt(WebAppServletContext.java:3684)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2268)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)

        at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

网上找了很多资料,最终确认为包冲突,根据提示Ljavax/xml/stream/XMLEventReader,认定为XMLEventReader的引用异常,原因是因为JDK1.7已经集成了该实现,但是使用CXF的Maven依赖还是会引入stax-api这个包,本机没问题是因为本机用的是jetty,没有添加weblogic.xml这个配置文件,该配置文件主要用于让weblogic优先使用本项目自身的实现,由于优先使用了stax-api的实现导致调用IBM的JDK异常。通过maven排除(exclusion)掉后依然报这个错!继续寻找关联包,最终找到poi里引用了geronimo-stax-api_1.0_spec,同样的Ljavax/xml/stream/XMLEventReader,果断排除,重新部署后服务端通过测试~ 

希望能给大家一些思路上到帮助!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值