Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用基本身份验证配置Camel CXF_Java_Cxf_Apache Camel - Fatal编程技术网

Java 如何使用基本身份验证配置Camel CXF

Java 如何使用基本身份验证配置Camel CXF,java,cxf,apache-camel,Java,Cxf,Apache Camel,我是Apache Camel和CXF的新手 我正在尝试创建一个路由,用于查询需要基本身份验证的远程WS,并指定Soap操作头 我可以使用camel-HTTP组件实现同样的功能,但camel-CXF也需要同样的功能 在JavaDSL中 有谁能指导我们修复相同的如果您想使用camel cxf组件来设置基本身份验证,您需要在CxfEndpoint上进行如下配置 CxfEndpoint cxfEndpoint = camelContext.getEndpoint(“cxf:xxx”); // set

我是Apache Camel和CXF的新手

我正在尝试创建一个路由,用于查询需要基本身份验证的远程WS,并指定Soap操作头

我可以使用camel-HTTP组件实现同样的功能,但camel-CXF也需要同样的功能 在JavaDSL中


有谁能指导我们修复相同的

如果您想使用camel cxf组件来设置基本身份验证,您需要在CxfEndpoint上进行如下配置

CxfEndpoint cxfEndpoint = camelContext.getEndpoint(“cxf:xxx”); 
// set the authentication information 
Map<String, Object> properties = new HashMap<String, Object>(); 

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); 
CxfEndpoint CxfEndpoint=camelContext.getEndpoint(“cxf:xxx”);
//设置身份验证信息
映射属性=新的HashMap();
org.apache.cxf.configuration.security.AuthorizationPolicy authPolicy=新的AuthorizationPolicy();
authPolicy.setUserName(用户名);
authPolicy.setPassword(密码);
properties.put(AuthorizationPolicy.class.getName(),authPolicy);
cxfEndpoint.setProperties(属性);
从(“xxx”)到(cxpoint);

在@Willem的帮助下,我们成功地实现了这一目标。身份验证凭据需要传递到路由生成器中的CXF端点,而不是处理器中。这是威廉在骆驼论坛上解释的:

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

因此,要解决此问题,请向管线生成器添加以下代码:

Map<String, Object> properties = new HashMap<String, Object>(); 

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); 
Map properties=newhashmap();
AuthorizationPolicy authPolicy=新的AuthorizationPolicy();
authPolicy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_BASIC);
authPolicy.setUserName(用户名);
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(属性);

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

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

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);
}

因此,如果您设置username,基本身份验证将按照其他答案中所示进行配置。

您只需创建一个POJO来调用服务,并将其用作路由中的bean。POJO本身可能包含f.e.a,它对响应表示感谢,您能否为我们提供一些示例代码,以实现相同的eg for http组件,我们有authMethod=Basic-->(“direct:routes”)。为了(“);我们可以为CXF WebClient EAH提供一个与上面类似的示例吗?您可以在CXF端点uri上设置username、password选项,就像”cxf://bean:myservice?username=user1&password=pass“在骆驼2.13.x中。