3

java.lang.Objectのパラメーターを持つWebメソッドを作成しようとしましたが、次のようなエラーが発生します:http: //community.jboss.org/message/532500

ある人はこれに次のように答えました。「JAXBでサポートされているタイプのWebメソッドパラメータのみを渡すことができます。java.lang.ObjectをWebメソッドパラメータとして渡すことはできません。」

実際、パラメータタイプをオブジェクト以外に変更すると、機能しました。

オブジェクトをWebメソッドパラメータとして渡すことができない場合、この背後にある理由と、単一のWebメソッドを介してさまざまなオブジェクトタイプを渡したい場合の状況を処理する方法は何ですか?

できればどうすればいいですか?

4

2 に答える 2

2

これを行うためのより良い方法は、別の投稿に対して彼が受け取った回答で概説されているOPとしてJAXBを使用することです-ここを参照してください:http://myarch.com/create-jax-ws-service-in-5-minutes

于 2011-07-20T06:44:49.103 に答える
2

私はJAXB/JAX-WSの大物ではありませんが、おそらく彼は正しいでしょう。

これに内部的に使用するパターンの1つは、Webサービスの境界を越えてオブジェクトを送信する場合、基本的にWS-Iプロファイルの語彙だけで表現できるものにオブジェクトをフラット化するため、オブジェクトを手動でシリアル化することです。送信しようとしていて、呼び出し元とサービスが理解する列挙型を介して逆シリアル化のプロセスのコンテキストを提供しようとしています。

次の簡単な例でDemuxEnumは、送信するすべてのタイプの値を含む列挙型になります。

MyObject obj = new MyObject();
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
ObjectOutputStream objectOut = new ObjectOutputStream(byteOutStream);       
objectOut.writeObject(obj);
objectOut.close();

byte[] serializedObject= byteOutStream.toByteArray();
someWSObject.SendObject(DemuxEnum.MyObjectType, serializedObject);

をとるWebサービスエンドポイントをすでに設定している場合(DemuxEnum, byte[])。ボーナスポイントについては、ApacheThriftGoogleProtocolBuffersなどの代替のシリアライザー/デシリアライザーテクノロジーを使用できます。

編集:これの明らかな欠点は、それが顧客向けのWebサービスである場合、それがジャイブにならないことです。その場合は、具体的なパラメーターを持つWebメソッドを列挙する方がよいでしょう。

于 2010-07-07T01:21:28.340 に答える