2009-10-27 48 views
2

我正在嘗試使用SvcUtil對wsdl文件生成代理類,但我得到的元素缺少錯誤,我認爲它是相關的模式組元素。有沒有人知道一個事實,如果svcutil可以處理?如果是這樣,它會處理xs:具有ref屬性的組元素,它們指向另一個模式文件中的組定義?在wsdl上使用SvcUtil.exe生成代理類時出現錯誤-xs:group元素

svcutil.exe的命令(包括到xsd文件以及路徑):

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 

錯誤是:

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> 

RPE .xsd(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> 

片段從PORT_MT100001UV.xsd(通過引用RPE.xsd) - 注意 「InfrastructureRootElements」 XS:組:

<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(由PORT_MT100001UV.xsd參考)注意到InfrastructureRootElements的定義在此組 - 這是從具有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

我相信你只需要提供所有的模式文件。你有這個工作嗎? – 2010-02-25 23:51:13

+0

不幸的是我現在的注意力已經轉移到了其他方面。最後,我正在研究這個問題,我正在檢查所有的模式引用 - 我認爲有30多個xsd文件都帶有瘋狂的名稱.. ug - 如果當我回到它時,我會發布解決方案。 – Tone 2010-03-09 21:35:10

回答

3

我發現this tool - WSCF Blue -從msdn論壇上發佈。它讓我超越了我的錯誤,並且在功能方面也提供了更多的功能。

+0

非常漂亮的工具。幫助解決問題。 – Deepfreezed 2011-10-12 15:34:32

1

我不知道SvcUtil工具,但對於XSD.EXE和WSDL.EXE必須指定的所有文件由.xsd f使用ile,因爲他們不承認元素。也許我的帖子也會幫助你:http://seanmcilvenna.com/blog/7-general/30-xca-implementation

+0

是的,我知道這個問題,因爲我以前遇到並克服它 - 不幸的是,它似乎沒有幫助。 Svcutil.exe是wsdl.exe的WCF等效項。感謝博客鏈接 - 找到其他人開發IHE簡介(XDS,XCA等)總是很好 - 也許我會在明年的connectathon上見到你? – Tone 2010-03-09 21:38:21

相關問題