Erros usando SvcUtil.exe em uma wsdl para gerar classe de proxy - xs: elemento do grupo
-
06-07-2019 - |
Pergunta
Eu estou tentando usar SvcUtil contra um arquivo WSDL para gerar classes de proxy, mas eu estou recebendo um elemento falta de erro que eu acho que está relacionado com elementos do grupo esquema. Alguém sabe de um fato se svcutil pode segurar? E se assim ele vai lidar com xs:? Elementos do grupo que têm atributos ref que apontam para a definição do grupo que vive em outro arquivo de esquema
SvcUtil.exe Command (incluídos os caminhos para os arquivos XSD também):
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
O erro é:
Erro: Não é possível importar wsdl: portType Detalhe: Uma exceção foi lançada enquanto executando uma extensão WSDL de importação: System.ServiceModel.Description.XmlSerializerMessageContractImporter Erro: Grupo InfrastructureRootElements está faltando. XPath para erro Origem: // WSDL: definições [@ 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 (referência por 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>
trechos de PORT_MT100001UV.xsd (Referenciado por RPE.xsd) - Observe o "InfrastructureRootElements" xs: grupo:
<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 (referência por PORT_MT100001UV.xsd) notar a definição do grupo InfrastructureRootElements aqui - este é o mesmo grupo a partir do esquema acima que tem o atributo 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>
Solução
esta ferramenta - FUMEC azul - de um post em fóruns do MSDN. Isso me pelos meus erros e também olha para oferecer um pouco mais em termos de funcionalidade.
Outras dicas
Eu não tenho certeza sobre SvcUtil, mas para XSD.exe e WSDL.exe você tem que especificar todos os arquivos que são usados ??pelo arquivo .xsd, porque eles não reconhecem elementos. Talvez o meu post vai ajudá-lo, também: http://seanmcilvenna.com/blog / 7-geral / 30 XCA-implementação