- PR -

Axis の attachment のサンプルがうまくいきません。

投稿者投稿内容
くろ
会議室デビュー日: 2002/11/25
投稿数: 5
投稿日時: 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に特化した情
報をご存知の方いらっしゃいましたらこちらの方も是非教えて
いただけたら幸いです。

それでは、よろしくお願いいたします。

玉田

crest
会議室デビュー日: 2002/11/26
投稿数: 5
投稿日時: 2002-11-26 11:52
ここのJavaFAQにもありますが、
シンプルに
・Java実行をかける際の大文字小文字指定(確認)
・ファイル表記分のインポート部分の記述ミス。
・クラスファイルに.(ドット)をいれてクラス登録していない。
のどれかではないでしょうか?
最初のテストではうまくいっている事から、
ここらの見直しが先決でしょう。
これらに問題がない場合はまた表記してください。
次の段階に進めます。
*一つ一つ進めるのが、2次障害を防ぐ事につながると思い、記述しました。
くろ
会議室デビュー日: 2002/11/25
投稿数: 5
投稿日時: 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の設定のことでしょうか?設定は先述のようになっているのですが、まったくの初心者なもので設定方法が良くわかりませんでした。.(ドット)の使用例を教えていただけないでしょうか?

申し訳ありませんが上記の内容を含め、もう一度ご教授いただけないでしょうか?
よろしくお願いいたします。

玉田
crest
会議室デビュー日: 2002/11/26
投稿数: 5
投稿日時: 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にあげられた方が良いと思います、セキュリティーの重大な問題が
見つかっております。

最後に重ねてお詫びを...
お力になれず、本当にすいません....口を挟んだ形となってしまいまして.....
もちろん、何か情報ゲットしましたらばお知らせします。
crest
会議室デビュー日: 2002/11/26
投稿数: 5
投稿日時: 2002-11-27 16:41
思い出したようで何ですが、
最適化オプションをはずしても同じでしょうか?
うるおぼえで恐縮ですが...たしかそのようなエラーの場合、
こんな対処もあったかと....
ちょっと今別環境にいるので、まだ自分のところでテストできませんが....
くろ
会議室デビュー日: 2002/11/25
投稿数: 5
投稿日時: 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ファイルの名前を指定するオプションだと思っていたのですが・・・。すいません、初心者で的外れな回答だったらごめんなさい。最適化オプションとはどのことを指すのでしょうか?

初歩的な質問ばかり繰り返して申し訳ありません。ご指摘いただいた項目でもう一度格闘して、再度報告いたします。
また何かわかりましたら是非お力をお貸しください。

玉田
kan
ベテラン
会議室デビュー日: 2002/11/28
投稿数: 55
投稿日時: 2002-11-28 00:57
クラスパスの問題化と思います。

元々存在しているsamples.attachments.EchoAttachmentではなく、
WSDLから自動生成したsamples.attachments.EchoAttachmentを見ているのではない
でしょうか?

WSDLからクライアントスタブを自動生成させているのはなぜですか?
くろ
会議室デビュー日: 2002/11/25
投稿数: 5
投稿日時: 2002-11-28 14:25
kanさん、ご回答ありがとうございます。

クライアントスタブの作成についてですが、参考資料やWeb等で調べまわったところ
「クライアントスタブはWSDLから自動生成する」という情報しか得られなかったので
それにしたがってしまいました。そのためにサンプルにはWSDLは含まれてなかったので
最初にWSDLを作成し、そこからJava2WSDLで自動生成させました。
この手段のほかにクライアントスタブの作成方法があるのですか?基本的な質問なのかも
しれませんが、ご教授願えますか?

よろしくお願いいたします。

玉田

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