- - PR -
Axis の attachment のサンプルがうまくいきません。
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2002-11-25 21:05
はじめまして。玉田と申します。
AXISに付属しているサンプルでSOAP with attachmentsの動作 確認をしようとしているのですが、初心者のため作業が滞って しまっております。どなたか教えていただけないでしょうか? 開発環境としては以下のとおりです。 [センターサイド] 開発環境:Java2 SDK Standard Edition Version 1.3.1 Webサーバ:Tomcat Version 4.0.3 SOAP実装:apache Axis Version 1.0 XMLパーサ:Xerces (Xerces-J-bin.2.0.1) [ローカルサイド] Java実行環境:Java2 Runtime Environment SOAP実装:apache Axis Version 1.0 XMLパーサ:Xerces (Xerces-J-bin.2.0.1) 以上の環境で、インストールを済ませ、Axisのサンプルexample3 の文字列を返すMyServiceについてはローカルからセンターま での通信を確認しました。 ここで、早速attachmentのサンプルの実行に取り掛かり、次の ような手順で作業を進めました。 1.CLASSPATHを次のように設定。 set AXIS_HOME=c:\xml-axis-10 set CLASSPATH=.;C:\jdk1.3.1_03\lib set CLASSPATH=.;C:\Program Files\Apache Tomcat 4.0\bin set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\webapps\axis\WEB-INF\classes set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\webapps\axis\WEB-INF\classes\samples\userguide\example3 set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\webapps\axis\WEB-INF\classes\samples\attachments set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\axis.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\axis-ant.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-discovery.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-logging.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\jaxrpc.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\log4j-1.2.4.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\mailapi.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\saaj.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\wsdl4j.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\xerces.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\clutil.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\jsse.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\jdbc2_0-stdext.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\jndi.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\jta-spec1_0_1.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\naming-common.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\naming-resources.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\tools.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\tyrex-0.9.7.0.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\postgresql.jar set CLASSPATH=%CLASSPATH%;C:\Program Files\Apache Tomcat 4.0\common\lib\saaj.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\jnet.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\jcert.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\servlet.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\mail.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\mailapi.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\activation.jar set XERCES_HOME=C:\xerces-1_4_4 set CLASSPATH=%CLASSPATH%;%XERCES_HOME%\xerces.jar (どのjarファイルが本当に必要なのかよくわからなかったの でひたすらCLASSPATHに設定してしまいました。。) 2.サンプルのクラスからWSDLを作成。 C:\attachments>java org.apache.axis.wsdl.Java2WSDL -o EchoAttachmentsService.wsdl -lhttp://localhost:8080/axis/services/urn:EchoAttachmentsService samples.attachments.EchoAttachment 3.サンプルのクラスファイルをTomcatの\webapps\axis\WEB-INF\classes\samples\attachments にコピー。 4.サンプルのdeployit.cmdで以下のようにサービスへ登録。 C:\attachments>deployit.cmd -p80 deploy.wsdd 5.Tomcatの再起動。 6.クライアント用プロキシをWSDLから生成。 C:\samples\attachments>java org.apache.axis.wsdl.WSDL2Java --server-side EchoAttachmentsService.wsdl 7.生成されたスタブをコンパイルし、以下のクラスファイルが生成された。 EchoAttachment.class EchoAttachmentService.class EchoAttachmentServiceLocator.class UrnEchoAttachmentsServiceSoapBindingImpl.class UrnEchoAttachmentsServiceSoapBindingStub.class この中から、クライアントに必要な EchoAttachment.class EchoAttachmentService.class EchoAttachmentServiceLocator.class UrnEchoAttachmentsServiceSoapBindingStub.class と、元々サンプルプログラムの中に生成されていた EchoAttachmentsService&MemoryOnlyDataSource.class TestRef&MemoryOnlyDataSource.class TestRef.class をローカルサイドのC:\Satellite_tool\bin\samples\attachments にコピー。 8.ローカルサイドのC:\Satellite_tool\bin\samples\attachments に添付ファイル用にattach.txtを作成。 9.ローカルサイドでattachmentsを実行。 C:\Satellite_tool\bin\samples\attachments>java samples.attachments.EchoAttachment -lhttp://202.224.236.197/axis/services/urn:EchoAttachmentsService attach.txt この段階で上記を実行した際に以下のようなエラーが出てしま います。 Exception in thread "main" java.lang.NoSuchMethodError: main "main"メソッドが見つからないと言われてしまいます。 ちなみに、ローカルサイドのCLASSPATHの設定は以下のように なっています。 set AXIS_HOME=c:\xml-axis-10 set CLASSPATH=.;C:\jdk1.3.1_03\lib set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\samples\userguide\example3 set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\samples\attachments set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\axis.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\axis-ant.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-discovery.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-logging.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\jaxrpc.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\log4j-1.2.4.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\mailapi.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\saaj.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\wsdl4j.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\xerces.jar set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\clutil.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\jnet.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\jcert.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\servlet.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\mail.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\mailapi.jar set CLASSPATH=%CLASSPATH%;C:\jdk1.3.1_03\jre\lib\ext\activation.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\activation.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\axis.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\axis-ant.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\commons-discovery.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\commons-logging.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\jaxrpc.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\jcert.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\jnet.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\jsse.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\log4j-1.2.4.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\mail.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\mailapi.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\saaj.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\wsdl4j.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\xercesImpl.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\xmlParserAPIs.jar set CLASSPATH=%CLASSPATH%;C:\Satellite_tool\bin\lib\clutil.jar (こちらもどのjarファイルが本当に必要なのかよくわからな かったのでひたすら設定しちゃってます。。) jarファイル等のCLASSPATHの設定か、サーバサイドでのWSDL及び クライアントのプロキシ生成の段階で問題があったのかなどと 考えいろいろ情報を探し回ってるときにここにきました。 大変長くなってしまい申し訳ないのですが、どなたか良い解決 策を教えてください。 また、この検討を始めるようになってSOAP with attachments の情報を探し回っているのですが、どれもこういう技術があり ますくらいの紹介ばかりで、実際にサンプル等を動かした紹介 などがあまり見つけられません。このattachmentに特化した情 報をご存知の方いらっしゃいましたらこちらの方も是非教えて いただけたら幸いです。 それでは、よろしくお願いいたします。 玉田 |
|
投稿日時: 2002-11-26 11:52
ここのJavaFAQにもありますが、
シンプルに ・Java実行をかける際の大文字小文字指定(確認) ・ファイル表記分のインポート部分の記述ミス。 ・クラスファイルに.(ドット)をいれてクラス登録していない。 のどれかではないでしょうか? 最初のテストではうまくいっている事から、 ここらの見直しが先決でしょう。 これらに問題がない場合はまた表記してください。 次の段階に進めます。 *一つ一つ進めるのが、2次障害を防ぐ事につながると思い、記述しました。 |
|
投稿日時: 2002-11-26 14:59
早速のお返事ありがとうございます。
ご指摘の部分をもう一度確認してみました。 >・Java実行をかける際の大文字小文字指定(確認) センターサイドでのWSDLの作成、サービスの登録、クライアント用プロキシの生成、及び ローカルサイドのJava実行においては大文字小文字のタイプミスはありませんでした。 >・ファイル表記分のインポート部分の記述ミス。 この部分に関しては、サンプルプログラムのソースを一切いじっておりませんので大丈夫だと思いますが・・。その状態で先述の手順で文字列を返すexample3については、センターサイドでの折り返しの確認、及びローカルサイドからの通信も確認できました。 続いて同様の手順でattachmentのサンプルを実行し、センター内での折り返しについては以下のように通信が成功し、TCPモニタでも通信内容の確認ができました。これをローカルサイドで行うと投稿した内容のエラーになってしまいます。 [センター内でのattachment実行] C:\samples\attachments>C:\samples\attachments\testit.cmd -lhttp://localhost:8080 /axis/services/urn:EchoAttachmentsService attachtest.txt Going to compare the files.. Attachment sent and received ok! [TCPモニタ] ------=_Part_2_3093871.1038288023703 Content-Type: text/xml; charset=UTF-8 Content-Transfer-Encoding: binary Content-Id: <B8967A7DE60B500D48F30EE28F3F0C84> <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:echoResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:EchoAttachmentsService"> <returnqname href="cid:3792B200AD24BB11B8F31504EC280885"/> </ns1:echoResponse> </soapenv:Body> </soapenv:Envelope> ------=_Part_2_3093871.1038288023703 Content-Type: text/plain Content-Transfer-Encoding: binary Content-Id: <3792B200AD24BB11B8F31504EC280885> SOAP with Attachments Test ------=_Part_2_3093871.1038288023703-- >・クラスファイルに.(ドット)をいれてクラス登録していない。 それはCLASSPATHの設定のことでしょうか?設定は先述のようになっているのですが、まったくの初心者なもので設定方法が良くわかりませんでした。.(ドット)の使用例を教えていただけないでしょうか? 申し訳ありませんが上記の内容を含め、もう一度ご教授いただけないでしょうか? よろしくお願いいたします。 玉田 |
|
投稿日時: 2002-11-27 14:52
いきなりです、当方力不足で、申し訳ありません。
開発環境:Java2 SDK Standard Edition Version 1.4.01 Webサーバ:Tomcat Version 4.0.6 SOAP実装:apache Axis Version 1.0 XMLパーサ:Xerces (Xerces-J-bin.2.0.1) で試したのですが、同じような現象が起こります。 しかも解決するほど、これ以上あまり時間が取れない(どっちにせよ力不足です...とほほ) ので、お助けにならない内容ですが少し補足させてもらいます。 今まで行ってきました対応を振り返りまして、 やはり問題点が Exception in thread "main" java.lang.NoSuchMethodError: なので、ローカルの設定に起因する問題で ・クラス等の生成は問題なく執り行えている ・sample3の通信テスト(打ったものをリダイレクトして返答)ができている という事例も踏まえますと、通信系トラブルはばっさり切り捨ててよいかと思います。 "じゃあ、main呼び出しのトラブルは?"というと、まだまだでとほほの状態です... 他の方の知識のおすそ分けを待ってしまう、問題解決がすすまない状態となってしまいました。 通常このエラーなら、 ソースファイルな中のStatic部分が抜けてたり[]が抜けてたり といったようなところをまず見直すのですが今回の場合は.... 今回まったくお助けにならなかったので、 別のことですが少しでもお力になればと余談的な指摘をさせてください.... 1.クラスパスは set CLASSPATH=.;%AXIS_LIB%\xerces.jar;%AXIS_LIB%\saaj.jar;....%CLASSSSPATH% (set CLASSPATH=path1;path2;...) *表記上、1行ずつ追加している用に見えたので.....違ったらすいません。 といったように一行表示にした方が良いと思います。 2.AXISは4.0.6にあげられた方が良いと思います、セキュリティーの重大な問題が 見つかっております。 最後に重ねてお詫びを... お力になれず、本当にすいません....口を挟んだ形となってしまいまして..... もちろん、何か情報ゲットしましたらばお知らせします。 |
|
投稿日時: 2002-11-27 16:41
思い出したようで何ですが、
最適化オプションをはずしても同じでしょうか? うるおぼえで恐縮ですが...たしかそのようなエラーの場合、 こんな対処もあったかと.... ちょっと今別環境にいるので、まだ自分のところでテストできませんが.... |
|
投稿日時: 2002-11-27 20:56
crestさん、同環境で確認までしていただいてありがとうございます!
同じような現象になってしまうということは、初心者ゆえの初歩的なミスだけの問題ではない気もしますね・・・。 確かにこの現状では通信系のトラブルは関係ないだろうと思い、クラスパスやjarファイルの配置を確認し、色々試してみたのですが、今度は Exception in thread "main" java.lang.NoClassDefFoundError: EchoAttachment (wrong name: samples/attachments/EchoAttachment) とエラーが出て、EchoAttachmentが見つからないと言われてしまいました。いずれにせよクラスパスが深く関わっていると思うのですが。。 ご指摘の個所についてですが、まずクラスパスはバッチファイルを作成し、その中に先述のように一行ずつ記述し、プロンプト上で実行して設定を行いました。バッチファイルにする場合は私の方法であっていますよね?(ここが一番自信がないもので・・・。) あと、 >Axisは4.0.6にあげられた方が良いと思います これは、tomcatの4.0.6ということですか?セキュリティーの問題が出ていたのですね。これは早速試してみます。 最後に、最適化オプションというのは-oオプションのことですか?私の場合WSDLを作成するときに使っていますが、これはWSDLファイルの名前を指定するオプションだと思っていたのですが・・・。すいません、初心者で的外れな回答だったらごめんなさい。最適化オプションとはどのことを指すのでしょうか? 初歩的な質問ばかり繰り返して申し訳ありません。ご指摘いただいた項目でもう一度格闘して、再度報告いたします。 また何かわかりましたら是非お力をお貸しください。 玉田 |
|
投稿日時: 2002-11-28 00:57
クラスパスの問題化と思います。
元々存在しているsamples.attachments.EchoAttachmentではなく、 WSDLから自動生成したsamples.attachments.EchoAttachmentを見ているのではない でしょうか? WSDLからクライアントスタブを自動生成させているのはなぜですか? |
|
投稿日時: 2002-11-28 14:25
kanさん、ご回答ありがとうございます。
クライアントスタブの作成についてですが、参考資料やWeb等で調べまわったところ 「クライアントスタブはWSDLから自動生成する」という情報しか得られなかったので それにしたがってしまいました。そのためにサンプルにはWSDLは含まれてなかったので 最初にWSDLを作成し、そこからJava2WSDLで自動生成させました。 この手段のほかにクライアントスタブの作成方法があるのですか?基本的な質問なのかも しれませんが、ご教授願えますか? よろしくお願いいたします。 玉田 |
