J2EE/EclipseでWeb Servicesを開発する
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
Eclipse + WTPを使って、WEBサービスの開発をプロトしてみま...
#contents
WEBサービス開発の流れは
-Webプロジェクトの作成
-公開したいJavaBeansの作成
-そのJavaBeansから、WEBサービスの作成
--WSDLの作成
--プロキシクライアントを保存するJavaプロジェクトの作成
--プロキシクライアントの作成
といった感じになります。
** Webプロジェクトの作成 [#o459cc66]
動的Webプロジェクト
プロジェクト名 : WebServicesSamplesWeb
Content Directory: war
Source Deirectory: source
EARプロジェクト
プロジェクト名 : WebServicesSamplesEAR
#ref(project.png)
**公開したいJavaBeansの作成 [#o68f2f73]
例として
-java.lang.Stringを返すsayHelloメソッド
-java.lang.String[]を返すsayHellosメソッド
-JavaBeans nu.mine.kino.services.Model を返すgetModelメソ...
を持つ nu.mine.kino.services.HelloWorld クラスを作成し、...
-nu.mine.kino.services.HelloWorld
package nu.mine.kino.services;
/**
* @author Masatomi KINO
* @version $Revision$
*/
public class HelloWorld {
public String sayHello() { // Stringを返す
return "Hello";
}
public String[] sayHellos() { // String[] を返す
return new String[] { "Hello World.", "hello world."...
}
public Model getModel() { // Model を返す
return new Model();
}
}
-nu.mine.kino.services.Model
package nu.mine.kino.services;
/**
* @author Masatomi KINO
* @version $Revision$
*/
public class Model {
public String getName() {
return "なまえ";
}
}
** JavaBeansからWEBサービスの作成 [#pee2d12b]
***WSDLの作成 [#na7a69c7]
次にWTPを使って、JavaBeansからWSDLなどなどを作成していき...
#ref(01.png)
このダイアログで
Web Service Type: Bottom up Java Bean Web Service
Generate a proxy にチェック
Install Web Service client on server は外す
など選択して、次へ進みます。ちなみに一般的に
Bottom up Java Bean Web Service: JavaBeansからWSDL作成
Top down Java Bean Web Service: WSDLからJavaBeans作成
という意味だそうです。
次画面ではBeansを選択する画面です。このままHelloWorldを選...
#ref(02.png)
次は公開するWEBサービスをどのWebプロジェクトにDeployする...
#ref(03.png)
次に公開するメソッドを選択します。下のように選択し、次に...
#ref(04.png)
ここまできて、ようやくWEBプロジェクトにWSDLファイルが作成...
#ref(05.png)
***プロキシクライアントの作成 [#h7f7922c]
あとは次へ次へと進んでいけばさっき指定したJavaProjectにプ...
#ref(tree.png)
最終的に上のようなディレクトリ構造になります。
**実行してみる。 [#f6d05d0d]
いま、WEBサービスが公開されている状態なので、実際にテスト...
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import nu.mine.kino.services.HelloWorld;
import nu.mine.kino.services.HelloWorldServiceLocator;
import nu.mine.kino.services.Model;
public class Main {
public static void main(String[] args) {
try {
HelloWorld helloWorld = new HelloWorldServiceLocat...
.getHelloWorld();
System.out.println(helloWorld.sayHello());
String[] hellos = helloWorld.sayHellos();
for (int i = 0; i < hellos.length; i++) {
System.out.println(hellos[i]);
}
Model model = helloWorld.getModel();
System.out.println(model.getName());
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
実行結果は以下のようになります。
2006/04/25 17:36:29 org.apache.axis.utils.JavaUtils isAt...
警告: 要求されたクラス(javax.activation.DataHandler と j...
MimeMultipart)が見つかりません。Attachmentサポートが利用...
/ [en]-(Unable to find required classes (javax.activatio...
and javax.mail.internet.MimeMultipart).
Attachment support is disabled.)
Hello
Hello World.
hello world.
なまえ
なんか警告が出てますが、Stringも配列もJavaBeansも正しく稼...
**deploy/undeployをするためのantのbuild.xml [#kdcebbcc]
さて、ここまでで既存のJavaBeansをWEBサービスとして公開す...
-build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="WebServices Deploy" basedir=".">
<property file="build.win.properties" />
<property file="build.properties" />
<!--
http://ws.apache.org/axis/java/ant/ant.html
-->
<path id="axis.classpath">
<fileset dir="${web.lib.dir}" includes="*.jar" />
<fileset dir="${axis.dir}/lib" includes="*.jar" />
</path>
<taskdef resource="axis-tasks.properties" classpathre...
<target name="deploy">
<axis-admin port="8080" hostname="localhost" failon...
servletpath="${axisservlet}" debug="true" xmlfile=...
</target>
<target name="undeploy">
<axis-admin port="8080" hostname="localhost" failon...
servletpath="${axisservlet}" debug="true" xmlfile=...
</target>
</project>
-build.properties
wsdd.dir=war/WEB-INF/HelloWorldService/nu/mine/kino/serv...
wsdd.deployfile=${wsdd.dir}/deploy.wsdd
wsdd.undeployfile=${wsdd.dir}/undeploy.wsdd
web.lib.dir=war/WEB-INF/lib
axis.dir=C:/javatools/axis
axisservlet=WebServicesSamplesWeb/servlet/AxisServlet
**TIPS集 [#r00d3b75]
***TCPモニタを使う [#l9c1164b]
Apache Axisにはサーバとの通信をキャプチャするTCPモニタが...
つかいかたですが、今までは
クライアント(接続先:8080) -> (ポート:8080)サーバ
という接続でしたが、あいだにこのツールをかますためにはク...
クライアント(接続先:8081) -> (ポート:8081)tcpmon(接続先:...
と変更する必要があります。つまりクライアントのプロクシが...
HelloWorldServiceLocator#setHelloWorldEndpointAddress
("http://localhost:8081/WebServicesSamplesWeb/services/...
というエンドポイントを変更するメソッドで行うことができま...
参考:~
- http://ws.apache.org/axis/java/ant/ant.html
-[[Webサービス:http://jomora.bne.jp/wiki/pukiwiki.php?Web...
-[[WebServices - Axis:http://ws.apache.org/axis/ja/java/u...
-[[SOAPベースのWebサービスにおける複雑なデータ・タイプ:ht...
-[[Webサービス・プログラミングのヒントと秘訣: JAX-RPCアプ...
----
この記事は
#vote(おもしろかった[39],そうでもない[8])
-java2wsdlで、返り値をIModelっていうinterfaceにしてたら、...
-セッション管理について調べています。挙動を見ると、クライ...
-でもこれだと、Axis依存しちゃうよなあ。Webサービスもしく...
-ポータブルにやるには
javax.xml.rpc.Stub jaxrpcStub = (javax.xml.rpc.Stub) get...
jaxrpcStub._setProperty(javax.xml.rpc.Stub.SESSION_MAINT...
みたいだけど、そもそもプロクシがAxis依存だから、まあいっ...
-強引にやると、
((Stub) service)._setProperty(
javax.xml.rpc.Stub.SESSION_MAINTAIN_PROPERTY, Bo...
でできるね。serviceは new HelloWorldServiceLocator().getH...
-基本的に、Statelessに作れーってのが基本かなぁ。 -- [[き...
-ちなみに、サーバがCookieを返すには、公開されたサービスが...
-↑違う。。Filterかましてrequest.getSession()やっても、サ...
-例外クラスは、引数なしのコンストラクタや、フィールドを初...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
Eclipse + WTPを使って、WEBサービスの開発をプロトしてみま...
#contents
WEBサービス開発の流れは
-Webプロジェクトの作成
-公開したいJavaBeansの作成
-そのJavaBeansから、WEBサービスの作成
--WSDLの作成
--プロキシクライアントを保存するJavaプロジェクトの作成
--プロキシクライアントの作成
といった感じになります。
** Webプロジェクトの作成 [#o459cc66]
動的Webプロジェクト
プロジェクト名 : WebServicesSamplesWeb
Content Directory: war
Source Deirectory: source
EARプロジェクト
プロジェクト名 : WebServicesSamplesEAR
#ref(project.png)
**公開したいJavaBeansの作成 [#o68f2f73]
例として
-java.lang.Stringを返すsayHelloメソッド
-java.lang.String[]を返すsayHellosメソッド
-JavaBeans nu.mine.kino.services.Model を返すgetModelメソ...
を持つ nu.mine.kino.services.HelloWorld クラスを作成し、...
-nu.mine.kino.services.HelloWorld
package nu.mine.kino.services;
/**
* @author Masatomi KINO
* @version $Revision$
*/
public class HelloWorld {
public String sayHello() { // Stringを返す
return "Hello";
}
public String[] sayHellos() { // String[] を返す
return new String[] { "Hello World.", "hello world."...
}
public Model getModel() { // Model を返す
return new Model();
}
}
-nu.mine.kino.services.Model
package nu.mine.kino.services;
/**
* @author Masatomi KINO
* @version $Revision$
*/
public class Model {
public String getName() {
return "なまえ";
}
}
** JavaBeansからWEBサービスの作成 [#pee2d12b]
***WSDLの作成 [#na7a69c7]
次にWTPを使って、JavaBeansからWSDLなどなどを作成していき...
#ref(01.png)
このダイアログで
Web Service Type: Bottom up Java Bean Web Service
Generate a proxy にチェック
Install Web Service client on server は外す
など選択して、次へ進みます。ちなみに一般的に
Bottom up Java Bean Web Service: JavaBeansからWSDL作成
Top down Java Bean Web Service: WSDLからJavaBeans作成
という意味だそうです。
次画面ではBeansを選択する画面です。このままHelloWorldを選...
#ref(02.png)
次は公開するWEBサービスをどのWebプロジェクトにDeployする...
#ref(03.png)
次に公開するメソッドを選択します。下のように選択し、次に...
#ref(04.png)
ここまできて、ようやくWEBプロジェクトにWSDLファイルが作成...
#ref(05.png)
***プロキシクライアントの作成 [#h7f7922c]
あとは次へ次へと進んでいけばさっき指定したJavaProjectにプ...
#ref(tree.png)
最終的に上のようなディレクトリ構造になります。
**実行してみる。 [#f6d05d0d]
いま、WEBサービスが公開されている状態なので、実際にテスト...
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import nu.mine.kino.services.HelloWorld;
import nu.mine.kino.services.HelloWorldServiceLocator;
import nu.mine.kino.services.Model;
public class Main {
public static void main(String[] args) {
try {
HelloWorld helloWorld = new HelloWorldServiceLocat...
.getHelloWorld();
System.out.println(helloWorld.sayHello());
String[] hellos = helloWorld.sayHellos();
for (int i = 0; i < hellos.length; i++) {
System.out.println(hellos[i]);
}
Model model = helloWorld.getModel();
System.out.println(model.getName());
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
実行結果は以下のようになります。
2006/04/25 17:36:29 org.apache.axis.utils.JavaUtils isAt...
警告: 要求されたクラス(javax.activation.DataHandler と j...
MimeMultipart)が見つかりません。Attachmentサポートが利用...
/ [en]-(Unable to find required classes (javax.activatio...
and javax.mail.internet.MimeMultipart).
Attachment support is disabled.)
Hello
Hello World.
hello world.
なまえ
なんか警告が出てますが、Stringも配列もJavaBeansも正しく稼...
**deploy/undeployをするためのantのbuild.xml [#kdcebbcc]
さて、ここまでで既存のJavaBeansをWEBサービスとして公開す...
-build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="WebServices Deploy" basedir=".">
<property file="build.win.properties" />
<property file="build.properties" />
<!--
http://ws.apache.org/axis/java/ant/ant.html
-->
<path id="axis.classpath">
<fileset dir="${web.lib.dir}" includes="*.jar" />
<fileset dir="${axis.dir}/lib" includes="*.jar" />
</path>
<taskdef resource="axis-tasks.properties" classpathre...
<target name="deploy">
<axis-admin port="8080" hostname="localhost" failon...
servletpath="${axisservlet}" debug="true" xmlfile=...
</target>
<target name="undeploy">
<axis-admin port="8080" hostname="localhost" failon...
servletpath="${axisservlet}" debug="true" xmlfile=...
</target>
</project>
-build.properties
wsdd.dir=war/WEB-INF/HelloWorldService/nu/mine/kino/serv...
wsdd.deployfile=${wsdd.dir}/deploy.wsdd
wsdd.undeployfile=${wsdd.dir}/undeploy.wsdd
web.lib.dir=war/WEB-INF/lib
axis.dir=C:/javatools/axis
axisservlet=WebServicesSamplesWeb/servlet/AxisServlet
**TIPS集 [#r00d3b75]
***TCPモニタを使う [#l9c1164b]
Apache Axisにはサーバとの通信をキャプチャするTCPモニタが...
つかいかたですが、今までは
クライアント(接続先:8080) -> (ポート:8080)サーバ
という接続でしたが、あいだにこのツールをかますためにはク...
クライアント(接続先:8081) -> (ポート:8081)tcpmon(接続先:...
と変更する必要があります。つまりクライアントのプロクシが...
HelloWorldServiceLocator#setHelloWorldEndpointAddress
("http://localhost:8081/WebServicesSamplesWeb/services/...
というエンドポイントを変更するメソッドで行うことができま...
参考:~
- http://ws.apache.org/axis/java/ant/ant.html
-[[Webサービス:http://jomora.bne.jp/wiki/pukiwiki.php?Web...
-[[WebServices - Axis:http://ws.apache.org/axis/ja/java/u...
-[[SOAPベースのWebサービスにおける複雑なデータ・タイプ:ht...
-[[Webサービス・プログラミングのヒントと秘訣: JAX-RPCアプ...
----
この記事は
#vote(おもしろかった[39],そうでもない[8])
-java2wsdlで、返り値をIModelっていうinterfaceにしてたら、...
-セッション管理について調べています。挙動を見ると、クライ...
-でもこれだと、Axis依存しちゃうよなあ。Webサービスもしく...
-ポータブルにやるには
javax.xml.rpc.Stub jaxrpcStub = (javax.xml.rpc.Stub) get...
jaxrpcStub._setProperty(javax.xml.rpc.Stub.SESSION_MAINT...
みたいだけど、そもそもプロクシがAxis依存だから、まあいっ...
-強引にやると、
((Stub) service)._setProperty(
javax.xml.rpc.Stub.SESSION_MAINTAIN_PROPERTY, Bo...
でできるね。serviceは new HelloWorldServiceLocator().getH...
-基本的に、Statelessに作れーってのが基本かなぁ。 -- [[き...
-ちなみに、サーバがCookieを返すには、公開されたサービスが...
-↑違う。。Filterかましてrequest.getSession()やっても、サ...
-例外クラスは、引数なしのコンストラクタや、フィールドを初...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: