サービスプロバイダから入手したWSDLに記述されているサービスアドレスが
<soap:address location="http://localhost:8080/endpoint"/>
となっているため、このWSDLを使って作成したリクエスタではどこに接続すればいいのか決定できません。
まずはJAX-WSでのWebサービス構築方法について簡単に整理してみました。
ボトムアップアプローチによるサービスプロバイダの作成
先にサービス実装クラス、引数/戻り値クラスを作成します。このクラスからツールによってWSDLやWebサービスコンポーネント内で必要となるクラス群を自動生成する方法です。
実際ににやってみました。まず、サービスプロバイダクラスWebService1を実装します。
package webservice.provider;
import javax.jws.WebMethod;
import javax.jws.WebService;
import webservice.data.Parameter;
import webservice.data.Result;
@WebService
public class WebService1 {
@WebMethod
public Result service(Parameter parameter) {
Result result = new Result();
result.setName(parameter.getName());
result.setValue(parameter.getValue());
return result;
}
}
できた実装クラスを指定してwsgen
コマンドを実行してWSDLなどを生成します。
wsgen -cp bin -d output webservice.provider.WebService1
生成されたWSDLでは、サービスのURL(soap:address
要素のlocation
属性)は
<service name="WebService1Service">
<port name="WebService1Port" binding="tns:WebService1PortBinding">
<soap:address location="REPLACE_WITH_ACTUAL_URL"/>
</port>
</service>
のようになっています。このWSDLを利用して作成したリクエスタはこのままでは実際のサービスに接続できないため、文字通りREPLACE_WITH_ACTUAL_URL
の部分を置き換えて使用します。受領したWSDLに手を加えて利用するものではないという認識だったのですが正しくなかったようです。
何らかの方法でWSDLを作成した場合のデフォルトのURLがhttp://localhost:8080/endpoint
となるのではないかと考えてhttp://localhost:8080/endpoint
で検索したのですが有用な情報が得られませんでした。いっぽうREPLACE_WITH_ACTUAL_URL
で検索するといろんな情報が得られました。この置き換えをantで実行するという書き込みがあったので参考にさせてもらいます。
<replace file="${wsdl.file}" token="REPLACE_WITH_ACTUAL_URL" value="${endpoint.url}"/>
受領したWSDLのlocation
がなぜhttp://localhost:8008/endpoint
となっているのか不明なのですが、アドレスURLは実際のものに置き換えて使えばよさそうですので、ビルド時に置き換えて利用する方法を採用する方向で検討しましょう。