· Oct 29, 2018

Setting up EnsLib.ITK.AdapterKit.Operation.SOAPOperation to communicate to ITK endpoint.

HealShare 2017

Hi dev community,

I am currently  working on an interface that needs to communicate to a SOAP/ITK endpoint.

I am using the EnsLib.ITK.AdapterKit.Operation.SOAPOperation to interface with an ITK 
service, but it is proving to be more complex than originally expected to set up the web client 
against that particular end-point since I haven't been provided with a WSDL from ITK service side as 
the vendor state they are following the ITK standard and no WSDLs are needed.

I have set up an EnsLib.ITK.AdapterKit.Operation.SOAPOperation within Health Share production and 
we are currently trying to fire some test messages (I am able to send ITK/SOAP requests via 
POSTMAN successfully, and I would like to replicate the same behavior now from the ITK operation). 
 The first blocking stone I am finding is in one of the config settings for the ITK operation:

Web Service Client Class (which has to be created via the SOAP client Wizard Add-in), as it 
currently stands I don't have any WSDL to generate the web client/proxy classes as I normally 
do with a usual SOAP web service.

I'd like to know if a Web Service Client Class for this particular interface is ultimately 
needed, and/or if there might be any work around to achieve this.

The second blocker is within the ITK message test utility, since no WDSL has been provided I therefore 

need to reconstruct the ITK request message from scratch, it looks as follows (I have removed some 
unnecessary XML elements for clarity and with the intention of showing only relevant fields):

<soap:Envelope     xmlns:soap="
            <itk:header service="urn:nhs-itk:services:201005:SendCDADocument-v2-0">
                <itk:manifest count="1">
                    <itk:manifestitem mimetype="text/xml" 
id="uuid_0D67CB1B-F713-4D28-8BFF-70E1A971398D" profileid="urn:nhs-en:profile:nonCoded
CDADocument-v2-0" />
            <itk:payloads count="1">
                <itk:payload id="uuid_0D67CB1B-F713-4D28-8BFF-70E1A971398D">
                    <ClinicalDocument xmlns="urn:hl7-org:v3">
                    <!-- This is the clinical document that contains meaningful payload for the business -->

With a normal SOAP interface I would have the classes for request/response messages generated 
after importing the WSDL, for this particular case  I will need to generate an ITK payload readily 
available to the ITK.SOAP.Operation so we can fire the request towards the ITK service.

When I open the TEST operation utility from the production we need to input the following fields, 
but there is no field for the ITK payload:
Request message data type: EnsLib.ITK.AdapterKit.Request
ServiceName, IsResponse (boolean), RelatesToMessageId, PartialPhysicalURL and PartialLogicalURL
Any guidelines on what is the best practice to follow to achieve this?

I understand this is a very particular issue and it is more a query to clarify how to work with 
ITK operations, therefore any help will be much appreciated, I have checked the documentation 
already and these two things are still a bit obscure on my side.


Discussion (1)0
Log in or sign up to continue

Hi Arun,

Looks like the test form doesn't support the payload property type.

You will have more luck creating the request object from the command line and then calling the test service, something along these lines...

set sc=##class(EnsLib.Testing.Service).SendTestRequest("Put Target Name Here",request,.response,.sessionId,1)

You will need to create an instance of a stream object and assign it to the Stream property of the request object.

If you don't have a WSDL then you could try contacting the TRUD for ITK documentation...

There is one tip that I use when I don't have a WSDL. I take an example XML message and create an XSD for it, there are online generators that can help you do this, such as this one here...

You can then paste the XSD into the XML Schema Wizard found in Studio > Tools > Add-Ins > Add-Ins, this will generate a class that you can use as your request object.