0

Web サービスを作成して登録しました。ここで、Web サービスにアクセスするための単純な Web アプリを作成したいと考えています。Web サービス サーバーには axis2 を使用しました。クライアントには、Web サービスによって処理されるデータが xml 形式のファイル (data.xml) の形式で提供されます。私のjspフォームには、テキストボックス(data.xmlの場所を提供するため)と、Webサービスの呼び出しにアクセスする「呼び出し」ボタンがあります。私は、jsp が最初に要求をサーブレットに送信し、次にサーブレットが Web サービスの呼び出しを担当すると想定しています。Web サービスは PC1 でホストされ、Web サービスにアクセスする JSP を含む Web アプリは PC2 にあり、data.xml は PC3 にあります。したがって、ユーザーは PC3 から作業し、PC3 で Web ブラウザーを開いて PC2 の jsp にアクセスし、PC1 で Web サービスを呼び出します。

  1. サーブレットから Web サービスを呼び出す構文は何ですか? axis2 はクライアント側で使えるのだろうか。
  2. SOAP リクエストを作成するにはどうすればよいですか (SOAP リクエストはサーブレットで作成されると想定しています)。SOAP リクエスト文字列を文字列ごとに作成する必要がないことを願っています。
  3. data.xml に関しては、jsp がファイルをサーブレットにアップロードすると想定しているため、サーブレットはパラメーターとしてファイルを受け取ります。これは正しい方法ですか?ありがとう
4

2 に答える 2

1

Axis2を使用しているので、それを使用してクライアントプロキシを生成し(wsdl2javaが親友です)、Webサービス用の標準のJavaプロキシを作成します。手動でSOAPエンベロープを作成するのに手を汚す必要はありません...(少なくとも99%のシナリオでは)。

WSDLを作成し(書き込みまたはjava2wsdlで生成)、それを使用してWebサービスを呼び出すためのJavaプロキシを作成します。

プロキシの使用方法について...

jspからのIMHO直接呼び出しはノーノ​​ーです。JSPでデータを収集してサーブレットにPOSTし、サーブレット内でWebService呼び出しを実行し、応答を管理し(Axis2フレームワークを使用する場合は純粋なJavaオブジェクトになります)、エラーを処理してから別のJSPに転送して結果を得る方がよいでしょう。 。

JSPは作成がいくらか簡単ですが、長期的には、計画されたものにJSPを使用し、サーブレット内にビジネスロジックを保持することをお勧めします。

ここでは、WSDLとクライアント生成を行うための2つのantタスクがあります。

<!-- create the wsdl file -->
<target name="genwsdl">
    <echo message="Generate the WSDL file"/>
    <taskdef name="java2wsdl" classname="org.apache.ws.java2wsdl.Java2WSDLTask" classpathref="axis2.classpath"/>
    <java2wsdl className="org.stackoverflow.YourWebServiceClassName"
               servicename="YourServiceName"
               description="Whatever..."
               outputLocation="./wsdl"
               locationuri="http://localhost:8081/NameMe/CoolService">
            <classpath>
                <pathelement path="${axis2.classpath}"/>
                <pathelement location="./build/classes"/>
            </classpath>
    </java2wsdl>
    <echo message="Generation of the WSDL file complete"/>
</target>


<target name="genclient" depends="genwsdl">
    <taskdef name="axis2-wsdl2java" classname="org.apache.axis2.tool.ant.AntCodegenTask" classpathref="axis2.classpath"/>
    <axis2-wsdl2java wsdlfilename="./wsdl/YourWsdl.wsdl" output="./client overwrite="true"/>
</target>

クライアントクラス(プロキシ)を生成したら、それらを使用してWebサービスを呼び出すことができます。

次のようになります。

YourServiceStub stub = new YourServiceStub(wsEndPointUrl);

次に、スタブに、リモートで公開された各メソッドのメソッドと、ラップされたリクエスト/レスポンスオブジェクトの静的クラスがあります。ただし、この時点で、Axis2クライアントのドキュメントを少し読む必要があります。

于 2012-06-27T07:34:21.583 に答える
0

手作業で行いたい場合を除いて、Webサービススタックを使用する必要があります。ApacheCXFとMetroは良い候補です。

そうは言っても、あなたのdata.xmlで何をしたいのかわかりません。

  1. フレームワークに依存します
  2. あなたはそうしない。それがフレームワークの目的です。
  3. マルチパートサポートが必要な場合は、既製のサーブレットを探してみてください。またはさらに良いことに、Springフレームワークを使用してください:)
于 2012-06-27T07:30:34.263 に答える