2009-10-27 4 views
2

J'essaie d'utiliser SvcUtil sur un fichier wsdl pour générer des classes de proxy, mais je reçois un élément manquant erreur que je pense est lié aux éléments du groupe de schéma. Est-ce que quelqu'un sait pour un fait si svcutil peut gérer? Et si oui, va-t-il gérer les éléments de groupe xs: dont les attributs ref pointent vers la définition de groupe qui se trouve dans un autre fichier de schéma?Erreurs utilisant SvcUtil.exe sur un fichier wsdl pour générer une classe proxy - xs: élément de groupe

SvcUtil.exe commande (inclus les chemins vers les fichiers XSD ainsi):

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 

L'erreur est:

Error: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.XmlSerializerMessageContractImporter Error: Group InfrastructureRootElements 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> 

À propos de nous .xsd (référence par ProtocolStateManager.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> 

Snippet de PORT_MT100001UV.xsd (Référencé par RPE.xsd) - Notez le "InfrastructureRootElements" xs: groupe:

<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> 

infrastructureRoot.xsd (référence par PORT_MT100001UV.xsd) remarquer la définition des InfrastructureRootElements groupe ici - c'est le même groupe à partir du schéma ci-dessus qui a l'attribut ref:

<?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> 
+0

Je suis sûr que vous avez juste besoin de fournir tous les fichiers de schéma. Avez-vous ce travail? –

+0

Malheureusement mon attention a été détournée vers d'autres choses en ce moment. Dernièrement, je travaillais sur ce que je vérifiais toutes les références de schéma - je pense qu'il ya plus de 30 fichiers xsd tous avec des noms fous .. ug - si et quand je reviens à ce que je posterai la solution. – Tone

Répondre

3

J'ai trouvé this tool - WSCF Blue - à partir d'un post sur msdn forums. Il m'a fait passer mes erreurs et cherche également à offrir un peu plus de fonctionnalités.

+0

Très bel outil. Aidé à résoudre le problème. – Deepfreezed

1

Je ne suis pas sûr de SvcUtil, mais pour XSD.exe et WSDL.exe vous devez spécifier tous les fichiers sont utilisés par le .xsd f ile, parce qu'ils ne reconnaissent pas les éléments. Peut-être que mon post vous aidera aussi: http://seanmcilvenna.com/blog/7-general/30-xca-implementation

+0

oui Je suis conscient de ce problème que j'ai rencontré et surmonté dans le passé - malheureusement, il n'a pas l'air d'aider ici. Svcutil.exe est l'équivalent WCF de wsdl.exe. Merci pour le lien du blog - il est toujours bon de trouver d'autres personnes qui développent des profils IHE (XDS, XCA, etc.) - peut-être que je vous verrai à Connectathon l'année prochaine? – Tone

Questions connexes