web-dev-qa-db-ja.com

XSDファイルからWSDLを生成する

XSDファイルを指定してWSDLファイルを生成する必要があります。どうすればいいですか? VS2005でこれを実行できますか?これを行う最も簡単な方法は何ですか?

36
Ausgar

次のことはできません-XSDはデータの側面を記述します。 Webサービスの-WSDLはWebサービスの機能を記述します(メソッド呼び出し)。通常、データだけからメソッド呼び出しを把握することはできません。

これらは、実際には方程式の2つの別個の特徴的な部分です。簡単にするために、XSD定義を<wsdl:types>タグでWSDLにインポートすることがよくあります。

(用語の不正確な使用を指摘してくれたCheesoに感謝)

49
marc_s

私はこれについてmarc_sと異なりたいと思います。

xSDは、データの側面を記述します。 Webサービスの-WSDLはWebサービスの機能を記述します(メソッド呼び出し)。通常、データだけからメソッド呼び出しを把握することはできません。

[〜#〜] wsdl [〜#〜] は関数を説明しません。 WSDLはネットワークインターフェースを定義します。ネットワークインターフェース自体は、メッセージを取得してからメッセージで応答するエンドポイントで構成されます。 WSDLは、エンドポイント、および要求メッセージと応答メッセージを記述します。それは非常にメッセージ指向です。

多くの場合、WSDLは一連の関数と考えられますが、これは通常、Webサービスツールが、WSDL操作をメソッドまたは関数呼び出しとして公開するクライアント側プロキシを生成するためです。しかし、WSDLはこれを必要としません。これはツールの副作用です。

[〜#〜] edit [〜#〜]:また、一般的な場合、XSDはWebサービスのデータの側面を定義しません。 XSDは、準拠XMLドキュメントに存在する可能性のある要素を定義します。このようなドキュメントは、Webサービスエンドポイントを介してメッセージとして交換できますが、交換する必要はありません。


質問に戻ると、元の質問に少し違った答えをします。私はYESと言います、卵を使用してオムレツを生成するのと同じ方法で、xsdファイルを指定してWSDLファイルを生成することは可能です。

[〜#〜] edit [〜#〜]:私の元の応答は不明でした。もう一度試してみましょう。 XSDがWSDLと同等であることや、XSDでWSDLを生成するのに十分であることはお勧めしません。 XSDファイルを指定してWSDLを生成することは可能だと言います、そのフレーズで「XSDファイルを使用してWSDLを生成する」という意味であれば。そうすることで、XSDファイルの情報を補強してWSDLを生成します。メッセージパーツ、操作、ポートタイプなどの追加の項目を定義する必要があります。これらはいずれもXSDには存在しません。しかし、「XSDを指定してWSDLを生成する」ことは、創造的な努力で可能です。

「XSDを指定してWSDLを生成する」というフレーズが「XSDをWSDLに機械的に変換する」ことを意味する場合、答えは「いいえ」です。それはできません。上記のWSDLの説明を考えると、これは非常に明確なはずです。

XSDファイルを使用してWSDLを生成する場合、通常、次のようなことを行います(この手順の創造的な手順に注意してください)。

  1. xMLスキーマをWSDLにインポートします(wsdl:types要素)
  2. 必要に応じて、タイプまたは要素のセットに追加のもの、またはラッパー(たとえば、配列、または基本タイプを含む構造体)を追加します。 #1と#2の結果は、WSDLが使用するすべてのタイプを構成します。
  3. これらの以前に定義されたタイプに関して、一連の入出力メッセージ(および場合によっては障害)を定義します。
  4. ポートタイプを定義します。これは、in.outメッセージのペアのコレクションです。 port-typeは、Javaインターフェイスに類似したWSDLであると考えるかもしれません。
  5. ポートタイプを実装し、メッセージのシリアル化方法を定義するバインディングを指定します。
  6. バインディングを実装するサービスを指定します。

ほとんどのWSDLは多かれ少なかれ定型です。気が遠くなるように見えるかもしれませんが、それは恐らく恐ろしく豊富な山かっこのためです。

これは手間のかかるプロセスであると示唆する人もいます。多分。しかし、これは相互運用可能なサービスを構築する方法です。 WSDLを定義するためのツールを使用することもできます。コードからWSDLを動的に生成すると、相互運用の落とし穴が生じます。

27
Cheeso

この質問は古いことは知っていますが、答えに値します。私は個人的にWSDLを手動で作成し、SoapUIを使用してコンプライアンスをテストすることを好みます。ただし、場合によっては(特に複雑なWSDLの場合)、XSDから生成する方法が3つあります。

  1. Eclipseを使用してスキーマからWSDLを生成する(おそらく最も使いやすい)
  2. CXFを介したWSDLの生成(私のお気に入り)
  3. Spring WSを使用した規約によるWSDLの生成(一番好きではない)

私はCLIの男なので、CXFアプローチを好みます。 CLIがあれば、自動化できます(これが私のモットーです)。また、多くのフレームワーク固有の規則を使用しているため、Spring WSのアプローチが最も好きです。

Spring WSよりもCXFを知っている人が多いと思います(私は信じています)。そのため、新しいエンジニアに明確な利点やROIなしで学習曲線をもたらすことができるものはすべて、私が眉をひそめたものです。

また、生成されたWSDLは有効性とコンプライアンスをテストする必要があり(準拠するまで調整する)、アプリケーションが静的なwsdlを公開する(自動生成されたWSDLを返すのではなく)と言う必要はありません。

WS-I準拠のwsdlから始めて、アプリケーションが非準拠のwsdlを自動生成する(そして消費者に返す)ことは私の経験でした。

言い換えれば、自動マジックに注意してください。

6
luis.espinal

このツール xsd2wsdl は、最小限のWSDLを生成するApache CXFプロジェクトの一部です。

3
Vishnu

個人的に(そして、私が知っていること、つまりJavaと軸を考えて)、. xsdファイルからJavaデータモデルを生成します(Axis 2はこれを行うことができます)。そのモデルを使用するWebサービスを記述するインターフェイスを追加し、そのインターフェイスからWSDLを生成します。

.NETにはこれらの機能もすべて備わっているため、そのエコシステムでも同様にすべてを実行できる必要があります。

0
JeeBee

xsdからwsdlファイルを生成できますが、Eclipse(OEPE)のOracleエンタープライズパックを使用する必要があります。単にxsdを作成し、右クリック->新規-> wsdl ...