Working with HTTP and SOAP headers in Web Service-based IPF eHealth components
IPF provides the possibility to access protocol (HTTP and SOAP) headers of incoming Web Service messages and to insert additional protocol headers into outgoing messages.
Accessing protocol headers of incoming messages
From within the route, headers of the current incoming Web Service message can be accessed as Camel message headers:
Protocol | Camel header name | Type |
---|---|---|
HTTP | AbstractWsEndpoint#INCOMING_HTTP_HEADERS |
Map<String, String> with keys corresponding to header names |
SOAP | AbstractWsEndpoint#INCOMING_SOAP_HEADERS |
Map<QName, org.apache.cxf.headers.Header> with keys corresponding to header names |
Setting additional protocol headers of outgoing messages
To add custom HTTP and/or SOAP headers to an outgoing message, a corresponding data structure must be made available through corresponding Camel message header:
Protocol | Camel header name | Type |
---|---|---|
HTTP | AbstractWsEndpoint#OUTGOING_HTTP_HEADERS |
Map<String, String> with keys corresponding to header names |
SOAP | AbstractWsEndpoint#OUTGOING_SOAP_HEADERS |
Collection<org.apache.cxf.headers.Header> or Map<QName, org.apache.cxf.headers.Header> (keys will be ignored) |
Example of configuring a simple custom SOAP header with plain text content
import static AbstractWsEndpoint.*
.process {
def headerName = new QName('urn:ihe:iti:ihe:2007', 'CustomXdsHeader')
def header = new Header(headerName, "simple contents", new JAXBDataBinding(String.class))
if (! it.in.headers.containsKey(OUTGOING_SOAP_HEADERS)) {
it.in.headers[OUTGOING_SOAP_HEADERS] = []
}
it.in.headers[OUTGOING_SOAP_HEADERS] << header
}
Example of configuring custom HTTP headers
import static AbstractWsEndpoint.*
.process {
def myRequestHeader = it.in.headers[INCOMING_HTTP_HEADERS]['MyRequestHeader']
if (! it.in.headers.containsKey(OUTGOING_HTTP_HEADERS)) {
it.in.headers[OUTGOING_HTTP_HEADERS] = [:]
}
it.in.headers[OUTGOING_HTTP_HEADERS]['SAMLToken'] = '...'
it.in.headers[OUTGOING_HTTP_HEADERS]['MyResponseHeader'] = 'Re: ' + myRequestHeader
}