2009-05-09 12 views
1

私は単純なWebサービスを持っています。公開されたメソッドの1つは、 "Data"型のjavaオブジェクトを返します。このDataクラスには、 "getName()"というメソッドがあります。私はプロジェクトをコンパイルし、その上で "wsgen"を実行し、サービスを開始します(Tomcatやglassfishな​​どではなく、JDK6の組み込みHTTPサーバーを使用します)。Java Webサービス。メソッドが生成されない

これまでのところ、私のブラウザではwsdlが適切なURL。

しかし、そのwsdlを別のプロジェクトにインポートしようとすると、インポートプロセスで「データ」クラス(サーバープロジェクト内のクラス)が正常に作成されますが、そのクラス用に作成されたメソッドはありません私は "data.getName()"のようなことはできません。

私の問題は、サーバープロジェクトのDataクラスには存在しますが、クライアントプロジェクトではDataクラスが作成されてもgetName()メソッドは作成されませんwsdlインポートプロセスによって。

私は間違っていますか?

+0

クライアントプロジェクトで生成されたWSDLとデータオブジェクトを転記することはできますか? –

答えて

0

クライアントとサーバーの両方で、CLASSPATHにJARファイルが存在しないと、「データ」の意味を知ることができません。配布可能な共通のJARを作成する必要があります。

オブジェクトをWebサービスの署名に入れることは、非常に脆弱です。 Java以外のクライアントは決してあなたを使用できません。クラスへの変更がシステム全体に波及します。

契約で始まり、XMLスキーマ、JSON、またはRESTの観点から表現し、クライアントとサーバーがそのデータを適切なオブジェクトにマップできるようにするのがより一般的な方法です。私はあなたのWebサービスも同様のアプローチを取ることをお勧めします。

+0

私は他のクライアントが接続できないことに心配していません。このWebサービスは、1つの(Java)アプリケーション専用に構築されています。 他のプリミティブなデータ型に依存できない場合、そのサービスはあまり有用ではありません。私はすべてを文字列に直列化するつもりはない。 – user85116

1

WSDLにはメソッドのロジックに関する情報が含まれていないため、 内部オブジェクトのコードを生成できません。

単純な解決策は、生成されたクライアントサイドクラスをサーバーサイドを使用するクラスと置き換えることですが、これは悪いスタイルとみなされる可能性があります。

WSに渡されるオブジェクトは特別なロジックを持たない単純なデータ保持者でなければなりません プリミティブ型に限らず、JAXBは非常に複雑なオブジェクトも扱いますが、サーバーからコピーするカスタムロジック以外にはできませんクライアントはそのような振る舞いを標準化することはできず、コードの重複が発生します。

関連する問題