http://wiki.netbeans.org/wiki/attach/JAXWSJBoss/ejbservice.png
JBoss 4.0.4 上の JAX-WS Web サービスとクライアントを作るにはどうしたらいいですか
JBoss Application Server (AS) 4.0.3 は EJB 3.0 プログラミングモデルを導入しましたので、
いまは JBoss 上で JAX-WS Web サービスを作成し利用することが可能です。
Netbeans 5.5 は、JBoss 4 上では JAX-WS Web サービスをサポートしません。
しかし、この手引きでは、回避策を利用して作成・配備を行い、
Web サービスクライアントを作成・利用する方法を示します。
JBoss 上での EJB3 と JAX-WS サポートに関するさらなる情報が必要であれば、
ここ を参照してください。
筋書きに必要なソフトウェア:
始める前に、あなたのコンピュータ上に次のソフトウエアをインストールする必要があります:
- NetBeans IDE 5.5 (開発版) ダウンロード。
- Java 標準開発キット (JDK) 5.0 版 ダウンロード。サーバや IDE に JDK 1.6 を使用しないでください - JBoss はまだそれをサポートしていません!
- JBoss Application Server 4.0.4 版 (カスタムインストールとしてインストールし、インストール形態として "ejb3" を選択します)ダウンロード。
Web モジュール内に Web サービスとクライアントを作成する
NetBeans 5.5 は JBoss 上では JAX-RPC Web サービスだけをサポートします。
JAX-WS はサポートされていませんが、JBoss 4.0.4 ではこれを行う方法があります。
JBoss 4.0.4 では EJB3 サポートだけが実装されています。
既定では、JBoss 上では JavaEE 5 Web モジュールを作成できません。
しかし、例えば Tomcat 用のモジュールを作成できますので、
後で「プロパティー」|「実行」でサーバーを変更すれば動くでしょう。
Web モジュール内に Web サービスを作成する
- 「ファイル」>「新規プロジェクト (Ctrl-Shift-N)」を選択します。「Web」カテゴリから「Web モジュール」を選択します。プロジェクトの名前を WSWebModule としましょう。
- 「JBoss Application Server 4」をコンボボックスから選択し、「ソースレベルを 1.4 に設定」チェックボックスを外します。
- プロパティー > ライブラリ に移動し、ライブラリを追加... をクリックします。
- JAX-WS ライブラリを選択し、ライブラリを追加 をクリックしてライブラリビューに戻り パッケージ のチェックをは外します。
- WSWebModule ノードを右クリックして、「新規」>「Java クラス」を選択します。
- クラス名を JBossWebWS とします。
- パッケージ に org.me.wss を入力し、「完了」をクリックします。
- エディタに行くと、JBossWebWS.java が開いているはずですので、 public class JBossWebWS の上に注釈 @WebService を書きます。
- web.xml を開き、listener 節を削除し、<servlet-class> タグの値を org.me.JBossWebWS に変えます。
プロジェクトウィンドウ内に Web サービスノードがありますが、それは空でしょう。
バンドルされている Tomcat を通す別の方法もあります :
- 「ファイル」>「新規プロジェクト (Ctrl-Shift-N)」を選択します。「Web」カテゴリから「Web モジュール」を選択します。プロジェクトの名前を WSWebModule としましょう。
- 「バンドル版 Tomcat(5.5.17)」をコンボボックスから選択し、「ソースレベルを 1.4 に設定」チェックボックスを外します。
- WSWebModule ノードを右クリックして、「新規」>「Web サービス」を選択します。
- Web サービス名を JBossWebWS とします。
- パッケージ に org.me.wss を入力し、「完了」をクリックします。
- WSWebModule ノードを右クリックして、「プロパティー」を選択します。
- 「実行」を選択してサーバーを「バンドル版 Tomcat」から「JBoss Application Server 4」に変更します。
- ライブラリを選択して JAX-WS 2.0 チェックボックスを外します。「了解」をクリックします。
JBoss 上に Web サービスを配備
さて、Web サービスは出来ましたが、配備する準備はまだ出来ていません。Web サービスは既定で空で作成され、配備するには、サービス内に最低でも一つの操作を作成しなければなりません。
- エディタに行くと、JBossWebWS.java が開いているでしょう。
- サービス本体の内側を右クリックし、Web サービス|オペレーションを追加 を選択します。
- 次のウインドウで "operation" を "greet" に変更し、「追加」をクリックし、s を「名前」に書いて両方のウインドウで「了解」をクリックします。
- ここで操作はこんな感じです:
/**
* Web service operation
*/
@WebMethod
public String greet(@WebParam(name = "s") String s) {
// TODO implement operation
return null;
}
/**
* Web service operation
*/
@WebMethod
public String greet(@WebParam(name = "s") String s) {
return "Hello " + s;
}
- また、終点を JSR-181 仕様に従って修正しなければなりませんが、これはさもなければ外部からアクセスできないからです。
プロジェクトタブに行き、設定ファイルノードを開き、web.xml を選択します。それの上でダブルクリックし、それはエディタ内で開きます。
コマンドバー内の XML をクリックします。
Click on XML in command bar.
次のコードを見るでしょう:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet-name>JBossWebWS</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JBossWebWS</servlet-name>
<url-pattern>/JBossWebWS</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>JBossWebWS</servlet-name>
<servlet-class>org.me.wss.JBossWebWS</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JBossWebWS</servlet-name>
<url-pattern>/JBossWebWS</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>
index.jsp
</welcome-file>
</welcome-file-list>
</web-app>
これで良しと言うことで、Web モジュールを右クリックして「プロジェクトを配備」を選択します。サービスはサーバ上に配備されます。
プロジェクトタブの中で Web サービスノードを右クリックすると、「Web サービスをテスト」が無いことがわかるでしょう。Web ブラウザ内にサービスや、さらにテスターの wsdl コードをまだ表示できます、バンドル版 Tomcat から知っているように。Web サービスのノードを右クリックして「プロパティー」を選択します。次のウインドウでサービスの URL アドレスをここに表示されているように選択して複製します (Ctrl+C):
Web ブラウザに行きアドレスフィールドに URL を張り込みます (Ctrl+V)。ここでエンターを押下すると、あなたの Web サービスの WSDL コードが表示されます。
Web モジュール内で Web サービスクライアントを作成する
- 「ファイル」>「新規プロジェクト (Ctrl-Shift-N)」を選択します。Web カテゴリから「Web モジュール」を選択します。プロジェクトを WSCWebModule と名付けます。
- コンボボックスから「JBoss Application Server 4」を選択し、「ソースレベルを 1.4 に設定」チェックボックスを外します。
「完了」をクリックします。
- 「ファイル」>「新規ファイル (Ctrl-N)」を選択します。Web サービスカテゴリから「Web サービスクライアント」を選択し、「次へ」をクリックします。
既定の
プロジェクト を選択したままにして、その右側の
参照 ボタンをクリックしましょう。
WSWebModule をクリックして
JBossWebWS を選択し、
了解をクリックします。
パッケージ内に
org.me.wsc を入力し、
完了 をクリックします。
- プロジェクトウインドウは、新しい Web サービスクライアントを、Web サービス参照ノードの下に表示します:
EJB モジュール内に Web サービスとクライアントを作成する
NetBeans 5.5 は、JBoss 上では JAX-RPC Web サービスだけをサポートします。JAX-WS はサポートされていませんが、JBoss 4.0.4 で何とかする方法もあります。
JBoss 4.0.4 は EJB3 サポートを実装していますので、JAXWS でも作業できます出来ます。
EJB モジュールで Web サービスを作成する
- 「ファイル」>「新規プロジェクト (Ctrl-Shift-N)」を選択します。エンタープライズカテゴリから「EJB モジュール」を選択します。プロジェクトを WSEJBModule と名付けます。
- コンボボックスから「JBoss Application Server 4」を選択します。「完了」をクリックします。
- WSEJBModule ノードを右クリックして「新規」>「Web サービス」を選択します。
- Web サービス名に JBossEJBWS と入力します。
- 「パッケージに org.me.ejbwss と入力し、「完了」をクリックします。
プロジェクトウインドウは新しい Web サービスを Web サービスノードの下に表示します:
JBoss 上に Web サービスを配備する
Web サービスを作成しましたが、配備する準備はまだ出来ていません。Web サービスは既定で空で作成され、配備するには、サービス内に最低でも一つの操作を作成しなければなりません。
- エディタに行くと、JBossEJBWS.java が開いているでしょう。
- サービス本体の内側を右クリックし、Web サービス|オペレーションを追加 を選択します。
- 次のウインドウで "operation" を "greet" に変更し、「追加」をクリックし、s を「名前」に書いて両方のウインドウで「了解」をクリックします。
- ここで操作はこんな感じです:
/**
* Web service operation
*/
@WebMethod
public String greet(@WebParam(name = "s") String s) {
// TODO implement operation
return null;
}
/**
* Web service operation
*/
@WebMethod
public String greet(@WebParam(name = "s") String s) {
return "Hello " + s;
}
配備する準備が出来ました。EJB モジュールを右クリックして「プロジェクトを配備」を選択します。サービスはサーバ上に配備されます。
プロジェクトタブの中で Web サービスノードを右クリックすると、「Web サービスをテスト」選択肢が無効になっていることがわかるでしょう。Web ブラウザ内にサービスの wsdl コードを表示することはまだ出来ますが、テスターは出来ません、バンドル版 Tomcat や grassfish から知っているように。Web サービスのノードを右クリックして「プロパティー」を選択します。次のウインドウでサービスの URL アドレスをここに表示されているように選択して複製します (Ctrl+C):
Web ブラウザに行きアドレスフィールドに URL を張り込みます (Ctrl+V)。しかし、張り込んだばかりの URL に虫がいます。
http://localhost:8080/JBossEJBWS?wsdl を
http://localhost:8080/WSEJBModule/JBossEJBWS?wsdl に変えなければなりません。ここで
エンター を押下すると、配備された サービスの WSDL コードが Web ブラウザ内に表示されます。
EJB モジュール内に Web サービスクライアントを作成する
- 「ファイル」>「新規プロジェクト (Ctrl-Shift-N)」を選択します。エンタープライズカテゴリから「EJB モジュール」を選択します。プロジェクトを WSCEJBModule と名付けます。
- コンボボックスから「JBoss Application Server 4」を選択し、「ソースレベルを 1.4 に設定」チェックボックスを外します。
- プロジェクトフォルダのパスに空白があってはいけません、さもないとクライアントの作成が失敗します。必要であればプロジェクトフォルダを変更します。「完了」をクリックします。
- 「ファイル」>「新規ファイル (Ctrl-N)」を選択します。Web サービスカテゴリから「Web サービスクライアント」を選択し、「次へ」をクリックします。
WSDL URL を選択し "http://localhost:8080/WSEJBModule/JBossEJBWS?wsdl" を入力します
右側の
参照 ボタンをクリックします。
WSEJBModule をクリックして
JBossEJBWS を選択し、
了解をクリックします。
パッケージ内に
org.me.ejbwsc を入植し、
完了 をクリックします。
- プロジェクトウインドウは新しい Web サービスを Web サービスノードの下に表示します:
Web サービスを消費する
- プロジェクトタブに行き WSCWebModule > index.jsp ファイルをダブルクリックします。
- ページ本体内で、次のように始まるコメント領域を選択します
<%-- This example uses JSTL, uncomment the taglib directive above.
右クリックし、
Web サービスクライアントのリソース | Web サービスオペレーションを呼び出す を選択します。
WSWebModule をクリックし、
JBossWebWS | greet を選択して
了解 をクリックします。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>JSP Page</h1>
<%--
This example uses JSTL, uncomment the taglib directive above.
To test, display the page like this: index.jsp?sayHello=true&name=Murphy
--%>
<%--
<c:if test="${param.sayHello}">
<!-- Let's welcome the user ${param.name} -->
Hello ${param.name}!
</c:if>
--%>
<%-- start web service invocation --%><hr/>
<%
try {
org.me.wsc.JBossWebWSService service = new org.me.wsc.JBossWebWSService();
org.me.wsc.JBossWebWS port = service.getJBossWebWSPort();
// TODO initialize WS operation arguments here
java.lang.String s = "";
// TODO process result here
java.lang.String result = port.greet(s);
out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
%>
<%-- end web service invocation --%><hr/>
</body>
</html>
- 文字列 'java.lang.String s = "";' を 'java.lang.String s = "your_name";' に変えます。
- WSCWebModule ノードを右クリックして「プロパティー」を選択します。
- 「実行」を選択してサーバーをバンドル版 Tomcat から JBoss Application Server 4 に変えます。「了解」をクリックします。
- プロジェクトタブの WSWebModule ノードを右クリックして プロジェクトを実行 を選択します
参照
---