Comment déterminer les fichiers de schéma (XSD) à inclure sur ma ligne de commande SVCuttil?

StackOverflow https://stackoverflow.com/questions/4974146

  •  12-11-2019
  •  | 
  •  

Question

Utilisation de SVCuttil, j'essaie de générer une classe proxy pour un Service Web Endpoint qui suit le OGC CSW 2.0.2 (07-006R1) Standard pour les services de catalogue.

J'ai téléchargé le Fichiers de schéma global d'OGC et les a placés dans ma qualité / d: / TEMP / OGCSCHEMAS / "Répertoire.

Le schéma que je m'intéresse est CSW, cependant, Schema CSW inclut et importe d'autres schémas et c'est pourquoi j'ai téléchargé l'ensemble de l'ensemble.

Par exemple, vous verrez quelque chose comme ceci:

<wsdl:import namespace="http://www.opengis.net/cat/csw/2.0.2/requests" location="./xml-interfaces.wsdl"/>
<xsd:schema targetNamespace="http://www.opengis.net/cat/csw/2.0.2" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="2.0.2">
    <xsd:include schemaLocation="../../csw/2.0.2/CSW-discovery.xsd"/>
    <xsd:include schemaLocation="../../csw/2.0.2/CSW-publication.xsd"/>
</xsd:schema>

ma ligne de commande aussi loin ressemble à:

svcutil D:\temp\OGCSchemas\csw\2.0.2\examples\wsdl\2.0.2\*.wsdl D:\temp\OGCSchemas\csw\2.0.2\*.xsd D:\temp\OGCSchemas\filter\1.1.0\*.xsd D:\temp\OGCSchemas\ows\1.0.0\*.xsd /out:D:\temp\ogc.csw.proxy.cs

Mais je reçois beaucoup d'erreurs qui ressemblent à ceci:

Error: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://www.opengis.net/cat/csw/2.0.2/soap']/wsdl:binding[@name='csw-SO
AP']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://www.opengis.net/cat/csw/2.0.2/wsdl']/wsdl:service[@name='CSW']/
wsdl:port[@name='csw-SOAP-Port']

Je crois que cette erreur me dit d'inclure plus de XSDS dans ma ligne de commande.

Donc, ma question est la suivante: Comment puis-je déterminer quel XSDS inclure dans ma ligne de commande?

Je pensais que j'avais compris un * .xsd pour chaque répertoire qu'il comprenait, mais évidemment pas.

edit # 1 Quelles sont les règles lorsque vous y compris les fichiers XSD? Tous les fichiers sont-ils importés ou inclus? Avec un tel grand schéma, je pense que je vais avoir besoin de construire un outil pour tous les trouver.

Était-ce utile?

La solution

Je ne sais pas si c'était la bonne façon d'y aller, mais j'ai créé un programme qui passerait par le schéma et crée ma ligne de commande pour moi en suivant tous les "XS: importation", "WSDL: importation", "XSD: Inclure "," XSD: importation "et" Inclure "des éléments XML de manière récursive.

J'ai fini par la ligne de commande suivante qui a finalement obtenu un code générateur.Mais le code est un moyen trop petit.Quelque chose est toujours faux.Mais au moins, j'ai pu déterminer les fichiers à inclure dans la ligne de commande.

ligne de commande:

svcutil D:\temp\OGCSchemas\csw\2.0.2\http-binding.wsdl D:\temp\OGCSchemas\csw\2.0.2\xml-interfaces.wsdl D:\temp\OGCSchemas\csw\2.0.2\responses.wsdl D:\temp\OGCSchemas\csw\2.0.2\CSW-discovery.xsd D:\temp\OGCSchemas\csw\2.0.2\CSW-publication.xsd D:\temp\OGCSchemas\ows\1.0.0\owsExceptionReport.xsd D:\temp\OGCSchemas\csw\2.0.2\record.xsd D:\temp\OGCSchemas\ows\1.0.0\owsAll.xsd D:\temp\OGCSchemas\filter\1.1.0\filter.xsd D:\temp\OGCSchemas\csw\2.0.2\rec-dcterms.xsd D:\temp\OGCSchemas\csw\2.0.2\rec-dcmes.xsd D:\temp\OGCSchemas\ows\1.0.0\owsGetCapabilities.xsd D:\temp\OGCSchemas\filter\1.1.0\expr.xsd D:\temp\OGCSchemas\filter\1.1.0\sort.xsd D:\temp\OGCSchemas\filter\1.1.0\filterCapabilities.xsd D:\temp\OGCSchemas\gml\3.1.1\base\geometryAggregates.xsd D:\temp\OGCSchemas\ows\1.0.0\owsServiceIdentification.xsd D:\temp\OGCSchemas\ows\1.0.0\owsServiceProvider.xsd D:\temp\OGCSchemas\ows\1.0.0\owsOperationsMetadata.xsd D:\temp\OGCSchemas\gml\3.1.1\base\geometryPrimitives.xsd D:\temp\OGCSchemas\ows\1.0.0\owsDataIdentification.xsd D:\temp\OGCSchemas\ows\1.0.0\ows19115subset.xsd D:\temp\OGCSchemas\ows\1.0.0\owsCommon.xsd D:\temp\OGCSchemas\gml\3.1.1\base\geometryBasic2d.xsd D:\temp\OGCSchemas\gml\3.1.1\base\geometryBasic0d1d.xsd D:\temp\OGCSchemas\gml\3.1.1\base\measures.xsd D:\temp\OGCSchemas\gml\3.1.1\base\units.xsd D:\temp\OGCSchemas\gml\3.1.1\base\dictionary.xsd D:\temp\OGCSchemas\gml\3.1.1\base\gmlBase.xsd D:\temp\OGCSchemas\gml\3.1.1\base\basicTypes.xsd D:\temp\OGCSchemas\xlink\1.0.0\xlinks.xsd /out:D:\temp\ogc.csw.proxy.cs

mais le code qu'il génère est un chemin vers petit:

[assembly: System.Runtime.Serialization.ContractNamespaceAttribute("http://www.opengis.net/ows", ClrNamespace="www.opengis.net.ows")]
namespace www.opengis.net.ows
{
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
    [System.Xml.Serialization.XmlSchemaProviderAttribute("ExportSchema")]
    [System.Xml.Serialization.XmlRootAttribute(IsNullable=false)]
    public partial class ExceptionReport : object, System.Xml.Serialization.IXmlSerializable
    {
        private System.Xml.XmlNode[] nodesField;
        private static System.Xml.XmlQualifiedName typeName = new System.Xml.XmlQualifiedName("ExceptionReport", "http://www.opengis.net/ows");
        public System.Xml.XmlNode[] Nodes
        {
            get
            {
                return this.nodesField;
            }
            set
            {
                this.nodesField = value;
            }
        }
        public void ReadXml(System.Xml.XmlReader reader)
        {
            this.nodesField = System.Runtime.Serialization.XmlSerializableServices.ReadNodes(reader);
        }

        public void WriteXml(System.Xml.XmlWriter writer)
        {
            System.Runtime.Serialization.XmlSerializableServices.WriteNodes(writer, this.Nodes);
        }

        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return null;
        }
        public static System.Xml.XmlQualifiedName ExportSchema(System.Xml.Schema.XmlSchemaSet schemas)
        {
            System.Runtime.Serialization.XmlSerializableServices.AddDefaultSchema(schemas, typeName);
            return typeName;
        }
    }
}

Autres conseils

J'ai traité cela l'autre jour.Le moyen le plus simple consiste à les installer dans IIS et à modifier votre fichier d'hôtes pour pointer les adresses de votre localhost.Ensuite, utilisez XSD sur le fichier WSDL principal et tout sera bon.

Je suis sûr qu'il y a une meilleure façon, mais après quelques heures, c'est ce que j'ai fini par faire.

Vous pouvez essayer de modifier les espaces de noms, mais cela n'a pas fonctionné pour moi plus que vous devez les modifier pour tous les fichiers et c'est une telle douleur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top