Difference between revisions of "WSDLs for QED"

From IHE Wiki
Jump to navigation Jump to search
m
Line 1: Line 1:
 
== Appendix E - WSDLs for QED ==
 
== Appendix E - WSDLs for QED ==
  
The WSDL for QED transactions {{ILink|WSDLs for QED|PCC-1}}, {{ILink|WSDLs for QED|PCC-2}}, {{ILink|WSDLs for QED|PCC-3}}, {{ILink|WSDLs for QED|PCC-4}}, {{ILink|WSDLs for QED|PCC-5}} and {{ILink|WSDLs for QED|PCC-6}} are identical except for the actor name.  Simply substitute one the following values for the string ACTOR in the following WSDL example.
+
The WSDL for the QED transaction {{ILink|WSDLs for QED|PCC-1}} represents the interface contract for the QED profile.  Conformance to this contract is a requirement of the profile.  However, the WSDL representing the this contract is not necessarily the best WSDLs to use when generating application proxies.
 
 
{{T|Transaction|Actor Name|Rows=
 
{{R|PCC-1|VitalSignsDataRepository}}
 
{{R|PCC-2|ProblemAndAllergyDataRepository}}
 
{{R|PCC-3|DiagnosticDataRepository}}
 
{{R|PCC-4|MedicationDataRepository}}
 
{{R|PCC-5|ImmunizationDataRepository}}
 
{{R|PCC-5|ProfessionalServicesDataRepository}}
 
}}
 
 
 
These WSDLs are represent interface contracts for the QED profile.  Conformance to these contracts is a requirement of the profile.  However, the WSDLs representing the these contracts are not necessarily the best WSDLs to use when generating application proxies.
 
  
 
There is a general guideline for generating proxies make application development much easier for complex WSDL/schemas such as the ones included for QED.  Use a generic, non-strongly typed WSDL that is for the purpose of generating the proxy.  Use of a strongly typed WSDL forces the generation infrastructure to go through all the XML type definitions.  It will then generate classes for each of them, which can result in thousands of generated classes and megabytes of generated code. In addition, the mapping between the schema and object oriented constructs is not straightforward.  Because of both the size, and complexity of the schema, proxy generators often run into problems with valid instances of strongy typed WSDLs.
 
There is a general guideline for generating proxies make application development much easier for complex WSDL/schemas such as the ones included for QED.  Use a generic, non-strongly typed WSDL that is for the purpose of generating the proxy.  Use of a strongly typed WSDL forces the generation infrastructure to go through all the XML type definitions.  It will then generate classes for each of them, which can result in thousands of generated classes and megabytes of generated code. In addition, the mapping between the schema and object oriented constructs is not straightforward.  Because of both the size, and complexity of the schema, proxy generators often run into problems with valid instances of strongy typed WSDLs.
Line 21: Line 10:
 
<pre>
 
<pre>
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?xml version="1.0" encoding="UTF-8"?>
<definitions name="ACTOR" targetNamespace="urn:ihe:pcc:qed:2007"  
+
<definitions name="ClinicalDataSource" targetNamespace="urn:ihe:pcc:qed:2007"  
 
xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:hl7="urn:hl7-org:v3"  
 
xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:hl7="urn:hl7-org:v3"  
 
xmlns:tns="urn:ihe:pcc:qed:2007"
 
xmlns:tns="urn:ihe:pcc:qed:2007"
Line 55: Line 44:
 
     <part element="hl7:QUQI_IN000003UV01" name="Body"/>
 
     <part element="hl7:QUQI_IN000003UV01" name="Body"/>
 
   </message>
 
   </message>
   <portType name="ACTOR_PortType">
+
   <portType name="ClinicalDataSource_PortType">
     <operation name="ACTOR_QUPC_IN043100UV">
+
     <operation name="ClinicalDataSource_QUPC_IN043100UV">
 
       <input message="tns:QUPC_IN043100UV_Message"  
 
       <input message="tns:QUPC_IN043100UV_Message"  
 
         wsaw:Action="urn:hl7-org:v3:QUPC_IN043100UV"/>
 
         wsaw:Action="urn:hl7-org:v3:QUPC_IN043100UV"/>
Line 62: Line 51:
 
         wsaw:Action="urn:hl7-org:v3:QUPC_IN043200UV "/>
 
         wsaw:Action="urn:hl7-org:v3:QUPC_IN043200UV "/>
 
     </operation>
 
     </operation>
     <operation name="ACTOR_QUQI_IN000003UV01_Continue">
+
     <operation name="ClinicalDataSource_QUQI_IN000003UV01_Continue">
 
       <input message="tns:QUQI_IN000003UV01_Message"  
 
       <input message="tns:QUQI_IN000003UV01_Message"  
 
         wsaw:Action="urn:hl7-org:v3:QUQI_IN000003UV01_Continue"/>
 
         wsaw:Action="urn:hl7-org:v3:QUQI_IN000003UV01_Continue"/>
Line 68: Line 57:
 
         wsaw:Action="urn:hl7-org:v3:QUPC_IN043200UV "/>
 
         wsaw:Action="urn:hl7-org:v3:QUPC_IN043200UV "/>
 
     </operation>
 
     </operation>
     <operation name="ACTOR_QUQI_IN000003UV01_Cancel">
+
     <operation name="ClinicalDataSource_QUQI_IN000003UV01_Cancel">
 
       <input message="tns:QUQI_IN000003UV01_Message"  
 
       <input message="tns:QUQI_IN000003UV01_Message"  
 
         wsaw:Action="urn:hl7-org:v3:QUQI_IN000003UV01_Cancel"/>
 
         wsaw:Action="urn:hl7-org:v3:QUQI_IN000003UV01_Cancel"/>
Line 75: Line 64:
 
     </operation>
 
     </operation>
 
   </portType>
 
   </portType>
   <binding name="ACTOR_Binding_Soap12" type="tns:ACTOR_PortType">
+
   <binding name="ClinicalDataSource_Binding_Soap12" type="tns:ClinicalDataSource_PortType">
 
     <wsoap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 
     <wsoap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
     <operation name="ACTOR_QUPC_IN043100UV">
+
     <operation name="ClinicalDataSource_QUPC_IN043100UV">
 
       <wsoap12:operation soapAction="urn:hl7-org:v3:QUPC_IN043100UV"/>
 
       <wsoap12:operation soapAction="urn:hl7-org:v3:QUPC_IN043100UV"/>
 
       <input><wsoap12:body use="literal"/></input>
 
       <input><wsoap12:body use="literal"/></input>
 
       <output><wsoap12:body use="literal"/></output>
 
       <output><wsoap12:body use="literal"/></output>
 
     </operation>
 
     </operation>
     <operation name="ACTOR_QUQI_IN000003UV01_Continue">
+
     <operation name="ClinicalDataSource_QUQI_IN000003UV01_Continue">
 
       <wsoap12:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
 
       <wsoap12:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
 
       <input><wsoap12:body use="literal"/></input>
 
       <input><wsoap12:body use="literal"/></input>
 
       <output><wsoap12:body use="literal"/></output>
 
       <output><wsoap12:body use="literal"/></output>
 
     </operation>
 
     </operation>
     <operation name="ACTOR_QUQI_IN000003UV01_Cancel">
+
     <operation name="ClinicalDataSource_QUQI_IN000003UV01_Cancel">
 
       <wsoap12:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
 
       <wsoap12:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
 
       <input><wsoap12:body use="literal"/></input>
 
       <input><wsoap12:body use="literal"/></input>
Line 93: Line 82:
 
     </operation>
 
     </operation>
 
   </binding>
 
   </binding>
   <binding name="ACTOR_Binding_Soap11" type="tns:ACTOR_PortType">
+
   <binding name="ClinicalDataSource_Binding_Soap11" type="tns:ClinicalDataSource_PortType">
 
     <wsoap11:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
 
     <wsoap11:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
     <operation name="ACTOR_QUPC_IN043100UV">
+
     <operation name="ClinicalDataSource_QUPC_IN043100UV">
 
       <wsoap11:operation soapAction="urn:hl7-org:v3:QUPC_IN043100UV"/>
 
       <wsoap11:operation soapAction="urn:hl7-org:v3:QUPC_IN043100UV"/>
 
       <input><wsoap12:body use="literal"/></input>
 
       <input><wsoap12:body use="literal"/></input>
 
       <output><wsoap12:body use="literal"/></output>
 
       <output><wsoap12:body use="literal"/></output>
 
     </operation>
 
     </operation>
     <operation name="ACTOR_QUQI_IN000003UV01_Continue">
+
     <operation name="ClinicalDataSource_QUQI_IN000003UV01_Continue">
 
       <wsoap11:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
 
       <wsoap11:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
 
       <input><wsoap11:body use="literal"/></input>
 
       <input><wsoap11:body use="literal"/></input>
 
       <output><wsoap11:body use="literal"/></output>
 
       <output><wsoap11:body use="literal"/></output>
 
     </operation>
 
     </operation>
     <operation name="ACTOR_QUQI_IN000003UV01_Cancel">
+
     <operation name="ClinicalDataSource_QUQI_IN000003UV01_Cancel">
 
       <wsoap11:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
 
       <wsoap11:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
 
       <input><wsoap11:body use="literal"/></input>
 
       <input><wsoap11:body use="literal"/></input>
Line 111: Line 100:
 
     </operation>
 
     </operation>
 
   </binding>
 
   </binding>
   <service name="ACTOR_Service">
+
   <service name="ClinicalDataSource_Service">
     <port binding="tns:ACTOR_Binding_Soap11" name="ACTOR_Port_Soap11">
+
     <port binding="tns:ClinicalDataSource_Binding_Soap11" name="ClinicalDataSource_Port_Soap11">
 
       <wsoap11:address location="http://servicelocation/"/>
 
       <wsoap11:address location="http://servicelocation/"/>
 
     </port>
 
     </port>
     <port binding="tns:ACTOR_Binding_Soap12" name="ACTOR_Port_Soap12">
+
     <port binding="tns:ClinicalDataSource_Binding_Soap12" name="ClinicalDataSource_Port_Soap12">
 
       <wsoap12:address location="http://servicelocation/"/>
 
       <wsoap12:address location="http://servicelocation/"/>
 
     </port>
 
     </port>

Revision as of 14:42, 1 June 2008

Appendix E - WSDLs for QED

The WSDL for the QED transaction PCC-1 represents the interface contract for the QED profile. Conformance to this contract is a requirement of the profile. However, the WSDL representing the this contract is not necessarily the best WSDLs to use when generating application proxies.

There is a general guideline for generating proxies make application development much easier for complex WSDL/schemas such as the ones included for QED. Use a generic, non-strongly typed WSDL that is for the purpose of generating the proxy. Use of a strongly typed WSDL forces the generation infrastructure to go through all the XML type definitions. It will then generate classes for each of them, which can result in thousands of generated classes and megabytes of generated code. In addition, the mapping between the schema and object oriented constructs is not straightforward. Because of both the size, and complexity of the schema, proxy generators often run into problems with valid instances of strongy typed WSDLs.

A commonly used method for creating non-strongly typed WDSL for HL7 Messages used for generating proxies substitutes the ANY data type for the payload of either the message infrastructure or the control act. This results in much smaller proxies. Applications receiving messages using these proxies may want to validate inputs since they are no longer validated by the proxy. A discussion of this method of proxy generation can be found in this article: http://msdn2.microsoft.com/en-us/library/ms954603.aspx. See the section on Web Services Code Generation.


<?xml version="1.0" encoding="UTF-8"?>
<definitions name="ClinicalDataSource" targetNamespace="urn:ihe:pcc:qed:2007" 
		xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:hl7="urn:hl7-org:v3" 
		xmlns:tns="urn:ihe:pcc:qed:2007"
		xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
		xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
		xmlns:wsoap11="http://schemas.xmlsoap.org/wsdl/soap/"
		xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap/"
		xmlns:wsaw="http://schemas.xmlsoap.org/ws/2004/08/addressing"
	 	xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
		xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <types>
    <xsd:schema elementFormDefault="qualified" targetNamespace="urn:hl7-org:v3">
      <!-- Query Care Record Event Profile Query -->
      <xsd:include schemaLocation="QUPC_IN043100UV.xsd"/>
    </xsd:schema>
    <xsd:schema elementFormDefault="qualified" targetNamespace="urn:hl7-org:v3">
      <!-- Query Care Record Event Profile Query Response -->
      <xsd:include schemaLocation="QUPC_IN043200UV.xsd"/>
    </xsd:schema>
    <xsd:schema elementFormDefault="qualified" targetNamespace="urn:hl7-org:v3">
      <!-- General Query Activate Query Continue / Cancel -->
      <xsd:include schemaLocation="QUQI_IN000003UV01.xsd"/>
    </xsd:schema>
  </types>
  <message name="QUPC_IN043100UV_Message">
    <part element="hl7:QUPC_IN043100UV" name="Body"/>
  </message>
  <message name="QUPC_IN043200UV_Message">
    <part element="hl7:QUPC_IN043200UV" name="Body"/>
  </message>
  <message name="QUQI_IN000003UV01_Message">
    <part element="hl7:QUQI_IN000003UV01" name="Body"/>
  </message>
  <portType name="ClinicalDataSource_PortType">
    <operation name="ClinicalDataSource_QUPC_IN043100UV">
      <input message="tns:QUPC_IN043100UV_Message" 
        wsaw:Action="urn:hl7-org:v3:QUPC_IN043100UV"/>
      <output message="tns:QUPC_IN043200UV_Message" 
        wsaw:Action="urn:hl7-org:v3:QUPC_IN043200UV "/>
    </operation>
    <operation name="ClinicalDataSource_QUQI_IN000003UV01_Continue">
      <input message="tns:QUQI_IN000003UV01_Message" 
        wsaw:Action="urn:hl7-org:v3:QUQI_IN000003UV01_Continue"/>
      <output message="tns:QUPC_IN043200UV_Message" 
        wsaw:Action="urn:hl7-org:v3:QUPC_IN043200UV "/>
    </operation>
    <operation name="ClinicalDataSource_QUQI_IN000003UV01_Cancel">
      <input message="tns:QUQI_IN000003UV01_Message" 
        wsaw:Action="urn:hl7-org:v3:QUQI_IN000003UV01_Cancel"/>
      <output message="tns:QUPC_IN043200UV_Message" 
        wsaw:Action="urn:hl7-org:v3:QUPC_IN043200UV"/>
    </operation>
  </portType>
  <binding name="ClinicalDataSource_Binding_Soap12" type="tns:ClinicalDataSource_PortType">
    <wsoap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="ClinicalDataSource_QUPC_IN043100UV">
      <wsoap12:operation soapAction="urn:hl7-org:v3:QUPC_IN043100UV"/>
      <input><wsoap12:body use="literal"/></input>
      <output><wsoap12:body use="literal"/></output>
    </operation>
    <operation name="ClinicalDataSource_QUQI_IN000003UV01_Continue">
      <wsoap12:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
      <input><wsoap12:body use="literal"/></input>
      <output><wsoap12:body use="literal"/></output>
    </operation>
    <operation name="ClinicalDataSource_QUQI_IN000003UV01_Cancel">
      <wsoap12:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
      <input><wsoap12:body use="literal"/></input>
      <output><wsoap12:body use="literal"/></output>
    </operation>
  </binding>
  <binding name="ClinicalDataSource_Binding_Soap11" type="tns:ClinicalDataSource_PortType">
    <wsoap11:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="ClinicalDataSource_QUPC_IN043100UV">
      <wsoap11:operation soapAction="urn:hl7-org:v3:QUPC_IN043100UV"/>
      <input><wsoap12:body use="literal"/></input>
      <output><wsoap12:body use="literal"/></output>
    </operation>
    <operation name="ClinicalDataSource_QUQI_IN000003UV01_Continue">
      <wsoap11:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
      <input><wsoap11:body use="literal"/></input>
      <output><wsoap11:body use="literal"/></output>
    </operation>
    <operation name="ClinicalDataSource_QUQI_IN000003UV01_Cancel">
      <wsoap11:operation soapAction="urn:hl7-org:v3:QUQI_IN000003UV01"/>
      <input><wsoap11:body use="literal"/></input>
      <output><wsoap11:body use="literal"/></output>
    </operation>
  </binding>
  <service name="ClinicalDataSource_Service">
    <port binding="tns:ClinicalDataSource_Binding_Soap11" name="ClinicalDataSource_Port_Soap11">
      <wsoap11:address location="http://servicelocation/"/>
    </port>
    <port binding="tns:ClinicalDataSource_Binding_Soap12" name="ClinicalDataSource_Port_Soap12">
      <wsoap12:address location="http://servicelocation/"/>
    </port>
  </service>
</definitions>

This file, along with the necessary HL7 Schemas, and some skelatal examples can all be found on the Patient Care Coordination FTP site: [1]