17.4. 端点选项


CXF 端点使用 URI 语法进行配置:

cxf:beanId:address
Copy to Clipboard Toggle word wrap

使用以下路径和查询参数:

17.4.1. 路径参数(2 参数)

Expand
名称描述默认类型

beanId (common)

查找现有的配置的 CxfEndpoint。必须使用 bean: 作为前缀。

 

字符串

地址 (服务)

服务发布地址。

 

字符串

17.4.2. 查询参数(35 参数)

Expand
名称描述默认类型

dataFormat (common)

CXF 端点支持的数据类型消息。

Enum 值:

  • PAYLOAD
  • RAW
  • MESSAGE
  • CXF_MESSAGE
  • POJO

POJO

DataFormat

wrapStyle (common)

WSDL 风格,它描述了在 SOAP 正文中如何表示参数。如果值为 false,则 CXF 将选择 document-literal unwrapped 样式,如果值为 true,则 CXF 将选择文档嵌套样式。

 

布尔值

bridgeErrorHandler (consumer)

允许将消费者桥接到 Camel 路由错误处理程序,这意味着当消费者试图选择传入消息或类似信息时发生异常,现在将作为消息处理并由路由 Error Handler 处理。默认情况下,使用者将使用 org.apache.camel.spi.ExceptionHandler 来处理例外情况,该处理程序将被记录在 WARN 或 ERROR 级别,并忽略。

false

布尔值

exceptionHandler (消费者)

要让使用者使用自定义例外处理程序:请注意,如果启用了 bridgeErrorHandler 选项,则此选项不在使用。默认情况下,使用者将处理异常,其记录在 WARN 或 ERROR 级别中,并忽略。

 

ExceptionHandler

ExchangePattern (消费者)

在消费者创建交换时设置交换模式。

Enum 值:

  • 仅限
  • InOut
  • InOptionalOut
 

ExchangePattern

cookieHandler (producer)

配置 Cookie 处理程序,以维护 HTTP 会话。

 

CookieHandler

defaultOperationName (producer)

此选项将设置默认 operationName,它将由调用远程服务的 CxfProducer 使用。

 

字符串

defaultOperationNamespace (producer)

此选项将设置默认 operationNamespace,它将由调用远程服务的 CxfProducer 使用。

 

字符串

hostnameVerifier (producer)

要使用的主机名验证器。使用 # 表示法引用 registry 中的 HostnameVerifier。

 

HostnameVerifier

lazyStartProducer (producer)

制作者是否应启动 lazy (在第一个消息中)。通过启动 lazy,您可以使用此选项来允许 CamelContext 和路由在制作者启动期间启动,并导致路由启动失败。通过将这个启动延迟到延迟,那么可以通过 Camel 的路由错误处理程序路由消息期间,可以处理启动失败。请注意,在处理第一个消息时,创建并启动制作者可能需要稍等时间,并延长处理的总处理时间。

false

布尔值

sslContextParameters (producer)

Camel SSL 设置参考。使用 # 表示法引用 SSL 上下文。

 

SSLContextParameters

包装 (生成)

CXF 端点制作者将调用的种类。

false

布尔值

同步 (生成(高级)

设置是否应严格使用同步处理。

false

布尔值

allowStreaming (高级)

这个选项控制在 PAYLOAD 模式下运行 CXF 组件时,将 DOM 解析传入的消息到 DOM Elements,或者将有效负载保留为 javax.xml.transform.Source 对象,该对象在某些情况下允许流。

 

布尔值

总线 (高级)

使用自定义配置的 CXF 总线。

 

总线

continuationTimeout (高级)

这个选项用于设置 CXF continuation 超时,在 CXF 服务器使用 Jetty 或 Servlet 传输时,默认可在 CxfConsumer 中使用它。

30000

long

cxfBinding (高级)

使用自定义 CxfBinding 控制 Camel 消息和 CXF 消息之间的绑定。

 

CxfBinding

cxfConfigurer (高级)

这个选项可以应用 org.apache.camel.component.cxf.CxfEndpointConfigurer 的实现,它支持以编程方式配置 CXF 端点。用户可通过实施 CxfEndpointConfigurer 的 configure{ServerClient} 方法来配置 CXF 服务器和客户端。

 

CxfConfigurer

defaultBus (高级)

当 CXF 端点自行创建总线时,将设置默认总线。

false

布尔值

headerFilterStrategy (高级)

使用自定义 HeaderFilterStrategy 过滤标题到 Camel 消息或从 Camel 消息过滤。

 

HeaderFilterStrategy

mergeProtocolHeaders (高级)

是否合并协议标头。如果启用,则在 Camel 和 CXF 之间传播标头会变得更加一致且类似。如需了解更多详细信息,请参阅 CAMEL-6393。

false

布尔值

mtomEnabled (高级)

启用 MTOM (attachments)。这需要使用 POJO 或 PAYLOAD 数据格式模式。

false

布尔值

属性 (高级)

要使用映射中的键/值对设置额外的 CXF 选项。例如,要在 SOAP 故障中打开 stacktraces,属性.faultStackTraceEnabled=true。

 

map

skipPayloadMessagePartCheck (高级)

设置是否应禁用 SOAP 消息验证。

false

布尔值

loggingFeatureEnabled (logging)

这个选项启用 CXF Logging 功能,它将入站和出站 SOAP 消息写入日志中。

false

布尔值

loggingSizeLimit (logging)

为限制在启用了日志记录功能时,日志记录器将输出的字节数,-1 代表没有限制。

49152

int

skipFaultLogging (logging)

这个选项控制 PhaseInterceptorChain 是否跳过记录它捕获的信息。

false

布尔值

密码 (安全)

这个选项用于为 CXF 客户端设置密码的基本身份验证信息。

 

字符串

用户名 (安全)

这个选项用于为 CXF 客户端设置 username 的基本身份验证信息。

 

字符串

bindingId (service)

要使用的服务模型的 bindingId。

 

字符串

PortName (service)

此服务实施的端点名称,它映射到 wsdl:portname。在 ns:PORT_NAME 格式中,其中 ns 是在这个范围内有效的命名空间前缀。

 

字符串

publishedEndpointUrl (service)

此选项可覆盖从 WSDL 中发布的 endpointUrl,该DL 可通过服务地址 url 和 wsd 进行访问。

 

字符串

serviceClass (service)

SEI (Service Endpoint Interface)类的类名称,它可能具有 JSR181 注解。

 

serviceName (service)

此服务实施的服务名称,它映射到 wsdl:servicename。

 

字符串

wsdlURL (service)

WSDL 的位置。可以在类路径、文件系统或远程托管上。

 

字符串

serviceNameportNameQNames,因此如果您为其提供 {namespace} 前缀,如上例中所示。

17.4.3. 数据格式的描述

在 Apache Camel 中,Camel CXF 组件是将路由与 Web 服务集成的关键。您可以使用 Camel CXF 组件创建 CXF 端点,该端点可通过以下任一方式使用:

  • consumer - (在路由开始时)代表一个 Web 服务实例,它与路由集成。注入路由的有效负载类型取决于端点的 dataFormat 选项的值。
  • producer - (路由中的其他点)代表 WS 客户端代理,它将当前的交换对象转换为远程 Web 服务上的操作调用。当前交换的格式必须与端点的 dataFormat 设置匹配。
Expand
DataFormat描述

POJO

POJO (旧 Java 对象)是目标服务器上调用的方法的 Java 参数。支持协议和逻辑 JAX-WS 处理程序。

PAYLOAD

应用 CXF 端点中的消息配置后,PAYLOAD 是消息有效负载( soap:body的内容)。仅支持协议 JAX-WS 处理程序。不支持逻辑 JAX-WS 处理程序。

RAW

RAW 模式提供从传输层接收的原始消息流。如果您使用这种类型的数据格式,则无法触动或更改流,某些 CXF 拦截器会被删除,因此您无法在 camel-cxf 消费者后看到任何 soap 标头。不支持 JAX-WS 处理程序。

CXF_MESSAGE

CXF_MESSAGE 通过将消息从传输层转换为原始 SOAP 消息来调用 CXF 拦截器的完整功能

您可以通过检索 Exchange 属性 CamelCXFDataFormat 来确定交换的数据格式模式。Exchange key constant 在 org.apache.camel.component.cxf.common.message.CxfConstants.DATA_FORMAT_PROPERTY 中定义。

cxf 的 LoggingOutInterceptor 输出出站消息,这些消息会线路记录系统(Java Util Logging)。由于 LoggingOutInterceptor 处于 PRE_STREAM 阶段(但 PRE_STREAM 阶段在 RAW 模式中被删除),因此您必须将 LoggingOutInterceptor 配置为在 WRITE 阶段运行。以下是一个示例:

@Bean
public CxfEndpoint serviceEndpoint(LoggingOutInterceptor loggingOutInterceptor) {
    CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint();
    cxfEndpoint.setAddress("http://localhost:" + port
                            + "/services" + SERVICE_ADDRESS);
    cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.HelloService.class);
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("dataFormat", "RAW");
    cxfEndpoint.setProperties(properties);
    cxfEndpoint.getOutInterceptors().add(loggingOutInterceptor);
    return cxfEndpoint;
}


@Bean
public LoggingOutInterceptor loggingOutInterceptor() {
    LoggingOutInterceptor logger = new LoggingOutInterceptor("write");
    return logger;
}
Copy to Clipboard Toggle word wrap

17.4.5. relayHeaders 选项的描述

从 JAXWS WSDL-first 开发人员的角度来看,有带外 的标头。

in-band 标头是标头,作为端点(如 SOAP 标头)的 WSDL 绑定合同的一部分被明确定义。

带外管理 标头是通过线序列化但不是 WSDL 绑定合同的一部分的标头。

标头转发/过滤是双向的。

当路由具有 CXF 端点并且开发人员需要具有在线标头(如 SOAP 标头)时,与另一个 JAXWS 端点使用的路由进行转发,那么 relayHeaders 应设置为 true,这是默认值。

17.4.6. 只在 POJO 模式中可用

relayHeaders=true 表示转发标头的意图。给定标头是否转发的实际决定被委派给实施 MessageHeadersRelay 接口的可插拔实例。将查阅 MessageHeadersRelay 的 Concrete 实现,以确定是否需要转发标头。已经有一个 SoapMessageHeadersRelay 的实现,它将自己绑定到众所周知的 SOAP 名称空间。目前只过滤带外标头,当 relayHeaders=true 时,才会转发带中的标头。如果有线上有名称空间未知给运行时的标头,则会使用回退到 DefaultMessageHeadersRelay,它只是允许转发所有标头。

relayHeaders=false 设置指定所有标头 in-band 和 out-band 都应丢弃。

您可以插入自己的 MessageHeadersRelay 实施覆盖,或者在中继列表中添加其他插件。要覆盖预先加载的中继实例,只需确保您的 MessageHeadersRelay 实现服务与您要覆盖的名称空间相同。另请注意,覆盖中继必须作为您查找覆盖的所有命名空间服务,否则路由启动时的其他运行时异常将被抛出,因为这会在命名空间到中继实例映射中引入模糊性。

<cxf:cxfEndpoint ...>
   <cxf:properties>
     <entry key="org.apache.camel.cxf.message.headers.relays">
       <list>
         <ref bean="customHeadersRelay"/>
       </list>
     </entry>
   </cxf:properties>
 </cxf:cxfEndpoint>
 <bean id="customHeadersRelay" class="org.apache.camel.component.cxf.soap.headers.CustomHeadersRelay"/>
Copy to Clipboard Toggle word wrap

查看测试,其中显示了如何进行转发/过滤标头:

https://github.com/apache/camel/blob/main/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/CxfMessageHeadersRelayTest.java

  • 支持 POJOPAYLOAD 模式。在 POJO 模式中,只有带外消息标头才能过滤,因为没有 CXF 从标头列表中处理并删除在带中的标头列表中。in-band 标头合并到 POJO 模式的 MessageContentList 中。camel-cxf 组件会导致尝试从 MessageContentList 中删除带外标头。如果需要过滤 in-band 标头,请使用 PAYLOAD 模式或插件(pretty simple) CXF 拦截器/JAXWS Handler 到 CXF 端点。
  • Message Header Relay 机制已合并到 CxfHeaderFilterStrategy 中。relayHeaders 选项、其语义和默认值保持不变,但它是 CxfHeaderFilterStrategy 的属性。以下是配置它的示例:
@Bean
public HeaderFilterStrategy dropAllMessageHeadersStrategy() {
    CxfHeaderFilterStrategy headerFilterStrategy = new CxfHeaderFilterStrategy();
    headerFilterStrategy.setRelayHeaders(false);
    return headerFilterStrategy;
}
Copy to Clipboard Toggle word wrap

然后,您的端点可以引用 CxfHeaderFilterStrategy

@Bean
public CxfEndpoint routerNoRelayEndpoint(HeaderFilterStrategy dropAllMessageHeadersStrategy) {
    CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint();
    cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.soap.headers.HeaderTester.class);
    cxfEndpoint.setAddress("/CxfMessageHeadersRelayTest/HeaderService/routerNoRelayEndpoint");
    cxfEndpoint.setWsdlURL("soap_header.wsdl");
    cxfEndpoint.setEndpointNameAsQName(
        QName.valueOf("{http://apache.org/camel/component/cxf/soap/headers}SoapPortNoRelay"));
    cxfEndpoint.setServiceNameAsQName(SERVICENAME);
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("dataFormat", "PAYLOAD");
    cxfEndpoint.setProperties(properties);
    cxfEndpoint.setHeaderFilterStrategy(dropAllMessageHeadersStrategy);
    return cxfEndpoint;
}

@Bean
public CxfEndpoint serviceNoRelayEndpoint(HeaderFilterStrategy dropAllMessageHeadersStrategy) {
    CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint();
    cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.soap.headers.HeaderTester.class);
    cxfEndpoint.setAddress("http://localhost:" + port + "/services/CxfMessageHeadersRelayTest/HeaderService/routerNoRelayEndpointBackend");
    cxfEndpoint.setWsdlURL("soap_header.wsdl");
    cxfEndpoint.setEndpointNameAsQName(
        QName.valueOf("{http://apache.org/camel/component/cxf/soap/headers}SoapPortNoRelay"));
    cxfEndpoint.setServiceNameAsQName(SERVICENAME);
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("dataFormat", "PAYLOAD");
    cxfEndpoint.setProperties(properties);
    cxfEndpoint.setHeaderFilterStrategy(dropAllMessageHeadersStrategy);
    return cxfEndpoint;
}
Copy to Clipboard Toggle word wrap

然后配置路由,如下所示:

rom("cxf:bean:routerNoRelayEndpoint")
    .to("cxf:bean:serviceNoRelayEndpoint");
Copy to Clipboard Toggle word wrap
  • MessageHeadersRelay 接口已稍有变化,并被重命名为 MessageHeaderFilter。它是 CxfHeaderFilterStrategy 的属性。以下是配置用户定义的消息标头过滤器的示例:
@Bean
public HeaderFilterStrategy customMessageFilterStrategy() {
    CxfHeaderFilterStrategy headerFilterStrategy = new CxfHeaderFilterStrategy();
    List<MessageHeaderFilter> headerFilterList = new ArrayList<MessageHeaderFilter>();
    headerFilterList.add(new SoapMessageHeaderFilter());
    headerFilterList.add(new CustomHeaderFilter());
    headerFilterStrategy.setMessageHeaderFilters(headerFilterList);
    return headerFilterStrategy;
}
Copy to Clipboard Toggle word wrap
  • 除了 relayHeaders 外,也可以在 CxfHeaderFilterStrategy 中配置以下属性。
Expand
名称必填描述

relayHeaders

所有消息标头都将由 Message Header Filters Type:boolean Default:true处理

relayAllMessageHeaders

所有消息标头都会被传播(不由消息标头过滤器处理) Type:booleanDefault:false

allowFilterNamespaceClash

如果激活命名空间中的两个过滤器重叠,则属性控制应如何处理它。如果值为 true,则最后一个值为 wins。如果值为 false,它将抛出异常 Type:boolean Default:false

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat