[Seasar-user:12057] [S2Axis2] Entityを返すサービス作成について教えてください.
Applied_MATSUDA Masaaki
[E-MAIL ADDRESS DELETED]
2007年 12月 12日 (水) 16:20:14 JST
TigerCatです.いつもお世話になっております.
現状,問題の状況がよく把握できていないので,質問ベースと
なってしまいますが,お付き合いください.
Seasar2プロダクトをベースとした稼働中のシステムがあるの
ですが,それで動いているDBアクセスがらみのサービスクラス
を新規開発のシステムから利用しようと考えております.
このサービスクラス(仮にHogeService/HogeServiceImpl)は,
DB検索用のメソッドを実行すると,List<HogeEntity> を返す
ことになっています.
ということでこれなる定義でS2Axis2にディプロイしました.
<component
name="HogeService"
class="hoge.service.impl.HogeServiceImpl">
<meta name="axis-service"/>
</component>
新規開発のシステムでは,ちょっと省略しますがプロキシの
ところに関してはこんなふうに設定しています.
<component
name="HogeService"
class="hoge.service.HogeService">
<aspect>ioRemoting</aspect>
</component>
そして利用している部分は
List<HogeEntity> hogeEntities
= hogeService.findFuga();
for(int index=0;index<hogeEntities.size();index++) {
HogeEntity hogeEntity
= (HogeEntity)hogeEntities.get(index);
String a = hogeEntity.getId().getFugaId();
String b = hogeEntity.getNote();
...
}
という具合です.
では,この新規開発のほうを動かしますと,ちゃんと既存
システムのhogeServiceのメソッドが動いて,結果を返して
くれているところまで確認できています.
しかし,新規のほうで受け取ったところあたりでException
が発生してしまうのです.
ERROR
org.apache.axis2.rpc.receivers.RPCMessageReceiver -
Exception occurred while trying to invoke service
method findFuga
org.apache.axiom.om.OMException:
java.lang.RuntimeException:
org.apache.axis2.AxisFault:
Mapping qname not found for the package:
hoge.entity
これは一体・・・
S2Axis2のドキュメント
http://s2axis.seasar.org/ja/s2axis2/examples.html
の「引数/戻り値としてBeanを使用する」には
|プリミティブ型(およびそのラッパクラス型)を使用して
|いる場合は、特に何も指定しなくても動作します。
と書いてあるわけですが,このあたりがひっかかります.
HogeEntityは,ManyToOneでマスタと外部キーの関係を
持っているのですが,そういう場合だとHogeEntityの
中には
private Master id;
public Master getId(){
return this.id;
}
というようなMasterエンティティのクラスもあちこちで
登場しているので,そのあたりが怒られポイントなのか
なぁ,などと悩んでいるところです・・・
そんな感じでして,このようにEntityを返すサービスを
S2Axis2でリモート提供する場合に注意すべき点などが
ありましたら教えてください.
環境:S2Container 2.4.17, S2Axis2 0.3.0
何卒よろしくお願い致します.
p.s.
メソッドをオーバーロードしているサービスクラスは,
WSDLの制限上,利用できないんですね・・・
代替方法とかで,なんとかできたりしませんでしょうか?
既存クラスがそうなっちゃってるのでオーバーロードを
なんとかせいといわれても・・・(汗) ですよね.
Seasar-user メーリングリストの案内