- PR -

WebサービスのtypeMappingについて

1
投稿者投稿内容
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-10-14 18:37
こんにちわ。

現在、Webサービスを習熟中ですが一点質問させてください。

j2sdk1.4
tomcat5.0
apacheaxis1.1

HashMapをクライアント・サーバ間でやり取りを行いたいのですが
typeMappingでつまづいてしまいます。


HashMapを引数にしたサービスを作成し、デプロイすると
以下のようなwsdlが生成されます(一部抜粋)

- <wsdl:types>
- <schema targetNamespace="http://xml.apache.org/xml-soap" xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
- <complexType name="mapItem">
- <sequence>
<element name="key" nillable="true" type="xsd:string" />
<element name="value" nillable="true" type="xsd:string" />
</sequence>
</complexType>
- <complexType name="Map">
- <sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" type="apachesoap:mapItem" />
</sequence>
</complexType>
</schema>
</wsdl:types>


ここでHashMapに対する定義が二つに分かれています。
MapとmapItemです。

関係はなんとなく理解できますが。



そして、クライアント(.NET)からプロキシを作成し、アクセス
すると以下のエラーが出ます。


org.xml.sax.SAXException: No deserializer for {http://xml.apache.org/xml-soap}mapItem



デプロイに使用したwsddのtypeMapping設定ではMapSerializerの設定しか
記述していません。

従って、mapItemの記述もしないといけないのかな、となんとなくは
思っているのですが、納得もいきません。


というのは、mapItemのtypeMapping設定をするとしたら、一体何の
Serializerを使用すればいいのかがわかりません。BeanSerializer
でしょうか。

BeanSerializerならば、mapItemクラスが必要になるはずですが
そんなクラスは作っていません。まさか作らなくちゃいけない
のでしょうか?


webサービスでHashMapをやり取りする場合、私が行った上記設定
以外に何か設定が必要でしょうか?
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-10-15 17:51
本来ならばweblogic8を使用することになるのですが
そちらの情報でもいいのでお持ちの方はいらっしゃ
らないでしょうか。

weblogic8の場合は、マニュアルを見る限り、サポート
される非組み込み型にMapがないのですが、この場合
はシリアライザーを自分で作成しなければならないの
でしょうか?
SJ0392
ベテラン
会議室デビュー日: 2004/02/05
投稿数: 62
お住まい・勤務地: 神奈川・横浜
投稿日時: 2004-10-20 12:54
下記サイトに「NET ではハッシュテーブルを扱うことができません。」との記述がありました。
http://ws.apache.org/~toshi/jp-site/axis/java/user-guide.html
引用:

Java の Collection
Hashtable のように、Collection クラスのいくつかはシリアライザを持っていますが、他の SOAP 実装との正式な相互運用性はなく、また SOAP 仕様では複雑なオブジェクトについて扱っていません。オブジェクトの集合を送信する最も確実な方法は、配列を利用することです。Java による SOAP 実装の多くは、ハッシュテーブルのマーシャルとアンマーシャルを行えますが、とりわけ .NET ではハッシュテーブルを扱うことができません。



HashMapの変わりにJavaBeanクラスを作成し、BeanSerializerにて動作させるのはどうでしょうか?
JavaBeanクラスを配列にすれば、HashMapと大差はなくなるかと思います。

簡単な例が下記サイトにありますので、ご参照下さい。
http://www.webcom-corp.co.jp/project/project_java/021118/tips0002.html
(株)ぽち
ぬし
会議室デビュー日: 2002/09/10
投稿数: 376
投稿日時: 2004-10-20 14:45
こんにちわ。

実機ではWebLogic8.1を使用する予定ですが
こちらでもHashMapなどのMap系はサポート
されていませんでした。

AxisではBeanSerializerなる便利なクラスが
ありますが、WebLogicでは自作Beanを使用する
場合はSeriarizerを作成する必要があるみたいです。

結構めんどくさいのでListでも使おうかと考え中です。
1

スキルアップ/キャリアアップ(JOB@IT)