2011-02-11 9 views
3

svcutilを使用して、カタログサービスのOGC CSW 2.0.2 (07-006r1)標準に準拠するweb service endpointのプロキシクラスを生成しようとしています。svcutilコマンドラインにどのスキーマファイル(xsd)を含めるかを決定する方法は?

entire OGC schema filesをダウンロードして「D:/ temp/OGCSchemas /」ディレクトリに配置しました。

私が興味を持っているスキーマはCSWですが、CSWスキーマには他のスキーマが含まれています。そのため、セット全体をダウンロードしました。私のコマンドラインは、これまでのように見える

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

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 

しかし、私はこのようになり、多くのエラー取得しています:

をあなたはこのようなものが表示されます。例えば

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

このエラーは、私のコマンドラインにさらにxsdsを含めると言っていると思います。

私の質問はです。コマンドラインにどのxsdsを含めるかはどのようにして決められますか?

私はそれが含まれていたが、明らかにそうではないすべてのディレクトリに* .xsdを含めると思った。

編集#1 xsdファイルを含めるときのルールは何ですか?インポートまたは含まれるすべてのファイルを追加する必要がありますか?このような大きなスキーマで、私はそれらをすべて見つけるためのツールを構築する必要があると思っています。

+0

はどこWSDLをインポートしようとしているのか? –

+0

@ John:ローカルマシン:D:\ temp \ OGCSchemas \ csw \ 2.0.2 \ examples \ wsdl \ 2.0.2 \ http-binding。wsdl オンライン:http://schemas.opengis.net/csw/2.0.2/examples/wsdl/2.0.2/http-binding.wsdl – capdragon

答えて

2

これが正しい方法であるかどうかはわかりませんが、私はすべての "xs:import"、 "wsdl:import"、および " "xsd:include"、 "xsd:import"、 "include" xml要素を再帰的に使用します。

私は最終的にコードを生成している次のコマンドラインで終わった。しかし、このコードは小さなものです。まだ何かが間違っています。しかし、少なくとも私はコマンドラインにどのファイルを含めるかを決定することができました。

コマンドライン:

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 

しかし、それが生成するコードは、小さなへの道である:

[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; 
     } 
    } 
} 
+0

これは片道です!それが小さければ、間違ったWSDLファイルから始めるかもしれません。 –

0

先日これを処理しました。最も簡単な方法は、IISでそれらを設定し、それらのアドレスをあなたのlocalhostに向けるようにhostsファイルを変更することです。その後、メインのwsdlファイルでXSDを使用すると、すべてが有効になります。

私は確かに良い方法がありますが、数時間後には私がやったことです。

あなたは名前空間を変更しようとすることはできますが、それは私にとってはうまく機能しませんでした;すべてのファイルとそのような苦労を修正する必要があります。

+0

@ダスティン:名前空間に触れないでください。スキーマが存在するURLには関係しません。 –

+0

@John、XSDはそれらをそこから引き抜こうとします。繰り返しますが、これはどのようにして私のセットアップがネームスペースのURLを模倣して動作するのかです。 –

+0

@ダスティン:いいえ、決してありません。名前空間はURLではなくURIです。彼らはインターネット上の場所を示すものではありません。それぞれの名前空間に対して、インターネット上でスキーマがどこにあるかを指定する 'xsi:schemaLocation'属性があるかもしれませんが、これはオプションです。 –

関連する問題