同じ要素名で違う名前空間にマッピングされているスタブを作成する方法

Axis1.4の話です。

WSDL2Javaの引数に-pを指定して、全てのオブジェクトのパッケージ名を指定していたとします(実際は全ての名前空間を指定したパッケージで上書きするという事)。そうすると同じ要素名で違う名前空間が指定されているオブジェクトは作成できません。同じパッケージ内に違う名前空間の同じ名前のクラスが作成されるからです。

これを回避するには、-pを指定しないで名前空間をそのままパッケージ名とする事と、名前空間ごとにパッケージを指定する方法があります。

n1:Hoge要素と、n2:Hoge要素があった場合。

WSDL2Java -u http://web.service.jp/examples.wsdl
名前空間がパッケージ名に使われるのでOK。
n1.Hogeクラスと、n2.Hogeクラスが作成されます。

WSDL2Java -p examples.mywebservice -u http://web.service.jp/examples.wsdl
examples.mywebserviceパッケージにHogeオブジェクトが2つ作成されようとするのでNG

WSDL2Java -f NStoPkg.properties -u http://web.service.jp/examples.wsdl

NStoPkg.propertiesの内容
n1=examples.mywebservice.n1
n2=examples.mywebservice.n2

名前空間n1, n2がそれぞれ指定したパッケージにマッピングされるのでOK。
弊害として同じ名前のクラスが違うパッケージに存在するという事になります。

スタブクラスはURLを元に作成される(?)ので、上記の場合はjp.service.webパッケージに作成されます。このスタブクラスのパッケージを指定したい場合は、上記のNStoPkg.propertiesに

http\://web.service.jp/ = examples.mywebservice.stub

と指定しておけば任意のパッケージでクラスを作成する事ができます。