Web servicer调用异常org.apache.cxf.binding.soap.SoapFault * are not understood.

在调用WebService服务端时出现Caused by: org.apache.cxf.binding.soap.SoapFault: 
MustUnderstand headers: [{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security] are not understood.异常信息,调用方式如下:

客户端代码:

...
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    // 注册WebService接口
factory.setServiceClass(IRemoteAccessor.class);
// 设置WebService地址 
factory.setAddress(webServiceUrl);
//***注入拦截器,用于加密安全验证信息************************
Map outProps = new HashMap();    
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);    
outProps.put(WSHandlerConstants.USER, userName);   
outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,  WsClinetAuthHandler.class.getName());    
ArrayList list = new ArrayList();    
list.add(new SAAJOutInterceptor());    
list.add(new WSS4JOutInterceptor(outProps));    
factory.getOutInterceptors().addAll(list);
IRemoteAccessor remoteAccessor = (IRemoteAccessor)factory.create();
Client proxy = ClientProxy.getClient(remoteAccessor);
   HTTPConduit conduit = (HTTPConduit)proxy.getConduit();
   TLSClientParameters tlsParams = conduit.getTlsClientParameters();
   if (tlsParams == null){
    tlsParams = new TLSClientParameters();
   }
   tlsParams.setTrustManagers(getTrustManagers(keyStorePath,keyStorePassword,keyStoreType));
   tlsParams.setDisableCNCheck(true);
   tlsParams.setSecureSocketProtocol("SSL");
   conduit.setTlsClientParameters(tlsParams);
   String outXML = "";
   outXML = remoteAccessor.invoke(inXml);
   return outXML;

通过检查发现问题是WebService服务端没有配置用户身份认证导致的,将client代码中的用户身份认证去掉接口调用OK

你可能感兴趣的:(J2EE技术)