Вызовите защищенный веб-сервис с политикой WS, используя Camel-CXF
Мы пытаемся вызвать защищенный веб-сервис с использованием компонента Camel CXf. WSDL имеет wsp:Policy, определенную в нем, и я могу успешно вызывать службу из soapUI, передавая имя пользователя / пароль, но сталкиваясь с множеством проблем, если я пытаюсь вызвать службу с использованием компонента Camel-Cxf или вызвать с использованием сгенерированной заглушки. Любая помощь приветствуется.
В WSDL определена следующая политика.
<wsp:Policy wsu:Id="WSHttpBinding_ReferenceLookupLists_policy">
<wsp:ExactlyOne>
<wsp:All>
<http:BasicAuthentication
xmlns:http="http://schemas.microsoft.com/ws/06/2004/policy/http"/>
<sp:TransportBinding xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy">
<wsp:Policy>
<sp:TransportToken>
<wsp:Policy>
<sp:HttpsToken RequireClientCertificate="false"/>
</wsp:Policy>
</sp:TransportToken>
<sp:AlgorithmSuite>
<wsp:Policy>
<sp:Basic256/>
</wsp:Policy>
</sp:AlgorithmSuite>
<sp:Layout>
<wsp:Policy>
<sp:Strict/>
</wsp:Policy>
</sp:Layout>
</wsp:Policy>
</sp:TransportBinding>
<wsaw:UsingAddressing/>
</wsp:All>
</wsp:ExactlyOne>
</wsp:Policy>
Конечная точка Cxf в файле проекта:
<camel-cxf:cxfEndpoint id="abclookupEndpoint"
wsdlURL="wsdl/abclookupLists.wsdl"
endpointName="tns:WSHttpBinding_abclookup"
serviceName="tns:abclookup"
address="http://abc.abc/2013/12/6/abclookup.svc"
xmlns:tns="http://abc.abc/2013/12/6/ServiceContracts/">
<camel-cxf:outInterceptors>
<ref component-id="abcOutInterceptor"/>
</camel-cxf:outInterceptors>
<camel-cxf:properties>
<entry key="dataFormat" value="PAYLOAD"/>
</camel-cxf:properties>
</camel-cxf:cxfEndpoint>
Класс Route Builder, который использует определенную выше конечную точку cxf @Override public void configure() throws Exception {
from("direct:retrieveData").routeId(getRouteId().concat("svc.refLookupList"))
.log(LoggingLevel.DEBUG, "Entered into direct:retrieveData route")
.setHeader("operationName", constant("GetCustomFieldDropdownList"))
.setHeader("SOAPAction",constant(getSoapActionHeader()))
.bean("soapRequestBean","constructRequest")
.to("cxf:bean:abclookupEndpoint?username=aaaaaaaa&password=bbbbbbbb")
.log(LoggingLevel.INFO, "Service Response : ${body}")
.end();
Попытался добавить AuthorizationPolicy, как показано ниже, но не помогло Свойства карты = new HashMap();
AuthorizationPolicy authPolicy = new AuthorizationPolicy();
authPolicy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_BASIC);
authPolicy.setUserName("aaaaaaaa");
authPolicy.setPassword("bbbbbbbb");
authPolicy.setAuthorization("true");
properties.put("org.apache.cxf.configuration.security.AuthorizationPolicy",authPolicy);
CxfEndpoint myCxfEp = (CxfEndpoint)getContext().getEndpoint("cxf:bean:abclookupEndpoint");
myCxfEp.setProperties(properties);*/
Сообщение об исключении в журналах при попытке вызвать serivce:
"No assertion builder for type http://schemas.microsoft.com/ws/06/2004/policy/http}BasicAuthentication registered. Exception in thread "main" org.apache.cxf.ws.policy.PolicyException: None of the policy alternatives"