Oracle WebLogic ServerのプラットフォームでWebサービスを作成し、SoapUIでテストします



はじめに



この記事では、Oracle WebLogic Server 11gアプリケーションサーバー用のSOAP Webサービスを使用して2つの小さなアプリケーションを作成する方法を説明します。 これはサービス自体であり、クライアントはそれと対話します。



Oracle WebLogic Server 11gはJ2EE 5プラットフォームを実装します。J2EE5プラットフォームには、XML(JAX-WS)を使用してWebサービスを開発するためのJava APIなど、多数のテクノロジーの説明が含まれます。



とりわけ、SoapUIを使用してWebサービスをテストするプロセスについて説明します。



環境



この記事のすべての例は、Oracle WebLogic Server 11gがすでにインストールされていることを前提に作成されています。 また、構成されました:ローカルホストでドメインが作成されました:7001。 構成は自然に異なる場合がありますが、例を検討する際にはこれを考慮してください。 インストーラーはこちらにあります



さらに、Ant(ソフトウェア製品の構築プロセスを自動化するJavaユーティリティ)をインストールする必要があります。 最新のすべてのLinuxディストリビューションのリポジトリにあります。MicrosoftWindowsの場合は、 こちらからダウンロードできます



サービス作成



Webサービス作成の出発点はJavaクラスであり、そのメソッドは最終的にWebメソッド(操作)の役割を果たします。 WebLogicの用語では、このようなクラスはJWS(Java Webサービス)ファイルと呼ばれます。 JWSファイルは、Javaアノテーションを使用してWebサービスを記述する標準のJavaクラスです。 この場合、必須のJWSアノテーション@WebServiceが1つだけ含まれ、メソッドが1つだけ提供されます。



JAX-WSアノテーションの完全なリストは、 こちらにあります

以下では、1つのsayHello操作のみを含むHelloService Webサービスを作成する手順について説明します。 簡単にするために、すべての入力および出力パラメーターは文字列になります。



特定のアクションを説明するためにコンソールを使用した例を定期的に紹介します。 同時に、お気に入りのIDEや他の利用可能な手段の使用を妨げるものは何もありません。



ステップ1


まず、プロジェクトのディレクトリを作成する必要があります。

prompt> mkdir /HelloService







ステップ2


その中に、ソースのセクションを作成します。このセクションには、JWSファイルが置かれるパッケージのディレクトリが含まれます。

prompt> cd /HelloService

prompt> mkdir -p src/my/services








ステップ3


新しく作成したパッケージに、次の内容のHelloImpl.javaクラスを配置します。

package my.services;<br><br> // @WebService <br>import javax.jws.WebService;<br><br>@WebService(name= "Hello" , serviceName= "HelloService" )<br><br> /** <br> * JWS- WebLogic <br> * : sayHello <br> */ <br> public class HelloImpl {<br> // -, () <br> public String sayHello( String title) {<br> return “Hello, “ + title;<br> }<br>}<br> <br> * This source code was highlighted with Source Code Highlighter .





この例は、HelloImplというJavaクラスを示しており、パブリックsayHello(String)メソッドが含まれています。 @WebService注釈は、このクラスがHelloServiceというWebサービスを実装することを示します。 デフォルトでは、このクラスのすべてのパブリックメソッドは操作になります。



ステップ4


プロジェクト/ HelloServiceのルートディレクトリで、次の内容を持つ標準のAnt構成-build.xmlファイルを作成します。



< project name ="webservices-helloservice" default ="build" > <br> < taskdef name ="jwsc" <br> classname ="weblogic.wsee.tools.anttasks.JwscTask" /> <br><br> < target name ="build" > <br> < jwsc <br> srcdir ="src" <br> destdir ="output/helloService" > <br> < jws file ="my/services/HelloImpl.java" type =” JAXWS/> <br> </ jwsc > <br> </ target > <br><br> </ project > <br><br> * This source code was highlighted with Source Code Highlighter .







上記のリストは、特定のjwsc Antタスクで操作していることを示しています。 これはWebLogicで提供されるツールの1つで、追加のアーティファクト(xml-configs、Java-classes)を自動的に生成し、これをすべてコンパイルしてアーカイブ(WAR)にパックして、アプリケーションサーバーにインストールする準備ができます。



リストは、生成されたサービスのタイプ-JAXWSを明示的に示していることに注意してください。 デフォルトでは、これはJAXRPCであり、このようなサービスのプログラミングはわずかに異なります。



jwsc、そのすべてのオプションと使用例については、 こちらをご覧ください



ステップ5


アセンブリを開始する前に、WebLogic Server環境変数を設定する必要があります。 特に、CLASSPATH変数が設定され、Antがjwscタスクに正しく接続できるようになります。



これを行うには、コマンドラインでsetDomainEnv.cmd(Windows)またはsetDomainEnv.sh(UNIX)スクリプトを実行します。 これらのスクリプトは、WebLogicドメインのディレクトリ内のbinサブディレクトリにあります。 デフォルトでは、WebLogic ServerドメインはBEA_HOME / user_projects / domains / domainNameにあります。BEA_HOMEはOracle製品がインストールされているディレクトリで、domainNameはドメインの名前です。



IDEを使用してAntを実行する場合、Java WebLogicライブラリを構築するために、Oracle WebLogic Serverコアがインストールされているディレクトリのlibサブディレクトリからライブラリを接続するだけで十分であると想定します。

Oracle/Middleware/wlserver_10.3/server/lib







ステップ6


アプリケーションの組み立てを開始します

prompt> ant build







jwscによって生成されたファイルは、ディレクトリoutput / helloServiceに表示されます。 特に、サブディレクトリoutput / helloService / my / services /にHelloImpl.warがあります-これは、作成されたWebサービスがパッケージ化されているWebアプリケーションです。



ステップ7


ここで、Webサービスをアプリケーションサーバーに配置する必要があります。 WARアーカイブをWebLogicドメイン内のautodeployサブディレクトリにコピーします。

prompt> cp HelloImpl.war /path/to/domain/autodeploy/







サーバーの管理コンソールから、または別のWebLogicツールを使用してこれを行うこともできます:wldeploy Antタスク。



ステップ8


WSDLブラウザーで要求して、Webサービスがサーバーに正しくインストールされていることを確認します。

  http:// localhost:7001 / HelloImpl / HelloService?WSDL 


URLは、contextPathおよびserviceUriのデフォルト値で構成されます。 デフォルトでは、contextPathはJWSファイルのJavaクラスの名前であり、serviceURIは@WebServiceアノテーションのserviceName要素が指定されている場合です。指定されていない場合は、拡張子にServiceを加えたJWSファイルの名前です。 たとえば、@ WebServiceアノテーションのserviceName属性とHelloImpl.javaファイルのJWS名が設定されていない場合、serivceUriのデフォルト値はHelloImplServiceです。 これらの属性はすべて明示的に設定できます。 この場合、URLは異なる場合があります。



作成されたWebサービス(WSDL)を説明するXMLファイルがリクエストから返された場合、結果は成功とみなすことができます。



専用のSoapUIツールを使用して作業をテストする方法については、この記事の「サービステスト」セクションで説明します。



顧客の創造



Oracle WebLogic Serverには、特に、あらゆるプラットフォームで開発されたSOAP Webサービスにアクセスするための高レベルJava APIを提供するライブラリを生成するツールが含まれています。 これに必要なすべてのWebLogicは、サービスを記述するWSDLファイルです。 これらのライブラリは、クライアントアプリケーションとサービスとの対話の基盤として機能します。



前のセクションでWebサービスを作成しました。 それでは、そのためのクライアントアプリケーションを作成してみましょう。 これは、自動生成されたライブラリを使用するフォームを持つJSPページになります。



ステップ1


プロジェクトのディレクトリを作成します。

prompt> mkdir /HelloClient







ステップ2


それに進み、次の内容でbuild.xml Ant構成を作成します。



< project name ="webservices-helloclient" default ="generate" > <br> < taskdef name ="clientgen" <br> classname ="weblogic.wsee.tools.anttasks.ClientGenTask" /> <br><br> < target name ="generate" > <br> < delete dir ="lib" /> <br> < mkdir dir ="lib" /> <br> < clientgen wsdl ="http://localhost:7001/HelloImpl/HelloService?WSDL" <br> destFile ="lib/HelloServiceAPI.jar" <br> packageName ="my.client" <br> type ="JAXWS" /> <br> </ target > <br><br> </ project > <br><br> * This source code was highlighted with Source Code Highlighter .







上記のファイルは、clientgen Antタスクを使用していることを示しています。 Webサービスを介してWSDLを取得する場所(サーバーを取得し、WSDLファイルが指定されたURLで実際にアクセス可能であることを確認することを忘れないでください)、生成されたJavaクラスが配置されるパッケージの名前、およびこれらすべてがパックされるアーカイブを伝えます。 詳細はこちら



ステップ3


Antによって上記の構成を実行し、指定された場所(lib / HelloServiceAPI.jar)にライブラリが表示されることを確認します。

prompt> ant generate







ステップ4


次に、プロジェクトにWebディレクトリを作成します。

prompt> mkdir web







その中に、名前とサーバーにフォームの値を送信するボタンを入力するための単一の要素を含むHTMLフォームを含むJSPページindex.jspを配置します。 また、SOAPリクエストの結果が表示される場所も必要です。



もちろん、前の手順で生成されたライブラリを接続することにより、このJSPを最新のIDEで開発する方が便利です。IDEは、このライブラリに含まれるクラスとJSPからそれらを操作する方法を通知します。 しかし、この例は非常に簡単なので、すぐにページコードを示します。



<%@page import= "my.client.Hello" %><br><%@page import= "my.client.HelloService" %><br><%@page contentType= "text/html" pageEncoding= "UTF-8" %><br><%<br><br> String name;<br> String result = null ;<br> if ((name = request.getParameter( "name" )) != null && ! "" .equals(name))<br> {<br> // <br> HelloService service = new HelloService();<br> // “” ( ) <br> Hello hello = service.getHelloPort();<br><br> // sayHello <br> // SOAP , <br> // HTTP ... <br> result = hello.sayHello(name);<br> }<br><br>%> <! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" <br> "http://www.w3.org/TR/html4/loose.dtd" > <br> < html > <br> < head > <br> < meta http-equiv ="Content-Type" content ="text/html; charset=UTF-8" > <br> < title > Hello Client </ title > <br> </ head > <br> < body > <br> < form > Name: < input name ="name" /> < input type ="submit" /></ form > <br> <% if (result != null ) { %> <br> < br /> Result: <% = result %> <br> <% } %> <br> </ body > <br> </ html > <br><br> * This source code was highlighted with Source Code Highlighter .







この形式では、すべてのSOAPリクエストは常にWSDLの取得元のサービスに送られますが、実際には、いわゆるエンドポイントURLは設定可能である必要があります。 これは、クライアントをテストするときに役立ちます。 したがって、フォームに別のフィールドを追加します。



< form > Name: < input name ="name" />< br /> Location: < input name ="location" />< br />< input type ="submit" /></ form > <br><br> * This source code was highlighted with Source Code Highlighter .







また、フォームハンドラの数行:



<%@page import= "java.util.Map" %><br><%@page import= "javax.xml.ws.BindingProvider" %><br><%@page import= "my.client.Hello" %><br>…<br><br>String name;<br> String result = null ;<br> String url = request.getParameter( "location" );<br> if ((name = request.getParameter( "name" )) != null && ! "" .equals(name))<br> {<br> HelloService service = new HelloService();<br> Hello hello = service.getHelloPort();<br><br> if (url != null && ! "" .equals(url)) {<br> Map<String, Object> rc = ((BindingProvider) hello).getRequestContext();<br> // endpoint URL, WSDL- <br/> rc.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);<br> }<br><br> result = hello.sayHello(name);<br> } <br><br> * This source code was highlighted with Source Code Highlighter .







ステップ5




Webディレクトリで、2つのファイルweb.xmlおよびweblogic.xmlが配置されるWEB-INFサブディレクトリを作成します。次の内容を使用します。



web.xml



<? xml version ="1.0" encoding ="UTF-8" ? > <br> < web-app version ="2.5" xmlns ="http://java.sun.com/xml/ns/javaee" <br> xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" <br> xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > <br> < welcome-file-list > <br> < welcome-file > index.jsp </ welcome-file > <br> </ welcome-file-list > <br> </ web-app > <br><br> * This source code was highlighted with Source Code Highlighter .







weblogic.xml



<? xml version ="1.0" encoding ="UTF-8" ? > <br> < weblogic-web-app xmlns ="http://www.bea.com/ns/weblogic/90" <br> xmlns:j2ee ="http://java.sun.com/xml/ns/j2ee" <br> xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" <br> xsi:schemaLocation ="http://www.bea.com/ns/weblogic/90 www.bea.com/ns/weblogic/90/weblogic-web-app.xsd" > <br> < context-root > /HelloClient </ context-root > <br> </ weblogic-web-app > <br><br> * This source code was highlighted with Source Code Highlighter .







これらのファイルでは、デフォルトで開くJSPページ(welcome-file)と、サーバーでWebアプリケーションが使用できるパス(context-root)を指定しました。



ステップ6


前に作成したAnt構成(2番目のステップ)で、Webアプリケーション(WARアーカイブ)のJSPページとともにライブラリのパッケージ化を自動化する別のセクションを追加します。



< target name ="build" depends ="generate" > <br> < war destfile ="HelloClient.war" webxml ="web/WEB-INF/web.xml" > <br> < fileset dir ="web" /> <br> < lib dir ="lib" /> <br> </ war > <br> </ target > <br><br> * This source code was highlighted with Source Code Highlighter .







このタスクは生成タスクに依存しているため、アーカイブを再構築するたびに、WebサービスAPIライブラリの生成が開始されます。



ステップ7


組立を開始します

prompt> ant build







HelloClient.warアーカイブがプロジェクトディレクトリに表示されることを確認します



ステップ8


結果のアーカイブは、Webサービスの開発に関するセクションのステップ7で説明されているようにサーバーにインストールされます。

prompt> cp HelloClient.war /path/to/domain/autodeploy/









いくつかの条件が満たされていれば、すぐにテストできます。 まず、(クライアントを作成した)Webサービス自体をサーバーにデプロイして実行する必要があります。次に、デフォルトのエンドポイントURLが取得されるように、Locationフィールドを空にする必要があります。



以下の「クライアントのテスト」セクションで、SoapUIを使用してエミュレータでWebサービスのクライアントをテストする方法を説明します。



ソープイ



Webサービスについて言えば、SOAPサービスのサーバー部分とクライアント部分の両方をテストできる強力なツールに言及するしかありません。これはSoapUIです。 こちらからこのアプリケーションをダウンロードしてください



Microsoft WindowsとLinuxの両方のディストリビューション用の無料バージョンがあります。 インストールしても問題は発生しません。



サービステスト



Webサービス(サーバー側)をテストするには、図に示すように、SoapUIを実行して新しいプロジェクトを作成する必要があります。







[初期WSDL / WADL]フィールドで、テスト対象のサービスを記述するWSDLファイルを指定します。ローカルマシン上のファイルへのパスとURL(実際には例で実行されます)の両方を指定できます。 また、[Create Requests]ボックスをオンにすると、WSDLファイルに記述されている各操作のSOAP要求を生成するためのインターフェイスを作成する必要があることをSoapUIに伝えます。







Webサービスには、sayHelloという1つのメソッドのみが含まれています。 その下に作成された要求オブジェクトに移動できます。 上記のSoapUIのLinuxバージョンのスクリーンショット。 XMLを修正し、クエリを実行することで入力パラメーターを登録できることを示しています(左隅の緑色の三角形)。 その結果、サービスの応答もXML形式で受信されます。



Windowsバージョンはややリッチで、ユーザーフレンドリな入力パラメーター入力フォームが追加されています。



したがって、任意のプラットフォームで作成されたSOAPサービスをテストできます。 リクエストの設定には多くの可能性があります。たとえば、HTTPヘッダー(たとえば認証)を送信したり、自動テストを構築したりできます。



顧客テスト



クライアントアプリケーションをテストするには、SoapUIをWebサービスエミュレーションモードで動作させる必要があります。 これを行うには、以下のスクリーンショットに示すように、プロジェクトを作成します。







WSDLファイルは同じです。プロセスを説明するために、Webサービスをエミュレートしますが、実際には既に記述しました。 しかし、これはある種のサードパーティシステムであり、まだアクセスしておらず、WSDLのみがあり、クライアントが動作していることを確認する必要があると想像してください。



そのため、Initial WSDL / WADLフィールドでWSDLを指定し、Create MockServiceの横にチェックマークを付けます。 このチェックボックスは、WSDLファイルに存在する操作用のエミュレーターを作成する必要があることをSoapUIに伝えます。

2番目のステップでは、エミュレートする特定の操作を選択するよう求められます。







[MockServiceの開始]の横にチェックマークを付け、[OK]をクリックした後、ポート8088でエミュレーターを取得します。リンクをクリックして、すべてが実際に機能することを確認できます。

  http:// localhost:8088 / HelloMock?WSDL 


クライアントアプリケーションに移る前に、擬似Webサービスが生成する回答を構成することをお勧めします。 これを行うには、sayHelloメソッドの下で応答オブジェクトを開き、XMLを修正します。XMLは、この操作の呼び出しごとにクライアントに返されます。







今こそ、クライアントに戻るときです。 エンドポイントURLはlocalhostを指す必要があります:8088 / HelloMock-起動したばかりのWebサービスエミュレータのアドレス。 この行をJSPページのLocationフィールドに書き込みます。







[クエリの送信]をクリックします。 クエリの結果は、ボタンの横に表示されます。







ここでSoapUIにアクセスすると、HelloMockエミュレータの[メッセージログ]セクションで、SOAP要求が実行されます。 開いて、それに関するすべての情報を表示できます。







したがって、実際のWebサービスが手元にない場合、または既存のWebサービスをテストに使用できない場合(運用サーバー)、正しいアプローチはそのWSDLファイルを取得してエミュレーターを作成することです。 それをテストし、出力パラメーターを試します。



おわりに



注では、利用可能なツール(Antタスクjwscとclientgen)を使用して、Oracle WebLogic ServerプラットフォームでWebサービス(サーバーパーツとクライアントの両方)を開発するプロセスをアクセス可能な方法で説明しようとしました。 SoapUIを使用してWebサービスをテストする一般的なアプローチも検討されました。

サーバーサイドのソースはこちら

クライアント部分のソースはこちら

公式文献はこちらです。



All Articles