Java 使用CXF 3.0.3+WSS4J在WebSphereApplicationServer8上使用SOAP ws-Security
我的应用程序需要使用一些SOAP ws-SerSecurity服务,并且在Tomcat中工作良好,但当我将其部署到8时,我得到了下一个场景: 案例1: 如果我只使用JaxWsProxyFactoryBean 我发现此异常无法加载扩展类org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.org.apache.cxf.bus.extension.ExtensionException:无法加载扩展类org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl。java:183在org.apache.cxf.bus.extension.extension.getClassObjectExtension.java:199在org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByTypeExtensionManagerImpl.java:144在org.apache.cxf.bus.extension.ExtensionManagerBus.ExtensionManagerBus.java:169在java:175位于org.apache.cxf.bus.extension.ExtensionManagerBus.ExtensionManagerBus.java:175位于org.apache.cxf.bus.createBusCXFBusFactory.java:40位于org.apache.cxf.bus.CXFBusFactory.createBusCXFBusFactory.java:36位于org.apache.cxf.bus.CXFBusFactory.createBusCXFBusFactory.java:32位于java:146位于org.apache.cxf.bus.spring.spring.SpringBusFactory.createbussspringbusfactory.java:122位于org.apache.cxf.bus.spring.SpringBusFactory.createbussspringbusfactory.java:94位于org.apache.cxf.bus.spring.SpringBusFactory.createbussspringbusfactory.java:83位于org.apache.cxf.BusFactory.getDefaultBusFactory.java:106位于org.apache.cxf.BusFactory.createThreadBusFactory.java:243位于org.apache.cxf.BusFactory.getThreadDefaultBusFactory.java:227位于org.apache.cxf.BusFactory.getThreadDefaultBusFactory.java:214位于org.apache.cxf.frontend.ClientProxyFactoryBean.configureObjectClientProxyFactoryBean.java:100位于org.apache.cxf.frontend.ClientProxyFactoryBean.createClientProxyFactoryBean.java:133位于org.apache.cxf.jaxws.JaxWsProxyFactoryBean.createJaxWsProxyFactoryBean.java:142 案例2: 如果我使用这个实现Java 使用CXF 3.0.3+WSS4J在WebSphereApplicationServer8上使用SOAP ws-Security,java,spring,cxf,websphere-8,wss4j,Java,Spring,Cxf,Websphere 8,Wss4j,我的应用程序需要使用一些SOAP ws-SerSecurity服务,并且在Tomcat中工作良好,但当我将其部署到8时,我得到了下一个场景: 案例1: 如果我只使用JaxWsProxyFactoryBean 我发现此异常无法加载扩展类org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.org.apache.cxf.bus.extension.ExtensionException:无法加载扩展类org.apache.cxf.ws.policy
Service service = new Service();
Cliente client= service.getClientePort();
Client clientecxf = ClientProxy.getClient(client);
Map<String, Object> outProps = new HashMap<String, Object>();
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER, "USER");
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordHandler.class.getName());
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
clientecxf.getOutInterceptors().add(wssOut);
我发现这个org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler与org.apache.cxf.frontend.ClientProxyjava.lang.ClassCastException不兼容:org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler与org.apache.cxf.frontend.ClientProxy.getClientClientProxy.java:128 atcom.protecion.hubDigital.integration.impl.consultasaldocsimpl.consultarSaldoCesantiasDetalladoConsultaSaldosImpl.java:199位于com.protecion.hubDigital.core.services.impl.saldoserviceimpl.java:76位于com.protecion.hubDigital.rest.controller.SaldoConsultaControlador.consultardossaldoconsultacontrolador.java:60位于sun.reflect.NativeMethodAccessorImpl.Invoke0 sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:60位于sun.reflect.DelegatingMethodAccessorImpl.invokeDelegatingMethodAccessorImpl.java:37位于java.lang.reflect.Method.invokeMethod.invokeMethod:611位于org.springframework.web.method.support.invokableHandlerMethod.invokeInvokableHandlerMethod.java:214位于org.springframework.web.method.support.invokableHandlerMethod.invokeForRequestInInvokableHandlerMethod.java:132位于org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeandHandleReservleInvocableHandlerMethod.java:104位于org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.InvokeHandleMethodRequestsMappingHandlerAdapter.java:749 atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternalRequestMappingHandlerAdapter.java:690位于org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handleAbstractHandlerMethodAdapter.java:83位于org.springframework.web.servlet.DispatcherServlet.doDispatchersDispatcherservlet.java:945位于org.springframework.web.servlet.DispatcherServlet.doServiceDispatcherServlet.java:876在org.springframework.web.servlet.processRequestFrameworkServlet.java:961在org.springframework.web.servlet.FrameworkServlet.doGetFrameworkServlet.java:852在javax.servlet.http.HttpServlet.serviceHttpServlet.java:575在java:837在javax.servlet.http.HttpServlet.serviceHttpServlet.java:668在com.ibm.ws.webcontainer.servlet.ServletWrapper.serviceServletWrapper.java:1214在com.ibm.ws.webcontainer.servlet.ServletWrapper.HandlerRequestServletWrapper.java:774在com.ibm.ws.webcontainer.servlet.ServletWrapper.HandlerRequestServletWrapper.java:456在com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.HandlerRequestServletWrapperImpl.java:178在com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTargetWebAppFilterChain.java:125在com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilterWebAppFilterChain.java:92
我也尝试了这篇文章中的建议,但不起作用
谢谢你的帮助
Service service = new Service();
Cliente client= service.getClientePort();
Client clientecxf = ClientProxy.getClient(client);
Map<String, Object> outProps = new HashMap<String, Object>();
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
outProps.put(WSHandlerConstants.USER, "USER");
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, ClientPasswordHandler.class.getName());
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);
clientecxf.getOutInterceptors().add(wssOut);