Web services 用于xml安全的ClassCastException(TransformC14NexConclusive)

Web services 用于xml安全的ClassCastException(TransformC14NexConclusive),web-services,security,cxf,jboss5.x,Web Services,Security,Cxf,Jboss5.x,我已经用cxf为我的应用程序(JDK1.6.24)实现了一个web服务,它在JBoss5.1.0上运行。 一段时间后,web服务无法工作,因为它引发了以下异常 java.lang.ClassCastException: org.apache.xml.security.transforms.implementations.TransformC14NExclusive cannot be cast to org.apache.xml.security.transforms.TransformSpi

我已经用cxf为我的应用程序(JDK1.6.24)实现了一个web服务,它在JBoss5.1.0上运行。 一段时间后,web服务无法工作,因为它引发了以下异常

java.lang.ClassCastException: org.apache.xml.security.transforms.implementations.TransformC14NExclusive cannot be cast to org.apache.xml.security.transforms.TransformSpi
        at org.apache.xml.security.transforms.Transform.getTransformSpi(Unknown Source)
        at org.apache.xml.security.transforms.Transform.<init>(Unknown Source)
        at org.apache.xml.security.transforms.Transform.getInstance(Unknown Source)
        at org.apache.xml.security.transforms.Transform.getInstance(Unknown Source)
        at org.apache.xml.security.transforms.Transforms.addTransform(Unknown Source)
        at org.apache.ws.security.message.WSSecSignature.addReferencesToSign(WSSecSignature.java:599)
        at org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:774)
        at org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:65)
        at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:206)
        at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.access$200(WSS4JOutInterceptor.java:50)
        at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:257)
        at org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:134)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:516)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)
        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
        at $Proxy566.getEntityRepresentatives(Unknown Source)
        at mycodeClient()
        at mycodeMethodCall()
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
        at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
        at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
        at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
        at sun.reflect.GeneratedMethodAccessor325.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
        at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
        at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_1509825954.invoke(InvocationContextInterceptor_z_fillMethod_1509825954.java)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
        at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
        at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_1509825954.invoke(InvocationContextInterceptor_z_setup_1509825954.java)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
        at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
        at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
        at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
        at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
        at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
java.lang.ClassCastException:org.apache.xml.security.transforms.implementations.TransformC14NexConclusive不能强制转换为org.apache.xml.security.transforms.TransformSpi
位于org.apache.xml.security.transforms.Transform.getTransferorMSPI(未知源)
位于org.apache.xml.security.transforms.Transform。(未知来源)
位于org.apache.xml.security.transforms.Transform.getInstance(未知源)
位于org.apache.xml.security.transforms.Transform.getInstance(未知源)
位于org.apache.xml.security.transforms.transforms.addTransform(未知源)
位于org.apache.ws.security.message.WSSecSignature.addReferencesToSign(WSSecSignature.java:599)
位于org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:774)
位于org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:65)
位于org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:206)
位于org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor.access$200(WSS4JOutInterceptor.java:50)
位于org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:257)
位于org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor$WSS4JOutInterceptorInternal.handleMessage(WSS4JOutInterceptor.java:134)
位于org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:516)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:313)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:265)
位于org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
位于org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
位于$Proxy566.GetEntityRepresentives(未知来源)
在mycodeClient()上
在mycodeMethodCall()上
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
在org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69)
位于org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73)
位于org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59)
位于sun.reflect.GeneratedMethodAccessor325.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
位于org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72)
在org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_1509825954.invoke(InvocationContextInterceptor_z_fillMethod_1509825954.java)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
位于org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88)
位于org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_1509825954.invoke(InvocationContextInterceptor_z_setup_1509825954.java)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
位于org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
位于org.jboss.ejb3.entity.TransactionScopeDentityManagerAcceptor.invoke(TransactionScopeDentityManagerAcceptor.java:56)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
位于org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47)
位于org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
位于org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
我使用的解决方法是从jboss中删除tmp、数据和工作文件夹。
之后,它可以正常工作,直到很久以后再次抛出此错误。

最有可能导致异常的原因是您得到了由多个类加载器加载的同一个类

你必须检查你如何包装你的申请

JBoss有一些CXF JAR,它们在默认情况下对应用程序可见。 如果您还将CXF JAR打包到应用程序中,那么您必须完全理解JBoss类加载规则以及如何调整它们