私は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[])
。ボーナスポイントについては、ApacheThriftやGoogleProtocolBuffersなどの代替のシリアライザー/デシリアライザーテクノロジーを使用できます。
編集:これの明らかな欠点は、それが顧客向けのWebサービスである場合、それがジャイブにならないことです。その場合は、具体的なパラメーターを持つWebメソッドを列挙する方がよいでしょう。