- PR -

AXIS SOAP クライアントから渡ってきた任意のオブジェクト配列をサーバ側で受け取る方法について

1
投稿者投稿内容
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 2004-09-02 14:31
最近AXISを使ったWEBサービスの開発を始め他ばかりのものです。
現在クライアント/サーバ共にJavaでの開発を行っています。
そこでクライアントから任意のオブジェクト配列をサービスに渡したいと考えていますがやり方が分かりません。
現在分かっていることとしては、今回やろうとしているオブジェクト配列をサーバからクライアントにレスポンスを返す場合に関しては
WSDDのtypeMappingを設定する事でできるというところまでは分かっていますが
今回のクライアントからサーバにリクエストを投げる方法がわかりません
サーバ側のJavaソースを作成するところまではできましたが、おそらくWSDDでのデプロイが上手くいっていないものと考えています。
実際にAdminClientでデプロイしてもAXISのサービスに追加されることがありませんでした
どのようにWSDDを設定したら動かす事ができるのでしょうか

また、本題とはズレてしまいますが
正直今回の質問は私の勉強が足りなさ過ぎる事が一番の原因だと思いますが
どのように皆さんは覚えられたのでしょうか
私の周りにはSOAPに関して詳しい人はいません
その為、本やインターネットで調べる事がベストだと思いますが
調べてもあまりにも簡単すぎる(HelloWorldレベル)のものしか見つけることができませんでした
そこで、お勧めのWEBサイトなどがあれば教えてください。
できれば英語ができないので日本語ページを教えていただけると嬉しいです。

以上、よろしくお願い致します


----サービスのインタフェース------------------------------------
public interface IRepareAcceptService {
public int putFile(RepareAcceptBean[] bean) throws Exception;
}

----サービスのクラス--------------------------------------------------------
public class RepareAcceptService implements IRepareAcceptService throws Exception
{
public RepareAcceptService()
{
}

public int putFile(RepareAcceptBean[] bean) throws Exception
{

String[][] strRepareData = new String[bean.length][3]
for(int i = 0; i < bean.length; i++)
{
strRepareData[i][0] = bean[i].getStrReqAgencyCD();
strRepareData[i][1] = bean[i].getStrTechCD();
strRepareData[i][2] = bean[i].getStrTechAcptNum();
}

return 0;
}
}

----任意のオブジェクト--------------------------------------------------
public class RepareAcceptBean
{
private String strReqAgencyCD = null;
private String strTechCD = null;
private String strTechAcptNum = null;

public RepareAcceptBean()
{
}

public String getStrReqAgencyCD() {
return strClaimAddr;
}
public void setStrReqAgencyCD(String strReqAgencyCD) {
this.strReqAgencyCD = strReqAgencyCD;
}

public String getStrTechCD() {
return strTechCD;
}
public void setStrTechCD(String strTechCD) {
this.strTechCD = strTechCD;
}

public String getStrTechAcptNum() {
return strTechAcptNum;
}
public void setStrTechAcptNum(String strTechAcptNum) {
this.strTechAcptNum = strTechAcptNum;
}


----WSDD-------------------------------------------------------------
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name="CruiseRepareAcceptService" provider="java:RPC">
<parameter name="className" value="cruise.service.RepareAcceptService"/>
<parameter name="allowedMethods" value="putFile"/>

<typeMapping
xmlns:ns="http://service.cruise"
qname="ns:RepareAcceptBean"
type="java:cruise.service.RepareAcceptBean"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
<typeMapping
xmlns:ns="CruiseRepareAcceptService"
qname="ns:int"
type="java:int"
serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
/>
</service>
</deployment>



uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-02 15:26
デプロイに失敗する、とのことですが、エラーは出ていないのでしょうか。

参考になる本やサイトとのことですが、私に関して言えば以下の本を読んでいます。
http://www.amazon.co.jp/exec/obidos/ASIN/4797320680

それ以外はJavaWorldとか、適当に検索したWebサイトなどから情報を得ていますが、基本的
にはAxisのドキュメントを読んでいます。ただ、場合によっては試行錯誤になることもありますね。
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 2004-09-02 19:28
早速の返答ありがとうございます。

エラーに関してですが一切出ておりません。
状況としては、AdminClientでデプロイを行った場合次のように結果が返ってきます。

---実行結果-------------------
$ java org.apache.axis.client.AdminClient AcceptDeploy.wsdd
- Processing file AcceptDeploy.wsdd
- <Admin>Done processing</Admin>

------------------------------

となり、デプロイが正常終了ように見えましたが
サービス一覧(http://localhost/axis/servlet/AxisServlet)で確認したところ
追加したはずのサービスが一覧にありませんでした。



uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-03 15:10
引用:

TSUYOSHIさんの書き込み (2004-09-02 19:28) より:
早速の返答ありがとうございます。

エラーに関してですが一切出ておりません。
状況としては、AdminClientでデプロイを行った場合次のように結果が返ってきます。

---実行結果-------------------
$ java org.apache.axis.client.AdminClient AcceptDeploy.wsdd
- Processing file AcceptDeploy.wsdd
- <Admin>Done processing</Admin>

------------------------------

となり、デプロイが正常終了ように見えましたが
サービス一覧(http://localhost/axis/servlet/AxisServlet)で確認したところ
追加したはずのサービスが一覧にありませんでした。



server-config.wsddに設定が追加されているかどうか確認してみてください。
また、アプリケーションサーバ(何を使われているのかわかりませんが)を再起動してみたら
どうなりますか?
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 2004-09-03 15:51
こちらで色々といじっていたらサービスに追加する事ができました。
問題であったのはWSDDの文字コードでした。
もともとの文字コードはSJISでしたが、UTF-8に変更する事で問題が解消されました

そこで質問なんですが
SJISの時点でAdminClientを使用し、デプロイを行なったところ
server-config.wsddには設定されていませんでした。
また試しにWSDD自体を間違った表記(今回はserviceタグをviceと言う名前に変更)にしてデプロイを行なったところ、AdminClientの実行結果は通常通り終了しました。
server-config.wsddにも設定されていませんでした。

そもそもAdminClientは正常にサービスを追加する事ができなくとも正常終了するものなんでしょうか?

実行環境はapache2.0.46+tomcat4.1.24+axis1.0です。


[ メッセージ編集済み 編集者: TSUYOSHI 編集日時 2004-09-03 15:55 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-09-03 16:02
Axis 1.0ですか? ずいぶん古いバージョン使ってますね。
文字コードの問題については、XMLパーサによってはエンコーディング設定を読んでくれず、
UTF-8決めうちでパースするものがありますからそのせいですかね。

AdminClientは私は使ったことありません。いつもserver-config.wsddを直接いじってます。
TSUYOSHI
常連さん
会議室デビュー日: 2004/09/02
投稿数: 32
投稿日時: 2004-09-06 19:12
ukさん、
色々と教えていただき、ありがとうございました。
まだまだ分からない事だらけですが、
頑張って調べてみたいと思います。
1

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