我了解如何简单地将“标准”ws-addressing头添加到cxf客户端调用:
JaxWsProxyFactoryBean factory = ...;
factory.getFeatures().add(new WSAddressingFeature());
但是我不明白如何添加wsa引用参数,以便消息的肥皂剧头如下所示:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsa="http://www.w3.org
/2005/08 /addressing" xmlns:ns1=... >
<soap:Header>
<wsa:To>...</wsa:To>
<wsa:Action>...</wsa:Action>
<wsa:MessageID>...</wsa:MessageID>
<ns1:Country wsa:IsReferenceParameter="true">xx</ns1:Country>
<ns1:Brand wsa:IsReferenceParameter="true">x</ns1:Brand>
</soap:Header> ...
如何在cxf客户端调用中添加此标头?
你好,soilworker
这可以在AddressingProperties的帮助下完成。
factory.setServiceClass(...);
factory.setAddress(...);
factory.getFeatures().add(new WSAddressingFeature());
SomePortType client = (SomePortType) factory.create();
AddressingProperties maps = new AddressingPropertiesImpl();
EndpointReferenceType epr = new EndpointReferenceType();
//Then you can add referenceParameters to the epr
ReferenceParametersType ref = new ReferenceParametersType();
List<Object> paras = ref.getAny();
Country ctry = new Country("xx");
JAXBContext ctx = JAXBContext.newInstance(new Class[] {Country.class });
Marshaller marshaller = ctx.createMarshaller();
DOMResult res = new DOMResult();
marshaller.marshal(ctry, res);
Element elt = ((Document) res.getNode()).getDocumentElement();
any.add(elt);
epr.setReferenceParameters(ref);
maps.setTo(epr);
((BindingProvider)client).getRequestContext()
.put(JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES, maps);
参考:cxf doc about ws addr(我无法发布更多链接,叹气……)和http://cxf.547215.n5.nabble.com/setting-reference-parameters-in-WS-Addressing-header-td3257262.html
我不熟悉JAXB,我认为它们可能是向ref添加参数的更好方法。
我们正在Spring Boot中构建CXF客户端。用于针对SOAP服务器进行身份验证/授权的SAML令牌在每个请求中都从外部身份验证代理以自定义HTTP头提供给我们的应用程序。因此,我需要一种方法将提供的令牌添加到每个传出的CXF请求中。 我知道我可以为此注册一个定制的CXF拦截器。然而, 我该如何在Spring Boot中注册拦截器? 如果没有拦截器,还有什么选择? 目前,Spring配置如下所
我有一个wsdl,它定义了一个在调用Web服务时需要传递的肥皂头。 示例SOAP头是: CXF的wsdl2java生成了一个“身份验证信息”java类,我可以创建这个类并用用户名和密码填充它,但是我不知道在调用网络服务时如何将它传递给CXF客户端。
问题内容: 我有一个wsdl,它定义了在调用Web服务时需要传递的soap标头。 样本SOAP标头是: CXF的wsdl2java生成了一个“ AuthenticationInfo” java类,我可以使用用户名和密码来创建和填充该类,但是我不知道在调用Web服务时将其传递给CXF客户端的正确方法。 问题答案: 那么,最简单的方式做这将是创建的对象,并添加所有的参数或并添加所有的标头, 最后获取您
我试图使用Keycloak rest API向特定用户添加客户端级别的角色。我在邮递员尝试这个,但不断得到404找不到。 https://{keycloak url}/auth/admin/realms/acme/users/b62dc517-0dd8-41ad-9d97-f385e507e279/role-mappings/clients/6b1f23b4-6bec-4873-a991-4b7e
我正在使用Camel,并使用CXF从WSDL生成代码。我生成了一个客户端存根,实现如下所示: 如您所见,端口接受两个参数并返回响应,我想将其委托回我的骆驼路由。在 Camel 中实现这一点的最佳方法是什么?我已经定义了我的 CXF Enpoint,我只是在努力解决其中的 DSL 路由部分。我应该添加像此链接中那样的处理器吗?Apache Camel和Web服务 谢谢
在这两个webendpoint上-但是错误仍然存在。如果WS-Addressing没有设置为true,那么SOAPUI也会失败。