- - PR -
JAXMについての質問
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-04-24 14:46
現在、JAXMを使用してメッセージのやりとりをする
簡単なサンプルを作成しています。 Webで公開されているサンプルを手本にやっているのですが、 送信はうまくいっても、返信がうまくいきません。 以下に実行結果をします。 --サンプル実行結果--
------------------- 上記コードの下側のSOAPメッセージが返信の内容ですが、 その中に
というエラーがあります。 Namespaceに関するエラーかなと思い、いろいろ試してみたのですが、 どうしてもわかりません。 このエラーの原因がわかる方いらっしゃいましたら 教えてください。 下記は、作成したアプリケーションの概要とコードです。 --クライアント側-- メッセージを作成し、サーバへ送る -----------------
--サーバ側-- メッセージをそのまま返す ------------
| ||||||||||||||||
|
投稿日時: 2003-04-25 10:52
ども、ほむらです。
-------------------------------- SOAPメッセージのエラーというよりも JAVAのソース単位のようなきがします。。。。 マルチになってしまうけどJAVAの方で聞いてみたほうがいいかもしれませんよ。 とりあえず、SUNにある参考資料のアドレスを張っておきます。 http://java.sun.com/xml/docs.html Guides and Tutorials Java Web Services Tutorial から、 HTMLかPDFを を選んで左フレームのChapter12にクライアントとサーバー側のコードが 載ってます。(どこかに(笑)) ただ、サーバー側はもっと複雑なつくりになっているみたいですが・・・ 参照先を間違えていたので修正^^;;;;; [ メッセージ編集済み 編集者: ほむら 編集日時 2003-04-25 10:55 ] | ||||||||||||||||
|
投稿日時: 2003-04-25 12:38
はじめまして、いたちと申します。
送信先URLが次のようになっていますが、 SOAPMessage reply = scon.call(smsg,"http://localhost:8080/axis/services/HellowJAXMServlet?wsdl"); 最後の?wsdlはいらないのではないでしょうか? あと、Envelopeの内容を標準出力に出していますが、SOAP Messagingを行うのであれば、Apache AxisについているTCP Monitorを使うと実際の通信内容がわかって良いと思いますよ。 ではでは | ||||||||||||||||
|
投稿日時: 2003-04-25 12:55
ほむらさん、いたちさんご指摘ありがとうございます。
確かに「?wsdl」はいりませんでした。いろいろ試しているうちに 付いてしまっていたようです。 TCPモニタでも確認をしたのですが、ヘッダ情報が加わって 後は同じ結果が見えるだけです。ヘッダ情報で問題を探るポイントなど あれば教えて頂きたいのですが、 まずはほむらさんに紹介して頂いたチュートリアルを隅々読んでみます。 [ メッセージ編集済み 編集者: ken 編集日時 2003-04-25 12:59 ] | ||||||||||||||||
|
投稿日時: 2003-04-25 13:04
いたちです。
もしかして、もしかしたら "http://localhost:8080/axis/services/HellowJAXMServlet?wsdl" のwが余計とか(Hellowになってる)? # 違ってたらごめんなさい。 | ||||||||||||||||
|
投稿日時: 2003-04-25 16:52
ご指摘ありがとうございます。
私ももしかしてと思い、確認してみましたが 実際のコードではAxisに登録されているサービス名を クライアントで使用していました。 会議室に投稿する為に作成したコードが間違っていたようです。 大変失礼致しました。気をつけます。 ここで、一つ分かったことがあるのですが、 Axisに登録されているWebサービスは「HelloJAXMServlet」 ですが、クライアントでWebサービスを呼び出すURLとして "http://localhost:8080/axis/services/HelloJAXMServlet" としても "http://localhost:8080/axis/services/HellowJAXMServlet" としても 同じ結果が返ってきてしまいます。 これはAxisへの登録がまずい証拠なのかな・・・と思っております。 以下にAxisへの登録で使用したwsddファイルを記載します。 ※HelloJAXMServletはServer2パッケージに入っています。 ご意見ございましたら宜しくお願いいたします。
| ||||||||||||||||
|
投稿日時: 2003-04-28 02:46
ブラウザで「http://localhost:8080/axis/services/HelloJAXMServlet?wsdl」
にアクセスするとどうなりますか? ところでAxisにはjavax.xml.messaging.JAXMServletはないと思うのですが。 | ||||||||||||||||
|
投稿日時: 2003-05-29 11:13
中込です。
まず、理解していただきたいことは、JAXMとAXISのアーキテクチャとサーバ側フレームワークです。 javax.xml.messaging.JAXMServletを継承し、javax.xml.messaging.ReqRespListenerインタフェースを実装したクラス(サービス)は、 Servletコンテナに配備し、Servletとしてサービスリクエスタからのメッセージを待ち受け、処理し、応答を返します。 この場合、HTTPのPOST要求でメッセージが到着すると、そのメッセージをパラメータ(javax.xml.soap.SOAPMessage)として、 当該クラスのonMessageメソッドが呼ばれます。この場合のシグネチャは以下のようになります。 SOAPMessage onMessage( SOAPMessage message ); 一方AXISでは、制約はありますが、任意のJavaクラスをサービスとして配備するための仕組みを提供します。 HTTPをトランスポートにした場合、AXISエンジンの一部が、ServletとしてServletコンテナに配備され、 このServletを介して受信したSOAPメッセージを、AXISエンジン上に配備された任意のクラス(サービス)の 任意名のメソッドに通知するのです。java:MSG型(Messageサービス)で配備する場合、有効なシグネチャは以下の4つです。 public Element [] method(Element [] bodies); public SOAPBodyElement [] method (SOAPBodyElement [] bodies); public Document method(Document body); public void method(SOAPEnvelope req, SOAPEnvelope resp); さて、あなたのサービスについてですが、JAXMServletを継承しているにもかかわらず、Servletとして配備するのではなく、 AXISのMessageサービスとしてAXIS上に配備しようとしてらっしゃるようです。もちろんそれでも利用できないわけではありませんが、 その場合に必要なシグネチャを満たしていません。 |
1