【问题标题】:CXF: javax.xml.ws.soap.SOAPFaultException: An error occurred when verifying security for the messageCXF:javax.xml.ws.soap.SOAPFaultException:验证消息的安全性时出错
【发布时间】:2022-01-05 09:13:50
【问题描述】:

我正在使用以下 CXF 客户端调用 SOAP Web 服务:

QName serviceQName = new QName("Namespace", "ServiceName");
String urlString = "https:endpoint?wsdl";
QName portQName = new QName("Namespace", "PortName");

service = Service.create(serviceQName);
service.addPort(portQName, SOAPBinding.SOAP12HTTP_BINDING, urlString);
Dispatch<Source> sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.PAYLOAD);
BindingProvider bindingProvider = sourceDispatch;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, urlString);
bindingProvider.getRequestContext().put(TLSClientParameters.class.getName(), tlsParams);
Source result = sourceDispatch.invoke(new StreamSource(exchange.getIn().getBody(InputStream.class)));

我收到以下错误:

javax.xml.ws.soap.SOAPFaultException: An error occurred when verifying security for the message

【问题讨论】:

  • 服务期望什么安全凭证(例如,安全标头中的用户名令牌)?
  • 原来我必须设置一些 HTTP 标头,谢谢。

标签: java web-services soap cxf jax-ws


【解决方案1】:

解决方案是添加一个 SOAP 操作和一些 HTTP 标头,如下所示:

bindingProvider.getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, "myRequestAction");
Map<String, List<String>> requestHeaders = new HashMap<>();
requestHeaders.put("HeaderName", Arrays.asList("HeaderValue"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 2020-05-19
    • 2014-05-14
    • 2011-10-20
    • 2013-10-18
    • 2011-04-15
    • 1970-01-01
    • 2016-05-30
    相关资源
    最近更新 更多