如何使用基本身份validation配置Camel CXF

我是Apache Camel和CXF的新手,

我正在尝试创建一个查询远程WS的路由,该路由需要基本身份validation并指定Soap Action标头。

我能够使用camel HTTP组件实现相同的function,但我需要在java DSL中使用相同的驼峰CXF

任何人都可以指导我们修复相同的问题

如果要使用camel-cxf组件来设置基本身份validation,则需要对CxfEndpoint进行一些配置,就像这样。

CxfEndpoint cxfEndpoint = camelContext.getEndpoint(“cxf:xxx”); // set the authentication information Map properties = new HashMap(); org.apache.cxf.configuration.security.AuthorizationPolicy authPolicy = new AuthorizationPolicy(); authPolicy.setUserName(username); authPolicy.setPassword(password); properties.put(AuthorizationPolicy.class.getName(), authPolicy); cxfEndpoint.setProperties(properties); from(“xxx”).to(cxfEndpoint); 

在@Willem的帮助下,能够使这个工作。 身份validation凭据需要传递到Route Builder中的CXF端点,而不是传递到处理器中。 这是Williem在Camel论坛上所解释的:

如果在处理器中设置cxfEndpoint属性,则它是运行时的设置。 由于在camel上下文期间创建了CxfProducer,因此启动路径时,cxfEndpoint的属性>未更新。

因此,要解决此问题,请将以下代码添加到Route Builder:

 Map properties = new HashMap(); AuthorizationPolicy authPolicy = new AuthorizationPolicy(); authPolicy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_BASIC); authPolicy.setUserName(USERNAME); authPolicy.setPassword(PWD); authPolicy.setAuthorization("true"); //properties.put(AuthorizationPolicy.class.getName(), authPolicy); properties.put("org.apache.cxf.configuration.security.AuthorizationPolicy", authPolicy); CxfEndpoint myCxfEp = (CxfEndpoint)getContext().getEndpoint("cxf://"); myCxfEp.setProperties(properties); 

此外,在Apache的版本2.12.3中,Camel引入了用于基本身份validation的用户名和密码选项。

在camel-cxf的当前版本中,直接在CxfEndpoint上设置用户名和密码就足够了:

 cxfEndpoint.setUsername("xyz"); csfEndpoint.setPassword("verySecure"); 

我只是查看了CxfEndpoint的代码,发现:

 // setup the basic authentication property if (ObjectHelper.isNotEmpty(username)) { AuthorizationPolicy authPolicy = new AuthorizationPolicy(); authPolicy.setUserName(username); authPolicy.setPassword(password); factoryBean.getProperties().put(AuthorizationPolicy.class.getName(), authPolicy); } 

因此,如果您设置了用户名,则将配置基本身份validation,如其他答案所示。