Message types in IPF XDS/XCA/XCF/RAD Components
IPF XDS/XCA Components support both the “raw” ebXML format prescribed by the IHE specification as well as simplified data representation. See corresponding sections below for details.
ebXML data model
According to the IHE specification, XDS/XCA/XCF/RAD transactions use ebXML 3.0 data models for incoming and outgoing messages. IPF XDS/XCA components use Java stub classes instead of plain XML payload. All conversions are performed automatically when needed.
Data types for the request message of the supported transactions are listed in the table below:
Transaction | Request Message Type (org.openehealth.ipf.commons.ihe.xds.core... ) |
---|---|
ITI-18,38,51,63; PHARM-1 | .stub.ebrs30.query.AdhocQueryRequest |
ITI-39,43 | .ebxml.ebxml30.RetrieveDocumentSetRequestType |
ITI-41,80 | .ebxml.ebxml30.ProvideAndRegisterDocumentSetRequestType |
ITI-42,57,61,92 | .stub.ebrs30.lcm.SubmitObjectsRequest |
ITI-62 | .stub.ebrs30.lcm.RemoveObjectsRequest |
ITI-86 | .ebxml.ebxml30.RemoveDocumentsRequestType |
RAD-69,75 | .ebxml.ebxml30.RetrieveImagingDocumentSetRequestType |
Data types for the response message of the supported transactions are listed in the table below:
Transaction | Response Message Type (org.openehealth.ipf.commons.ihe.xds.core... ) |
---|---|
ITI-18,38,51,63; PHARM-1 | .stub.ebrs30.query.AdhocQueryResponse |
ITI-39,43; RAD-69,75 | .ebxml.ebxml30.RetrieveDocumentSetResponseType |
ITI-41,42,57,61,62,80,86,92 | .stub.ebrs30.rs.RegistryResponseType |
Simplified Data Model
Besides the support of raw ebXML messages, the IPF offers a model that abstracts from the ebXML representation of the data and is preferable for the user due to its close relation to the application domain.
Data types for the request message of the supported transactions are listed in the table below:
Transaction | Request Message Type (org.openehealth.ipf.commons.ihe.xds.core.requests... ) |
---|---|
ITI-42,57,61,92 | .RegisterDocumentSet |
ITI-41,80 | .ProvideAndRegisterDocumentSet |
ITI-18,38,51,63; PHARM-1 | .QueryRegistry |
ITI-39,43 | .RetrieveDocumentSet |
ITI-62 | .RemoveMetadata |
ITI-86 | .RemoveDocuments |
RAD-69,75 | .RetrieveImagingDocumentSet |
Data types for the response message of the supported transactions are listed in the table below:
Transaction | Response Message Type (org.openehealth.ipf.commons.ihe.xds.core.responses... ) |
---|---|
ITI-41,42,57,61,62,80,86,92 | .Response |
ITI-18,38,51,63; PHARM-1 | .QueryResponse |
ITI-39,43; RAD-69,75 | .RetrievedDocumentSet |
Some XDS model classes from the package org.openehealth.ipf.commons.ihe.xds.core.metadata
wrap HAPI objects:
Class Name | HL7 v2 data holder type |
---|---|
Address | XAD |
AssigningAuthority | Holder<HD> |
Code | CE |
Identifiable | CX |
Organization | XON |
Person | XCN |
ReferenceId | CX |
Telecom | XTN |
XcnName | XCN |
XpnName | XPN |
These classes have constructors which take HAPI objects as parameters, thus providing the possibility to create XDS objects
directly from HL7v2 ones. The wrapped HAPI objects can be accessed via .getHapiObject()
methods of the XDS model class instances
(for AssigningAuthority
: .getHapiObject().getInternal()
).
The static methods render(object)
and rawRender(object)
of the class org.openehealth.ipf.commons.ihe.xds.core.metadata.Hl7v2Based
can be used for getting an HL7v2 string representation of the given XDS model object.
render(object)
considers all IHE rules regarding unwanted components (see ITI TF Volume 3 Section 4.1), and, for example,
omits display name in CE codes. rawRender(object)
renders all components, even if they do not have any meaning in XDS context.
The static method parse()
performs the opposite conversion — from an Hl7 v2 string to an XDS simplified object model.
The classes XcnName
and XpnName
both implement the interface Name
, are compatible in regard to the method .equals()
and fully interchangeable in all situations.
Transformation between the models
Transformation between the ebXML and the simplified data models can be performed by means of Camel type converters provided by the IPF, as outlined in the following example.
Type converters are applied by either using the convertBodyTo(Class)
processor, or by converting the message body on the fly,
e.g. using exchange.getIn().getBody(Class)
.
Although the route below is written in Groovy, type conversion does not require the Groovy programming language.
import static org.openehealth.ipf.commons.ihe.xds.core.responses.Status.*
import org.apache.camel.spring.SpringRouteBuilder
import org.openehealth.ipf.commons.ihe.xds.core.requests.QueryRegistry
import org.openehealth.ipf.commons.ihe.xds.core.requests.query.FindDocumentsQuery
import org.openehealth.ipf.commons.ihe.xds.core.responses.QueryResponse
import org.openehealth.ipf.commons.ihe.xds.core.metadata.ObjectReference
import org.openehealth.ipf.platform.camel.core.util.Exchanges
class RouteBuilder extends SpringRouteBuilder {
@Override
void configure() throws Exception {
from("xds-iti18:myIti18Service")
.convertBodyTo(QueryRegistry.class)
.choice()
// Return an object reference for a find documents query
.when { it.in.body.query instanceof FindDocumentsQuery }
.transform {
def response = new QueryResponse(SUCCESS)
response.references.add(new ObjectReference('document01'))
response
}
// Any other query else is a failure
.otherwise()
.transform { new QueryResponse(FAILURE) }
}
}