Errors using SvcUtil.exe in wsdl to generate proxy class - xs: group member

I am trying to use SvcUtil on a wsdl file to generate proxy classes, but I am getting an item missing an error that I think is related to the items in the schema group. Does anyone know if svcutil can handle it? And if it will handle xs: group elements that have ref attributes that point to a group definition that lives in another schema file?

SvcUtil.exe command (also includes paths to xsd files):

d:\codegen\svcutil.exe d:\codegen\RPE\ProtocolStateManager.wsdl d:\codegen\RPE\schema\RPE.xsd d:\codegen\RPE\schema\PORT_MT100001UV.xsd d:\codegen\RPE\schema\coreschemas\infrastructureRoot.xsd d:\codegen\RPE\schema\coreschemas\dataTypes.xsd d:\codegen\RPE\schema\coreschemas\voc.xsd /l:cs

      

Mistake:

Error: Unable to import wsdl: portType Detail: Exception was running WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter Error: The InfrastructureRootElements group is missing. XPath to Error Source: // wsdl: definitions [@targetNamespace = 'urn: ihe: qrph: rpe: 2009'] / wsdl: portType [@ name = 'ProtocolStateManager']

ProtocolStateManager.wsdl:

   <?xml version="1.0" encoding="UTF-8"?>
<definitions name="ProtocolStateManager" 
             targetNamespace="urn:ihe:qrph:rpe:2009" 
             xmlns:rpe="urn:ihe:qrph:rpe:2009"
             xmlns="http://schemas.xmlsoap.org/wsdl/" 
             xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/">
 <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    TYPE DEFINITION - List of services participating in this BPEL process
    The default output of the BPEL designer uses strings as input and 
    output to the BPEL Process. But you can define or import any XML 
    Schema type and use them as part of the message types.
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
 <types>
  <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ihe:qrph:rpe:2009">
   <include schemaLocation="schema\RPE.xsd"/>
  </schema>
 </types>
 <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    MESSAGE TYPE DEFINITION - Definition of the message types used as 
    part of the port type defintions
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
 <message name="EnterPatientRequestRequestMessage">
  <part name="payload" element="rpe:EnterPatientRequest"/>
 </message>
 <message name="EnterPatientRequestResponseMessage">
  <part name="payload" element="rpe:EnterPatientRequest"/>
 </message>
 <message name="PatientScreeningVisitsScheduledRequestMessage">
  <part name="payload" element="rpe:PatientScreeningVisitsScheduled"/>
 </message>
 <message name="PatientScreeningVisitsScheduledResponseMessage">
  <part name="payload" element="rpe:PatientScreeningVisitsScheduled"/>
 </message>
 <message name="PatientScreeningVisitRecordedRequestMessage">
  <part name="payload" element="rpe:PatientScreeningVisitRecorded"/>
 </message>
 <message name="PatientScreeningVisitRecordedResponseMessage">
  <part name="payload" element="rpe:PatientScreeningVisitRecorded"/>
 </message>
 <message name="EnrollPatientRequestRequestMessage">
  <part name="payload" element="rpe:EnrollPatientRequest"/>
 </message>
 <message name="EnrollPatientRequestResponseMessage">
  <part name="payload" element="rpe:EnrollPatientRequest"/>
 </message>
 <message name="PatientStudyVisitsScheduledRequestMessage">
  <part name="payload" element="rpe:PatientStudyVisitsScheduled"/>
 </message>
 <message name="PatientStudyVisitsScheduledResponseMessage">
  <part name="payload" element="rpe:PatientStudyVisitsScheduled"/>
 </message>
 <message name="PatientStudyVisitRecordedRequestMessage">
  <part name="payload" element="rpe:PatientStudyVisitRecorded"/>
 </message>
 <message name="PatientStudyVisitRecordedResponseMessage">
  <part name="payload" element="rpe:PatientStudyVisitRecorded"/>
 </message>
  <message name="AlertProtocolStateMessage">
  <part name="payload" element="rpe:AlertProtocolState"/>
 </message>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    PORT TYPE DEFINITION - A port type groups a set of operations into
    a logical service unit.
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
 <!-- portType implemented by the ProtocolStateManager BPEL process -->
 <portType name="ProtocolStateManager">
  <operation name="EnterPatientRequest">
   <input message="rpe:EnterPatientRequestRequestMessage"/>
   <output message="rpe:EnterPatientRequestResponseMessage"/>
  </operation>
  <operation name="PatientScreeningVisitsScheduled">
   <input message="rpe:PatientScreeningVisitsScheduledRequestMessage"/>
   <output message="rpe:PatientScreeningVisitsScheduledResponseMessage"/>
  </operation>
  <operation name="RecordPatientScreeningVisit">
   <input message="rpe:PatientScreeningVisitRecordedRequestMessage"/>
   <output message="rpe:PatientScreeningVisitRecordedResponseMessage"/>
  </operation>
  <operation name="EnrollPatientRequest">
   <input message="rpe:EnrollPatientRequestRequestMessage"/>
   <output message="rpe:EnrollPatientRequestResponseMessage"/>
  </operation>
  <operation name="PatientStudyVisitsScheduled">
   <input message="rpe:PatientStudyVisitsScheduledRequestMessage"/>
   <output message="rpe:PatientStudyVisitsScheduledResponseMessage"/>
  </operation>
  <operation name="RecordPatientStudyVisit">
   <input message="rpe:PatientStudyVisitRecordedRequestMessage"/>
   <output message="rpe:PatientStudyVisitRecordedResponseMessage"/>
  </operation>
 </portType>

  <portType name="ProtocolStateManagerCallback">
   <operation name="onAlertProtocolState">
    <input message="rpe:AlertProtocolStateMessage"/>
   </operation>
 </portType>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    PARTNER LINK TYPE DEFINITION
    the ProtocolStateManager partnerLinkType binds the provider and
    requester portType into an asynchronous conversation.
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
 <plnk:partnerLinkType name="ProtocolStateManager">
    <plnk:role name="ProtocolStateManagerProvider">
        <plnk:portType name="rpe:ProtocolStateManager"/>
    </plnk:role>
    <plnk:role name="ProtocolStateManagerCallbackListener">
        <plnk:portType name="rpe:ProtocolStateManagerCallback"/>
    </plnk:role>
 </plnk:partnerLinkType>
</definitions>

      

RPE.xsd (protocol linkStateManager.wsdl):

<schema attributeFormDefault="unqualified" elementFormDefault="qualified" 
        targetNamespace="urn:ihe:qrph:rpe:2009" 
        xmlns:rpe="urn:ihe:qrph:rpe:2009" 
        xmlns:v3="urn:hl7-org:v3" 
        xmlns="http://www.w3.org/2001/XMLSchema">

    <import namespace="urn:hl7-org:v3" schemaLocation="PORT_MT100001UV.xsd"/>

    <element name="RetrieveProtocolDef" type="rpe:RetrieveProtocolDefType"/>
    <element name="EnterPatientRequest" type="rpe:EnterPatientRequestType"/>
    <element name="EnrollPatientRequest" type="rpe:EnrollPatientRequestType"/>
    <element name="PatientScreeningVisitsScheduled" type="rpe:PatientScreeningVisitsScheduledType"/>
    <element name="PatientScreeningVisitRecorded" type="rpe:PatientScreeningVisitRecordedType"/>
    <element name="PatientStudyVisitsScheduled" type="rpe:PatientStudyVisitsScheduledType"/>
    <element name="PatientStudyVisitRecorded" type="rpe:PatientStudyVisitRecordedType"/>
    <element name="AmendProtocolDef" type="rpe:AmendProtocolDefType"/>
    <element name="AlertProtocolState" type="rpe:AlertProtocolStateType"/>
    <!--  need patient information and study information
            EnterPatientRequestType can also be used for the return of candidateID?-->
    <complexType name="RetrieveProtocolDefType">
        <sequence>
            <element name="query" type="string"/>
            <element name="protocolDef" type="string"/>
        </sequence>
    </complexType>
    <complexType name="EnterPatientRequestType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="study" type="v3:PORT_MT100001UV.Study"/>
        </sequence>
    </complexType>
    <!--  need patient for candidateID of the patient being scheduled for screening visits
            need studyID to associate the candidate with the study
            need schedule information-->
    <complexType name="PatientScreeningVisitsScheduledType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="studyID" type="v3:II"/>
            <element name="schedule" type="rpe:ScreeningVisitScheduleType"/>
        </sequence>
    </complexType>
    <!--  need patient for candidateID of patient being recorded for screening visit
            need studyID to associate the candidate with the study
            need visit information for the screening visit being recorded-->
    <complexType name="PatientScreeningVisitRecordedType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="studyID" type="v3:II"/>
            <element name="visit" type="rpe:ScreenVisitType"/>
        </sequence>
    </complexType>
    <!--  need patient information and study information
            EnterPatientRequestType can also be used for the return of subjectID?-->
    <complexType name="EnrollPatientRequestType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="study" type="v3:PORT_MT100001UV.Study"/>
        </sequence>
    </complexType>
    <!--  need patient for subjectID of the patient being scheduled for visits
            need studyID to associate the subject with the study
            need schedule information-->
    <complexType name="PatientStudyVisitsScheduledType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="studyID" type="v3:II"/>
            <element name="schedule" type="rpe:StudyVisitScheduleType"/>
        </sequence>
    </complexType>
    <!--  need patient for subjectID of patient being recorded for visit
            need studyID to associate the subject with the study
            need visit information for the visit being recorded-->
    <complexType name="PatientStudyVisitRecordedType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="studyID" type="v3:II"/>
            <element name="visit" type="rpe:StudyVisitType"/>
        </sequence>
    </complexType>
    <!--  patient information should NOT include emrID?
            should contain placeholder for candidateID and subjectID
            what specific demographics data is needed?
              Should this be a generic type so that an XML standard can be passed?-->
    <complexType name="PatientType">
        <sequence>
            <element name="candidateID" type="string"/>
            <element name="subjectID" type="string"/>
            <element name="name" type="string"/>
            <element name="address" type="string"/>
            <element name="dob" type="string"/>
        </sequence>
    </complexType>
    <!--  studyID to identify the study
            should studyData be a generic type to store an XML standard
    <complexType name="StudyType">
        <sequence>
            <element name="studyID" type="string"/>
            <element name="studyData" type="string"/>
        </sequence>
    </complexType>-->
    <complexType name="ScreenVisitType">
        <sequence>
            <element name="visitID" type="string"/>
            <element name="candidateID" type="string"/>
            <element name="date" type="string"/>
            <element name="screenVisitData" type="string"/>
        </sequence>
    </complexType>
    <complexType name="StudyVisitType">
        <sequence>
            <element name="visitID" type="string"/>
            <element name="subjectID" type="string"/>
            <element name="date" type="string"/>
            <element name="studyVisitData" type="string"/>
        </sequence>
    </complexType>
    <complexType name="ScreeningVisitScheduleType">
        <sequence>
            <element name="visit" type="rpe:ScreenVisitType" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    <complexType name="StudyVisitScheduleType">
        <sequence>
            <element name="visit" type="rpe:StudyVisitType" maxOccurs="unbounded"/>
        </sequence>
    </complexType>
    <complexType name="AmendProtocolDefType">
        <sequence>
            <element name="protocolDef" type="string"/>
        </sequence>
    </complexType>
    <complexType name="AlertProtocolStateType">
        <sequence>
            <element name="patient" type="rpe:PatientType"/>
            <element name="study" type="v3:PORT_MT100001UV.Study"/>
        </sequence>
    </complexType>
</schema>

      

Excerpt from PORT_MT100001UV.xsd (link RPE.xsd) - pay attention to "InfrastructureRootElements" xs: group:

  <xs:complexType name="PORT_MT100001UV.Access">
      <xs:sequence>
         <xs:group ref="InfrastructureRootElements"/>
         <xs:element name="id" type="II" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="targetSiteCode" type="CD" minOccurs="0" maxOccurs="1"/>
         <xs:choice>
            <xs:choice>
               <xs:element name="accessedPerson" type="PORT_MT100001UV.Person" nillable="true"
                           minOccurs="0"
                           maxOccurs="1"/>
               <xs:element name="accessedNonPersonLivingSubject"
                           type="PORT_MT100001UV.NonPersonLivingSubject"
                           nillable="true"
                           minOccurs="0"
                           maxOccurs="1"/>
            </xs:choice>
            <xs:element name="accessedProduct" type="PORT_MT100001UV.Product" nillable="true"
                        minOccurs="0"
                        maxOccurs="1"/>
         </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="InfrastructureRootAttributes"/>
      <xs:attribute name="nullFlavor" type="NullFlavor" use="optional"/>
      <xs:attribute name="classCode" type="RoleClassAccess" use="required"/>
   </xs:complexType>

      

architectureRoot.xsd (reference PORT_MT100001UV.xsd) note the definition of the InfrastructureRootElements group here - this is the same group from the above schema with a ref attribute:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:mif="urn:hl7-org:v3/mif" xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:v3="urn:hl7-org:v3"
           xmlns:ex="urn:hl7-org/v3-example"
           elementFormDefault="qualified">
   <xs:annotation xmlns="urn:hl7-org:v3">
      <xs:documentation>Source Information...</xs:documentation>
   </xs:annotation>
   <xs:include schemaLocation="voc.xsd"/>
   <xs:include schemaLocation="datatypes.xsd"/>
   <xs:group name="InfrastructureRootElements">
      <xs:sequence>
         <xs:element name="realmCode" type="CS" minOccurs="0" maxOccurs="unbounded"/>
         <xs:element name="typeId" type="II" minOccurs="0" maxOccurs="1"/>
         <xs:element name="templateId" type="II" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:group>
   <xs:attributeGroup name="InfrastructureRootAttributes"/>
</xs:schema>

      

+2


source to share


2 answers


I found this tool - WSCF Blue - from a post on the msdn forums. This got me past my mistakes and also offers a little more in terms of functionality.



+3


source


I'm not sure about SvcUtil, but for XSD.exe and WSDL.exe, you need to list all the files that are used by the .xsd file because they don't recognize elements. Maybe my post will help too: http://seanmcilvenna.com/blog/7-general/30-xca-implementation



+1


source







All Articles