17.4. 端点选项
CXF 端点使用 URI 语法进行配置:
cxf:beanId:address
cxf:beanId:address
使用以下路径和查询参数:
17.4.1. 路径参数(2 参数) 复制链接链接已复制到粘贴板!
名称 | 描述 | 默认 | 类型 |
---|---|---|---|
beanId (common) | 查找现有的配置的 CxfEndpoint。必须使用 bean: 作为前缀。 | 字符串 | |
地址 (服务) | 服务发布地址。 | 字符串 |
17.4.2. 查询参数(35 参数) 复制链接链接已复制到粘贴板!
名称 | 描述 | 默认 | 类型 |
---|---|---|---|
dataFormat (common) | CXF 端点支持的数据类型消息。 Enum 值:
| 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 值:
| 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 的位置。可以在类路径、文件系统或远程托管上。 | 字符串 |
serviceName
和 portName
是 QNames,因此如果您为其提供 {namespace} 前缀,如上例中所示。
17.4.3. 数据格式的描述 复制链接链接已复制到粘贴板!
在 Apache Camel 中,Camel CXF 组件是将路由与 Web 服务集成的关键。您可以使用 Camel CXF 组件创建 CXF 端点,该端点可通过以下任一方式使用:
- consumer - (在路由开始时)代表一个 Web 服务实例,它与路由集成。注入路由的有效负载类型取决于端点的 dataFormat 选项的值。
- producer - (路由中的其他点)代表 WS 客户端代理,它将当前的交换对象转换为远程 Web 服务上的操作调用。当前交换的格式必须与端点的 dataFormat 设置匹配。
DataFormat | 描述 |
---|---|
| POJO (旧 Java 对象)是目标服务器上调用的方法的 Java 参数。支持协议和逻辑 JAX-WS 处理程序。 |
|
应用 CXF 端点中的消息配置后, |
|
|
|
|
您可以通过检索 Exchange 属性 CamelCXFDataFormat
来确定交换的数据格式模式。Exchange key constant 在 org.apache.camel.component.cxf.common.message.CxfConstants.DATA_FORMAT_PROPERTY
中定义。
17.4.4. 如何在 RAW 模式中启用 CXF 的 LoggingOutInterceptor 复制链接链接已复制到粘贴板!
cxf 的 LoggingOutInterceptor
输出出站消息,这些消息会线路记录系统(Java Util Logging)。由于 LoggingOutInterceptor
处于 PRE_STREAM
阶段(但 PRE_STREAM
阶段在 RAW
模式中被删除),因此您必须将 LoggingOutInterceptor
配置为在 WRITE
阶段运行。以下是一个示例:
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
实现服务与您要覆盖的名称空间相同。另请注意,覆盖中继必须作为您查找覆盖的所有命名空间服务,否则路由启动时的其他运行时异常将被抛出,因为这会在命名空间到中继实例映射中引入模糊性。
查看测试,其中显示了如何进行转发/过滤标头:
-
支持
POJO
和PAYLOAD
模式。在POJO
模式中,只有带外消息标头才能过滤,因为没有 CXF 从标头列表中处理并删除在带中的标头列表中。in-band 标头合并到 POJO 模式的MessageContentList
中。camel-cxf
组件会导致尝试从MessageContentList
中删除带外标头。如果需要过滤 in-band 标头,请使用PAYLOAD
模式或插件(pretty simple) CXF 拦截器/JAXWS Handler 到 CXF 端点。 -
Message Header Relay 机制已合并到
CxfHeaderFilterStrategy
中。relayHeaders
选项、其语义和默认值保持不变,但它是CxfHeaderFilterStrategy
的属性。以下是配置它的示例:
然后,您的端点可以引用 CxfHeaderFilterStrategy
。
然后配置路由,如下所示:
rom("cxf:bean:routerNoRelayEndpoint") .to("cxf:bean:serviceNoRelayEndpoint");
rom("cxf:bean:routerNoRelayEndpoint")
.to("cxf:bean:serviceNoRelayEndpoint");
-
MessageHeadersRelay
接口已稍有变化,并被重命名为MessageHeaderFilter
。它是CxfHeaderFilterStrategy
的属性。以下是配置用户定义的消息标头过滤器的示例:
-
除了
relayHeaders
外,也可以在CxfHeaderFilterStrategy
中配置以下属性。
名称 | 必填 | 描述 |
---|---|---|
| 否 |
所有消息标头都将由 Message Header Filters Type: |
| 否 |
所有消息标头都会被传播(不由消息标头过滤器处理) Type: |
| 否 |
如果激活命名空间中的两个过滤器重叠,则属性控制应如何处理它。如果值为 |