Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

S2Axis2について

S2Axis2(WEBサービス)のサイトには、サンプルでは、同一プロジェクト内にWEBサービスクライアントが存在していますが
別プロジェクトから、WEBサービス参照は出来ないのでしょうか?以下、サイトにサンプルがあります。

http://s2axis.seasar.org/ja/

すみません、横着な質問で。普通、別プロジェクトからWEBサービスは起動できますよね?

18

回答

4977

閲覧

18件の回答

評価

0

やってみれば?

評価

0

すみません、出来なかったので、質問しています。
サンプルを他のプロジェクトから呼ぶ方法がいまいち
分からなくて・・・。WEBサービスの呼び出し方の実装が
分からないのです。テストモジュールで上がっているクライアントソースを別プロジェクトに持っていきますが
WEBサービスのクラスを参照しているため、エラーが出るので、当然といえば当然ですが。参照先がないとなるので。
WS-GENで作成したWEBサービスでクライアントもコマンドで生成したのですが、そちらは、サーバに接続するためのロジックが組まれており、プロジェクトを分けてもうまくいきました。ただ、今回、S2Axis2で実装しないといけないので、クライアントからの呼び出しがプロジェクトを別のものからだとどうすれば良いのか、サイトを見てもいまいちわかりませんでした。

評価

0

別にWeb開発に限らず、別のプロジェクトにあるクラスはプ
ロジェクト参照するか、jarを作って参照するかで見えるだろ
う。

評価

0

それだと、WEBサービスの意味がないのでは?
WEBサービスが何かご存じですか?
SORP通信等を介してWEBメソッドを実行し結果を取得するものですよ。

評価

0

サーバを作り、その内部ロジックを別の箇所からも参照した
いように読めたんだが、単にクライアントを作りたいだけな
のか?

クライアントは既に自分で書いてるように、スケルトンを生
成してそこへ肉付けする。

クライアントプロジェクトが複数あるならそのプロジェクト
ごとに生成するし、そのクライアントプロジェクトのモジュ
ールを使ったプロジェクトを作りたいなら、まずはクライア
ントプロジェクトをjarにして参照させる(開発時はプロジェ
クト参照でもいいが)。

まずは自分の説明で状況を伝えられているかを疑うことだ。

評価

0

ご意見ありがとうございます。
ただ単にクライアントを作り、サーバを呼べるようにしたいのですが、サンプルでは、
同一プロジェクトなので、あまりWEBサービスの意味がないと思ったのです。
実際にはサーバ側とクライアント側は別において、セキュアなサイトのWEBサービスを別のプロジェクトで管理しているクライアントモジュールで呼び出し、データを参照する、という形です。Jarで参照してはあまり意味がなく
WEBサービスのWDSLファイルかサイトの指定でメソッドを呼び出し、データを参照するということです。
VB.NETだと簡単に作れたのですが、JAVAだとサービスからクライアントまで一苦労いる状態で・・・。

要は、外部のサーバから別のサーバへWEBサービス経由でアクセスしデータを取得するということがしたいのです。クライアントはまた別のプロジェクトであり格納場所も異なります。WEBサービスは、そういうことが出来て便利だなぁとVB.NETやったとき思いましたがJAVAで開発すると結構、面倒なもんだなと思いました。
アマゾンのWEBサービスなど良い例です。いろんなクライアントからつなげてデータのやりとりできる。
そういうのを実装したいと思っていますが、サンプルでは、それができない状態です。同一プロジェクト内なら、Jarの参照で良いかと思います。実際のWEBサービスはJarの参照はSORP通信経由でやるのかと思っています。
自分何か間違っているでしょうか?
それと、ご理解いただけたでしょうか?

評価

0

Cから、Bホストを経由してAホストが提供するサービスを呼
び出したい…だろうか?
AのサーバアプリとBのクライアントアプリはサンプルを元に
作れそう。でもCからBのクライアントを呼び出す方法が分か
らないと。

であれば、根本的に発想を変える必要がある。
BはAから見ればクライアントだが、Cから見た場合はサーバ
だ。
B自身が(Aとは別に)サーバのインターフェイスを持たなけ
れば、アクセスできない。
Bは、CからのリクエストをAへのクライアントに詰め替えて
リクエストし、クライアントに格納されるAからのレスポンス
を、Cへのレスポンスに詰め替える。

この場合、まずはBとCの間のインターフェイスを決める必要
がある。
場合によっては、プロキシで事足りるかもしれない。

評価

0

なお、Amazonのクライアントは、ここで言うスケルトンモジ
ュールを内包して自前のWebサービスなり、ローカルアプリ
なりを実装している。
Webサービスならwarのlibフォルダ中の1jarになろうし、ロー
カルアプリでもlibフォルダ中の1jarだ。

かつて、仕事でAmazonをパク…ではなく参考にした
SOAP/RESTのAPIとそのクライアントモジュールを作った。
なので、少なくともAmazonに関しては間違ってないはず。

評価

0

おっと。
API仕様は公開されているので、無論Amazonから提供された
モジュールを使う必要はない。
全部自前で実装してもいい。
突き詰めれば所詮はhttp通信だ。

評価

0

貴重なご意見ありがとうございます。
すみません、自分の意見がわかりずらくて。
CからBホストが提供するWEBサービス経由でAサーバにつなげたいのです。今、はまっているところは、CからBホストにつなぐところではまっています。

Cはクライアント
BはWEBサービス存在のホスト
AはDBサーバ

BからAはWEBサービスとかでなく、JDBCで接続。

CクライアントとBホスト接続する実装がわからないです。
s2axisのページのサイトですとBホストで全て完了している形で終わっていると思います。
同一プロジェクト内にクライアントモジュールもサーバモジュールもあるので。
クライアントモジュールを別プロジェクトにしたいです。このとき、これはCになります。
Bは切り離したWEBサービスプロジェクトです。

実装的には、WEBサービスの実装は分かるんですがその呼び方が内部のクラスを参照しないといけないのか疑問に思っています。
VB.NETだとメソッド情報がWEB参照で分かります。DLLの参照とかしていないです。なのでJAVAでいうJARファイルの参照はしていないと思います。

実際、他のやり方、GS-GENだったかな?それだと、JARファイルの参照なしで別プロジェクトからWEBサービスが呼び出し可能となります。

余談ですが、
今、axisのコマンドで作るやり方も試しています。
それだとうまくいきそうですが、SSLでの接続がおれおれ証明書なのでうまく接続できていない模様。

s2axisだとうまくいっているようなのでこちらで試してみたいなと思っています。サンプルの呼び出し先の記述をHTTPSに直して試したらうまく行ったので、クライアントを別プロジェクトに出してもうまく呼べるのではないかと思っています。それには、クライアントモジュールから直接呼べるやり方を知りたいと思っています。

評価

0

やっと問題点が分かった。
まず、自分がS2Axisを知らずに、勝手にApache Axisと同様だ
ろうと思って話を進めてたことに気づいた。済まない。

そして、「(クライアントとサーバが)同一のプロジェク
ト」の意味もうまく受け取れてなかった。

幾つかサンプルを見たが、確かにその観点で行くと無理があ
るな。
インターフェイスクラス群が、サーバのみにあると思うから
問題ではないのかと思う。
同一のパッケージの同一のインターフェイスならいいので、
クライアントとサーバ両方に同じモジュールがあっていい
し、それだけを単独プロジェクトにするとか、普段プロジェ
クト参照でビルド時に他方からコピーするでもいいはずだ。
つまりインターフェイスだけは、双方とも実行時に直接参照
できないといけない。

 これでどうだろうか。

評価

0

>同一のパッケージの
これは要らないな。極論、中身が同じならいいはず。

評価

0

貴重なご意見ありがとうございます。
なるほど!同じクラスを入れておくが、実際に呼ぶのは別サーバの別プロジェクトを呼ぶわけですね!
確かに、クライアント側ではURLを見て実行しますので
同じ階層のクラスは見に行かないはず。
ありがとうございますm(__)m

しかし、今、Apache Axisで作成中です。っが、問題点が。Seasar2+Maveanで作成したプロジェクトをaarにとしてもうまく認識されません(TT)
クラス群がたくさんあり階層も分かれているので、services.xmlでクラスをパッケージ指定で書いてやったのですが、
org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation:クラス名
と出てしまいます。最初の趣旨の質問とずれますがaxis2おやりになったことがあるようなので、もし
お分かりでしたらご教授願いますm(__)m

普通のサンプルで単純なクラスファイルをaarファイルかし実行するとうまく行きましたが、何分、構成が複雑なプロジェクトのクラス群なので、WEBサービス化したい
クラスを指定すれば良いのだろうと思っていたのですが
そんな単純なものではなさそうです。
JAVAはExlipseでバッチ形式で作成しています。Mainメソッドはコメントアウトし、Loginというメソッドがあるのですが、それを直接参照する形を取りたいと思っています。
単一のクラスでないとWEBサービス化にできないのでしょうか?
自分が作った仕様は認証処理です。メソッドにユーザID、パスワードを投げ、WEBサービスメソッドが呼ばれたら、認証処理が走る仕組みとしたいと思っています。
WEBサービスメソッドは、単純化し、認証クラス群をJarファイルにし、libフォルダに入れる形を取るべきでしょうか?すみません、よろしくお願いしますm(__)m

評価

0

まずはその例外を丸ごとググって、何をしたかくらい書くべ
きではないか。

その手のは、XMLがおかしい、クラス名やメソッド名がおか
しい、等の不整合で出たかな、くらいだなあ。
構造が複雑ってのは、クラスローダには大して関係のない話
だ(クラスローダはパス内のjar、classに該当する名前がある
かないか、しか見ない)。
aarファイルはwarファイルとほぼ同じだから、そこにクラス
やクラスからstatic参照してるクラスが含まれなければ、エラ
ーになるが…。

評価

0

それと、「プロジェクト」という単語の使い方に違和感があ
る。
プロジェクトは「計画」を意味するもので、「成果物」では
ない。
実行時のclass、jar、war、ear、その他を作るための、例えば
Eclipse上の1まとまりのことを、「プロジェクト」と呼ぶ。
サーバ上のwarなりそれを展開したフォルダなりを、「プロジ
ェクト」と呼ぶことはない。

評価

0

貴重なご意見ありがとうございましたm(__)m
原因は特定できました。クラスフォルダの階層がパッケージに基づいた階層になっていませんでした。
ただ、そのあとで、問題が、参照するJARが大きくてか
今度は、org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation:nullで帰ってきたので、なぜだろうと思っています。そのJARはDBFLUTEと呼ばれるもので、結構、大きめのものかな?と思っています。それか階層が多すぎるのか?
そのJARを参照しないとLoginのメソッドが呼ばれるのですが、DBFLUTEが参照されていないと出ました。
それで、追加したのですが。展開し、クラスごとクラスフォルダに入れても変わらず。原因不明です。
WEBサービスはあきらめて、サーブレットでやろうかと話があがっています。
容量が大きいからApache Axisが使えないとか、あるのでしょうか?

評価

0

>容量が大きいからApache Axisが使えない
DBFLUTEてのは使ってないので何とも言えない。

しかし、ググってみると同居させている事例もあるようなの
で、関係ないんじゃないのか。


フレームワークが高度化するに連れ、いざトラブルがあった
ときに解決が難しくなっていくのは、それ自体が問題だと思
ってる。

>http://dbflute.seasar.org/ja/introduction/#debugcost
今回の事例からすると、このページは笑劇でしかないな。


>WEBサービスはあきらめて、サーブレットでやろう

これもフレームワークを通すか通さないかの違いであって、
本質的には変わらない(各種Webサービスのフレームワーク
も、根本はサーブレット実装だ)ものだし。


前回もそうだが、nullの後ろには何も出てないのか。
また、別のログに何か情報がないのか。

評価

0

またまた、貴重なご意見ありがとうございますm(__)m
nullの後ろには何も出てないんですよ。
エラーメッセージらしきものは。
後はどこで落ちたかのクラスしか載っていませんでした(TT)

確かにそうですよね。WEBサービスにしろ、サーブレットにしろ同じものですよね。
ちょっと時間もないのでHTTPクライアントで接続します。
これはこれで、SSLの部分でてこずると思いますが、ありがとうございましたm(__)m

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。