|
|
WebOTX Manual V10.4 (第4版) 目次を表示 |





Memo
選択したプロジェクトのプロジェクト名とロケーションがWebサービスダイアログに表示されます。

Caution
指定したプロジェクトにウィザードで作成したWebサービスが既に存在している場合、Webサービスを生成することができません。
Caution
プロジェクトには動的Webプロジェクトと EJB プロジェクトのみを指定できます。
Caution
JAX-WS準拠のWebサービスを生成するには、Java コンパイラが
1.8または11
である必要があります。プロジェクトの右クリックメニュー
プロパティをクリックして、プロパティダイアログで、以下3か所の設定が1.8または11であることを確認してください。
1.JAVAのビルド・パス >
ライブラリ ページのJREバージョン
2.JAVAコンパイラーページのコンパイラー準拠レベル
3.プロジェクト・ファセットページのJavaのバージョン
Memo
プロジェクト名に含めてはいけない文字を含めると、エラーメッセージが表示されます。
Memo
<WebOTX_DIR>はWebOTXのインストールルートディレクトリのことです。

|
設定項目 |
設定内容 |
|---|---|
|
Webサービス名 |
Webサービス名を英数字とアンダーバーを使用して指定します。 |
|
Webサービスの属する名前空間URI |
省略可能。 Webサービスの存在する名前空間をURI(URL、URN)形式で指定します。http:やurn:などのスキームに続けて任意の名前を指定します。 (入力例) urn:webotx.nec.com http://www.nec.com/webotx |
Caution
Webサービスの属する名前空間URIの値に基づいてパッケージを生成するため、長すぎる名前空間名を指定すると、全体のファイルパス長がWindowsOSの制限となる256文字を超えることがあります。
Memo
Webサービス名は、Webサービス作成時にクラス名として使用するため、Javaの識別子の規則に従っていないとエラーメッセージが表示されます。
Memo
名前空間は、Webサービスが存在する空間の名前のことです。Javaのパッケージ名に相当します。
Memo
URIは、ウェブ上でリソースを識別する手段で、スキームに続けて名前を指定する形式です。http:、mailto:、urn:などのスキームはよく知られたところでしょう。詳細は、「URI」でウェブ検索してください。

Memo
Webアプリケーション を選択した場合、動的Webプロジェクトを生成します。EJB を選択した場合、EJB
プロジェクトを生成します。



Memo
ロジックを作成する際に、アノテーション エディタを使用するとアノテーションの入力が簡単に行えます。アノテーションエディタについては、
[ 開発環境の構築(WebOTX Developer)
> アノテーション定義支援ツール ]
を参照して下さい。
|
クラス名 |
役割 |
|---|---|
|
Webサービス名 |
サービスエンドポイントクラスです。 |
|
クラス名 |
役割 |
|---|---|
|
WSDLファイルの定義によりクラス名 |
Webサービスインタフェースに必要な各種ソースコードです。 |
|
Webサービス名Impl |
サービスエンドポイントクラスです。 |




Memo
以下の状況でwsgenツールを実行すると、「Class not found」エラーが発生する可能性があります。
1. 選択したプロジェクトのパッケージ名はwizard.xmlから取得したパッケージ名と一致しない。(例:プロジェクトのパッケージ名を変更したことがあります。)
2. 選択したプロジェクトのwizard.xmlからパッケージ名を取得できず、且つプロジェクトのパッケージ名はデフォルトパッケージ名と一致しない。(例:V10.xで生成したプロジェクトをデフォルトパッケージの違いワークスペースにインポートした。)
※
デフォルトパッケージは[パッケージ名変更の設定]を参照してください。
wizard.xmlを以下のように修正することで解決できます。
wizard.xmlファイルの修正方法
<?xml version="1.0" encoding="UTF-8"?>
<webservice version="2.0" xmlns="http://www.nec.co.jp/WebOTX/webservice/director" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nec.co.jp/WebOTX/webservice/director/wizard.xsd">
<server>
......
<setting name="WebservicePackage" value="パッケージ名"/>
......
</server>
</webservice>
※パッケージ名はプロジェクトのパッケージです。(例:sample.hello.helloservice)
Caution
WSDLを生成するためには、Webサービスクラスの *.class ファイルが必要です。自動ビルドを OFF にしている場合など、*.class が無い場合は実行できませんので
予めビルドして下さい。
Memo
本機能は旧互換のための機能です。
新規にWebサービスを作成する場合は、JAX-WSに準拠するサービスを作成してください。

Caution
指定したプロジェクトにウィザードで作成したWebサービスが既に存在している場合、Webサービスを生成することができません。
Caution
プロジェクトには 動的Webプロジェクトと EJB プロジェクト
のみを指定できます。
Memo
プロジェクト名に含めてはいけない文字を含めると、エラーメッセージが表示されます。
Memo
<WebOTX_DIR>はWebOTXのインストールルートディレクトリのことです。

|
設定項目 |
設定内容 |
|---|---|
|
Webサービス名 |
Webサービス名を英数字とアンダーバーを使用して指定します。 |
|
Webサービスの属する名前空間URI |
Webサービスの存在する名前空間をURI(URL、URN)形式で指定します。http:やurn:などのスキームに続けて任意の名前を指定します。 (入力例) urn:webotx.nec.com http://www.nec.com/webotx |
|
WS-Iモード |
WS-I BP1.0に対応したい場合、ONにします。 |
Memo
Webサービス名は、Webサービス作成時にクラス名として使用するため、Javaの識別子の規則に従っていないとエラーメッセージが表示されます。
Memo
名前空間は、Webサービスが存在する空間の名前のことです。Javaのパッケージ名に相当します。
Memo
URIは、ウェブ上でリソースを識別する手段で、スキームに続けて名前を指定する形式です。http:、mailto:、urn:などのスキームはよく知られたところでしょう。詳細は、「URI」でウェブ検索してください。

Memo
「Webアプリケーション」を選択した場合、動的Webプロジェクトを生成します。「EJB」を選択した場合、EJB
プロジェクトを生成します。

|
Webサービスの実装形式 |
指定するビジネスロジックの形式 |
|---|---|
|
Webアプリケーション |
・Javaプロジェクト ・JARファイル ・WebOTX Webプロジェクト ・WARファイル ・WTP Webプロジェクト などのEclipseのJavaプロジェクトに準じた全てのプロジェクト、ならびにJavaアプリケーションに相当する全てのアプリケーションアーカイブ |
|
EJB |
・WebOTX EJBプロジェクト ・EJB-JARファイル ・WTP EJBプロジェクト |
Caution
ビジネスロジックとして指定するプロジェクトは、Eclipseのビルド機能によりビルドが成功しているものでなければなりません。
Caution
ビジネスロジックとして指定するプロジェクトが参照するプロジェクトも、すべてEclipseのビルド機能によりビルドが成功しているものでなければなりません。
Memo
Antでビルドを行っており、Eclipseのビルド機能ではビルドに失敗するプロジェクトを指定したい場合は、一旦Antによるビルドでアーカイブを作成すれば、そのアーカイブを指定してWebサービスを作成することができます。
Memo
ビジネスロジックとして指定した外部ファイル(アーカイブファイル)の読み込みに失敗する場合、対象のアーカイブファイルを解凍しMETA-INF\MANIFEST.MFをフォルダごと手動で削除後、同じMETA-INF\MANIFEST.MFを再度追加してアーカイブし直すことで解消される場合があります。

Caution
インタフェース、抽象化クラスは選択しないでください。
Caution
パッケージ名のついていないクラス(デフォルトパッケージに存在するクラス)は表示されません。
Memo
異なるパッケージに存在する複数のクラスを同時に選択することもできます。

Caution
ステートレスセッションBean以外のEJBは表示されません。

Caution
インタフェース、抽象化クラスはプルダウンメニューには表示されません。
Caution
1つのクラス内に同名のメソッドが複数ある場合、それらを同時に複数選択することはできません。
Caution
コンストラクタ、小文字で始まっていない名前のメソッドは選択できません。
Caution
ビジネスロジックがEJBの場合で、メソッド名に数字がある場合、その直後の文字は大文字でなければなりません。
Memo
異なるクラスに存在する複数のメソッドを同時に選択することもできます。
| Java の型 | WS-I mode OFF RPC/encoded |
WS-I mode ON |
|---|---|---|
| WS-I mode OFF RPC/literal |
||
| WS-I mode OFF Document/literal |
||
|
boolean |
xsd:boolean |
xsd:boolean |
|
★byte |
xsd:byte |
xsd:byte |
|
★byte[] |
xsd:base64Binary |
xsd:base64Binary |
|
short |
xsd:short |
xsd:short |
|
int |
xsd:int |
xsd:int |
|
long |
xsd:long |
xsd:long |
|
float |
xsd:float |
xsd:float |
|
double |
xsd:double |
xsd:double |
|
java.lang.String |
xsd:string |
xsd:string |
|
java.math.BigInteger |
xsd:integer |
xsd:integer |
|
java.math.BigDecimal |
xsd:decimal |
xsd:decimal |
|
java.util.Calendar |
xsd:dateTime |
xsd:dateTime |
|
javax.xml.namespace.QName |
xsd:QName |
xsd:QName |
|
java.net.URI |
xsd:anyURI |
xsd:anyURI |
|
java.lang.Boolean |
soapenc:boolean |
xsd:boolean |
|
java.lang.Float |
soapenc:float |
xsd:float |
|
java.lang.Double |
soapenc:double |
xsd:double |
|
java.lang.Integer |
soapenc:int |
xsd:int |
|
java.lang.Short |
soapenc:short |
xsd:short |
|
java.lang.Byte |
soapenc:byte |
xsd:byte |
| 同時に選択できない型の組み合わせ | |
|---|---|
|
java.lang.Boolean[] |
boolean[] |
|
java.lang.Float[] |
float[] |
|
java.lang.Double[] |
double[] |
|
java.lang.Integer[] |
int[] |
|
java.lang.Short[] |
short[] |
public class UserException extends Exception {
public UserException(String arg0) {
super(arg0);
}
}
このとき、detailには次のようにメッセージが封入されます。
<detail>
<ns1:UserException xsi:type="ns0:UserException">
<message xsi:type="xsd:string">例外のメッセージ</message>
</ns1:UserException>
</detail>
3つ目は、detail要素を使ってさらにいろいろな情報を渡したい場合です。このときは、JavaBeanの規則に沿ってprivate変数を宣言し、各変数ごとにsetter,
getterを用意します。このとき、コンストラクタは定義しないか、デフォルトコンストラクタのみを定義しておきます。
public class UserException extends Exception {
private int code;
private String message;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
この状態でWebサービス作成ウィザードを通すと、コンパイルエラーになるクラスが現れるため、次のようにコンストラクタがあることを前提としたコードから引数を取り出し、setterを使うコードに修正します。(逆にユーザ定義例外側に生成されたのと同じ形式のコンストラクタを追加しても構いません。)
public void construct() {
_instance = new com.nec.webotx.webservice.sample.UserException(code,message);
}
RPC-encodedの場合・・・ユーザ定義の例外クラス名_SOAPBuilder修正後:
public void construct() {
_instance = new com.nec.webotx.webservice.sample.UserException();
_instance.setCode(code);
_instance.setMessage(message);
}
RPC-encodedの場合・・・ユーザ定義の例外クラス名_SOAPSerializer修正前:
if (isComplete) {
instance = new com.nec.webotx.webservice.sample.UserException(((Integer)codeTemp).intValue(),(java.lang.String)messageTemp);
} else {
RPC-encodedの場合・・・ユーザ定義の例外クラス名_SOAPSerializer修正後:
if (isComplete) {
instance = new com.nec.webotx.webservice.sample.UserException();
instance.setCode(((Integer)codeTemp).intValue());
instance.setMessage((java.lang.String)messageTemp);
} else {
RPC/Document-literalの場合・・・ユーザ定義の例外クラス名_
LiteralSerializer修正前:
instance = new com.nec.webotx.webservice.sample.UserException(((Integer)codeTemp).intValue(),(java.lang.String)messageTemp);
RPC/Document-literalの場合・・・ユーザ定義の例外クラス名_
LiteralSerializer修正後:
instance = new com.nec.webotx.webservice.sample.UserException();
instance.setCode(((Integer)codeTemp).intValue());
instance.setMessage((java.lang.String)messageTemp);
このとき、detailには次のようにメッセージが封入されます。
<detail>
<ns1:UserException xsi:type="ns0:UserException">
<code xsi:type="xsd:int">012345</code>
<message xsi:type="xsd:string">例外のメッセージ</message>
</ns1:UserException>
</detail>
※ユーザ定義の例外クラスが継承関係を持っている場合などに、ユーザ定義の例外クラスと同じクラス名のクラスがWebサービスプロジェクトに生成されてしまう場合がありますが、そのクラスは不要ですので手動で削除してください。
public int getData_LogicBean(java.lang.String in0, test.TestDataHolder in1) throws java.rmi.RemoteException {
return binding.getData_LogicBean(in0, in1);
}
修正後
import webotx.ws.ds.WebService.holders.TestDataHolder;
public int getData_LogicBean(java.lang.String in0, test.TestDataHolder in1) throws java.rmi.RemoteException {
TestDataHolder td = new TestDataHolder(in1.getValue());
return binding.getData_LogicBean(in0,td);
}
public int getData_LogicBean(javax.xml.rpc.holders.ByteArrayHolder in0, test.TestDataHolder in1) throws java.rmi.RemoteException {
try {
return new test.TestDelegate().getData(in0, in1);
} catch (Throwable e) {
throw new java.rmi.RemoteException("", e);
}
}
修正後
public int getData_LogicBean(java.lang.String in0, webotx.ws.ds.WebService.holders.TestDataHolder in1) throws java.rmi.RemoteException {
try {
test.TestDataHolder td = new test.TestDataHolder(in1.value);
return new test.TestDelegate().getData(in0, td);
} catch (Throwable e) {
throw new java.rmi.RemoteException("", e);
}
}

Caution
指定する文字列の最初と最後に「/」をつける必要はありません。
Memo
「foo/var/service」のような深い階層を設定することもできます。



Caution
Document/literal/wrappedを選択したとき、Webサービス化するメソッドにvoid(返却値なし)のものが含まれる場合、必ず「一方向通信を行う」をONにしてください。配備に失敗します。
Caution
パッケージ名と名前空間URIのマッピングを設定する場合は、必要な設定をすべて行ってください。自動でマッピングする機能は、ここで設定を1つでも行うと働きません。
Memo
WS-IモードをONにしている場合には、RPC/literalかDocument/literal/wrappedしか選択できません。
Memo
パッケージ名と名前空間URIのマッピングは、ここで指定しなければ自動で行われます。その際の規則は、「http://パッケージ名のドット区切りで逆順の文字列」になります。
Memo
WSDLも自動的に作られるので、WSDLにXMLスキーマを定義することについて気にする必要はありません。

Caution
WebOTX Developer's
Studioでは既定で指定しているオプションがあり、この画面で既定のオプション設定と異なるオプションを入力した場合、画面で指定されたオプションが有効となります。
|
オプション |
説明 |
|---|---|
|
-define |
WSDLを生成する場合に指定します。「サービスエンドポイントインタフェースの作成オプション」では指定できません。 |
|
-classpath <path> |
入力クラスファイルの検索場所を指定します。 |
|
-cp <path> |
-classpathと同様です。 |
|
-f:<features> |
JAX-RPCのfeatureを指定します。指定できるFeatureの一覧は下記のFeature一覧テーブルを参照してください。 複数個指定する場合は、カンマ「,」で区切って指定して下さい。 |
|
-features:<features> |
-f:<features> と同様です。 |
|
-keep |
Javaソースファイルを生成します。デフォルトでは、ソースファイル自体が生成されずにコンパイル結果のみが生成されます。 |
|
-g |
デバッグ情報を生成します。 |
|
-model <file> |
内部モデルをファイルに出力します。 |
|
-O |
生成されたコードを最適化します。 |
|
-httpproxy:<host>:<port> |
HTTPプロキシサーバを指定します。デフォルトのポートは8080です。 |
|
Feature |
説明 |
WSDL作成 |
SEI作成 |
|---|---|---|---|
|
datahandleronly |
常に属性をデータハンドラ型にマッピングします。 |
× |
○ |
|
donotoverride |
すでに生成が終了しているクラスファイルの再生成を行わないようにします。クラスファイルの上書きを禁止します。 |
○ |
○ |
|
donotunwrap |
WS-Iモード選択時のdocument/literal/wrappedラッパー要素のアンラッピングを無効にします。 |
× |
○ |
|
explicitcontext |
サービスコンテキストマッピングを明示的に有効にします。 |
× |
○ |
|
jaxbenumtype |
匿名列挙をそのベース型にマッピングします。 |
× |
○ |
|
noencodedtypes |
エンコーディングの型情報を無効にします。 |
○ |
○ |
|
nomultirefs |
複数の参照を無効にします。 |
○ |
○ |
|
norpcstructures |
rpc構成を出力しません。 |
× |
○ |
|
novalidation |
インポートしたWSDLの検証を行いません。 |
× |
○ |
|
resolveidref |
xsd:IDREF(ID参照値という意味のデータ型)を解釈します。 |
× |
○ |
|
searchschema |
type要素用にXMLスキーマを探します。 |
× |
○ |
|
serializeinterfaces |
直接インタフェースの型とシリアライズすることを有効にします。 |
○ |
○ |
|
Caution rpcliteral、wsi、documentliteral、useonewayoperations、nodatabinding のFeature については、ウィザード中の選択に依存するため、この画面では指定できません。 |
|||
|
クラス名 |
役割 |
|---|---|
|
Webサービス名_Service |
サービスインタフェースです。Webサービスを仮想化したインタフェースで、ポートを内封します。 |
|
Webサービス名_Service_Impl |
サービスインタフェースの実装クラスです。クライアント側の初期化をになっており、JAX-RPCHandlerの初期化パラメータも書かれます。 |
|
Webサービス名_PortType |
サービスエンドポイントインタフェースです。 |
|
Webサービス名_PortType_Tie |
タイクラスです。サービス側でSOAPメッセージの受け口になるクラスです。JAX-RPC
Handlerの初期化パラメータも書かれます。 |
|
Webサービス名_PortType_Stub |
クライアントが利用するスタブクラスです。 |
|
Webサービス名SoapBindingImpl |
ウィザードで指定したビジネスロジックを呼び出すWebサービスの実装クラスです。Webサービスの実装形式がWebアプリケーションの時のみ生成されます。 |
|
Webサービス名Client |
テスト用のクライアントです。スタブクラスを利用しながらWebサービスの呼び出しを行います。 |
|
Main |
テスト用のクライアントを呼び出して動作させるためのクラスです。クライアントを作成する時は、このクラスをカスタマイズすると簡単です。 |
Caution
ビジネスロジックを置換するとき、Webサービス化したメソッドのインタフェースを変えることはできません。
Caution
ビジネスロジックを置換するとき、Webサービス化したメソッドのインタフェースを変えることはできません。
Caution
SOAPメッセージの処理に必ずSAAJを使用しなければならないということではありません
Caution
WSDLは必ず作成しなければならないものではありません。












