- PR -

ApacheAxisでのarrayMapping

1
投稿者投稿内容
kazz
会議室デビュー日: 2006/01/20
投稿数: 3
投稿日時: 2006-01-20 18:13
はじめまして、kazzと申します。
いつもこの会議室を覗いているのですが、書き込ませていただくのは初めてです。


ApacheAxis 1.3とTomcat5.5を使ってWebサービスの勉強をしています。

Axisで配列を返す「Item[] getItems();」というWebサービスのインタフェースを定義したところ以下のような「href」と「id」を使うSOAPメッセージになってしまいました。

SOAPメッセージの内容を、直接処理するプログラムから扱いたいのですが、配列の内に直接データを記述する方法はありませんでしょうか?私の現在の知識では、WSDD内の「arrayMapping」に適切な記述をすればいいとは思うのですが、方法がわかりません。

<getItems soapenc:arrayType="ns1:Item[20]" xsi:type="soapenc:Array">
<Item href="#id0"/>
  <Item href="#id1"/>
  <Item href="#id2"/>
  ・・・・・
</getItems>
<multiRef id="id0" xsi:type="ns2:Item">
<body xsi:type="soapenc:string">ああああ</body>
<head xsi:type="soapenc:string">aaaaa</head>
</multiRef>

初心者ですが、よろしくお願いします。
tnk
会議室デビュー日: 2005/06/10
投稿数: 11
投稿日時: 2006-01-23 11:28
この辺は参考になりますか?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2950&forum=12&2

WSDDの<arrayMapping>
(内容は本件とは関係ないですけど、arrayMappingが使われてたので。。。)
http://forum.java.sun.com/thread.jspa?threadID=629336&tstart=60

あと、素朴な疑問なのですが、
Axisでは、インターフェースを定義するだけでWebサービスが作成できるのですか?
# 実装は書かなくて良いの?
kazz
会議室デビュー日: 2006/01/20
投稿数: 3
投稿日時: 2006-01-24 14:57
返信ありがとうございます。あれから、いろいろ探してみているのですが、未だに解決策を見つけれないでいます。

>この辺は参考になりますか?
>http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2950&forum=12&2

この問題は、Axisの問題というよりもJavaでのプログラミングのミス
だったようですので、あまり関係ないように思えます。

>WSDDの<arrayMapping>
>(内容は本件とは関係ないですけど、arrayMappingが使われてたので。。。)
>http://forum.java.sun.com/thread.jspa?threadID=629336&tstart=60

これも標準的なarrayMappingの方法を挙げていて、この方法でやると私のような
「href」と「id」を使ったSOAPメッセージになってしまいます。

>あと、素朴な疑問なのですが、
>Axisでは、インターフェースを定義するだけでWebサービスが作成できるのですか?
># 実装は書かなくて良いの?

AXISでは、JAVA2WSDLとWSDL2Javaというツールが用意されていて、Javaでインタフェース記述を行ったものから、WSDL文章の自動生成とWSDL文章からWebサービスのスケルトン(プロキシ)コードの生成ができます。

また、JavaのオブジェクトをSOAPメッセージにシリアライズする、BeanMappingとArrayMappingの機能が提供されており、Webサービスの開発者はXMLやWebサービスを意識することなく開発ができるようになっています。

そして、このBeanMappingやArrayMappingを提供するクラスをWSDDファイル内で指定することにより、任意の方法でシリアライズ可能なアーキテクチャになっています。


最終的な手段としては、ArrayMappingを行うクラスを自作してWSDDで指定してやればできるのですが・・・。より簡単な方法はないかと思い、投稿させていただいた次第です。
tnk
会議室デビュー日: 2005/06/10
投稿数: 11
投稿日時: 2006-01-25 00:25
引用:

>この辺は参考になりますか?
>http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2950&forum=12&2

この問題は、Axisの問題というよりもJavaでのプログラミングのミス
だったようですので、あまり関係ないように思えます。


問題が同じというより、実装例として参考になるかと思い挙げました。
# PGミスの部分を直せば、ちゃんと動くみたいですし。。。

引用:

AXISでは、JAVA2WSDLとWSDL2Javaというツールが用意されていて、Javaでインタフェース記述を行ったものから、WSDL文章の自動生成とWSDL文章からWebサービスのスケルトン(プロキシ)コードの生成ができます。


私の思い違いだったら申し訳ないのですが、
WSDL2JavaはWSDLからWebサービスのクライアントを作成する時に使うコマンドだったように思うのですが。。。

サーバ側のコードを載せていただくことは可能でしょうか?
# Item[] getItems()メソッドだけでよいので。。。
kazz
会議室デビュー日: 2006/01/20
投稿数: 3
投稿日時: 2006-01-25 12:46
引用:

私の思い違いだったら申し訳ないのですが、
WSDL2JavaはWSDLからWebサービスのクライアントを作成する時に使うコマンドだったように思うのですが。。。

サーバ側のコードを載せていただくことは可能でしょうか?
# Item[] getItems()メソッドだけでよいので。。。



WSDL2Javaコマンドにパラメータ「-s」を与えると、サーバ側のWebサービス実装が作成できます。

以下が、サーバ側のコードです。

----TestServiceSoapBindingImpl.java----
package test;
public class TestServiceSoapBindingImpl implements TestService{
  public Item[] getItems() throws RemoteException {
    return new Item[]{new Item("no1"),new Item("no2")};
  }
}

----TestSerivce.java----
package test;
public interface TestService extends java.rmi.Remote {
  public Item[] getItems() throws java.rmi.RemoteException;
}

また、WSDDの該当部分は以下のように生成されました。
<arrayMapping
 xmlns:ns="http://test"
 qname="ns:ArrayOfItem"
 type="java:test.Item[]"
 innerType="cmp-ns:Item" xmlns:cmp-ns="http://test"
 encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>

Javaプログラムはこんな形で単に配列を返すものとして生成されています。

英語サイトなどもしらみつぶしに読んでいますが、なかなか解決策が見つけれません。
1

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