別のマシンでコードを実行できるようにしたいTomcatサーバーで実行されている既存のJavaコードがいくつかあるため、Webサービスを検討しています。私は Web サービスに不慣れで、おそらくここで何か間違ったことをしていると思います。
Tomcat で JAX-WS Web サービスをデプロイする方法に関するいくつかのオンライン チュートリアルに従いました。Web サービス クラスを作成し、@WebService で注釈を付け、web.xml および sun-jaxws.xml ファイルを作成し、それらのファイル (および JAX-WS jar ファイル) を .war ファイルにパッケージ化し、それを Tomcat にデプロイしました。 . Tomcat を指すブラウザーで WSDL ファイルをロードできるため、これは機能しているようです。
私が問題を抱えているのはWebサービスクライアントです。まず第一に、データベースにマップされるサーバー側の既存のクラスがあります。クライアントが同じ既存のクラスを使用してインスタンスを作成し、Web サービスを呼び出して、オブジェクトをデータベースに格納できるようにしたいと考えています。しかし、サーバーの WSDL ファイルに対して wsimport コマンドを実行すると、多数の Java クラスが生成され、その多くは既存のクラスに似ています。既存のクラスの代わりにそれらを使用する必要があると思いますか? 私が混乱していない限り、コードの再利用についてはこれで十分です。これは非常に可能です。
これで、wsimport が生成したクラスを使用してクライアントを作成できました。しかし、コンパイルエラーが発生します。既存の Java クラスのフィールドの一部は、java.net.InetAddress 型です。しかし、何らかの理由で、wsimport は独自の InetAddress クラスを生成し、次のようになります。
package ems.server.webservices;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "inetAddress")
public class InetAddress {
}
ええ、それは何もないただのクラスです!だから私が言っているコンパイルエラーの多くは:
WSClient.java:37: setAddress(ems.server.webservices.InetAddress) in ems.server.webservices.NetworkAddress cannot be applied to (java.net.InetAddress)
networkAddress.setAddress(InetAddress.getByName("1.1.1.1"));
java.net.InetAddress を作成しようとしていますが、wsimport によって生成された空のクラスを使用する必要があります。私はここで何か間違ったことをしているに違いありません。教えてください。