41.4. Installing Filters
Overview
To install message header filters, set the
messageHeaderFilters
property of the CxfHeaderFilterStrategy
object. When you initialize this property with a list of message header filters, the header filter strategy combines the specified filters to make a filter map.
The
messageHeaderFilters
property is of type, List<MessageHeaderFilter>
.
Installing filters in XML
The following example shows how to create a
CxfHeaderFilterStrategy
instance, specifying a customized list of header filters in the messageHeaderFilters
property. There are two header filters in this example: SoapMessageHeaderFilter
and CustomHeaderFilter
.
<bean id="customMessageFilterStrategy" class="org.apache.camel.component.cxf.common.header.CxfHeaderFilterStrategy"> <property name="messageHeaderFilters"> <list> <!-- SoapMessageHeaderFilter is the built in filter. It can be removed by omitting it. --> <bean class="org.apache.camel.component.cxf.common.header.SoapMessageHeaderFilter"/> <!-- Add custom filter here --> <bean class="org.apache.camel.component.cxf.soap.headers.CustomHeaderFilter"/> </list> </property> <!-- The 'relayHeaders' property is 'true' by default --> </bean>
SoapMessageHeaderFilter
The first header filter in the preceding example is the
SoapMessageHeaderFilter
filter, which is the default header filter. This filter is designed to filter standard SOAP headers and is bound to the following XML namespaces:
http://schemas.xmlsoap.org/soap/ http://schemas.xmlsoap.org/wsdl/soap/ http://schemas.xmlsoap.org/wsdl/soap12/
This filter peeks at the header element, in order to decide whether or not to block a particular header. If the
soap:actor
attribute (SOAP 1.1) or the soap:role
attribute (SOAP 1.2) is present and has the value next, the header is removed from the message. Otherwise, the header is propagated.
Namespace clashes
Normally, each namespace should be bound to just a single header filter. If a namespace is bound to more than one header filter, this normally causes an error. It is possible, however, to override this policy by setting the
allowFilterNamespaceClash
property to true
in the CxfHeaderFilterStrategy
instance. When this policy is set to true
, the nearest to last filter is selected, in the event of a namespace clash.