Apacheの最も単純な「HelloWorld」Webサービス(http://cxf.apache.org/docs/a-simple-jax-ws-service.html)を試しています。すべてのコードをコピーするのではなく、物事を行う方法についてさらに学ぶために、意図的に少し変更しました。
私のサービス実装は、パッケージ「hw」に実装するインターフェースを指定します。
@WebService(endpointInterface = "hw.HelloWorld", serviceName = "HelloWorld")
Webサービスを「公開」するプログラム(私が収集したものは、そのサーバーとして機能することを意味します)には、独自の(非常に正しい)パッケージに実装があります。
HelloWorldImpl implementor = new hwimpl.HelloworldImpl();
Endpoint.publish("http://localhost:9000/helloworld", implementor);
その後、5分間スリープします。その間、ブラウザに入力するように指示されたURLにWSDLが表示されます。それだけはうまくいきます。
http://localhost:9000/helloWorld?wsdl
私のクライアントは:
private static final QName SERVICE_NAME
= new QName("http://server.hw.demo/", "HelloWorld");
private static final QName PORT_NAME
= new QName("http://server.hw.demo/", "HelloWorldPort");
// the following in a method, of course
String endpointAddress = "http://localhost:9000/helloWorld";
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
HelloWorld hw = service.getPort(HelloWorld.class);
System.out.println(hw.sayHi("Albert"));
SERVICE_NAMEとPORT_NAMEが自分のサービスとどのように関連しているかわかりません。「server.hw.demo」文字列は例からのものであり、私のコードのパッケージ、または名前空間に使用されているように見える「逆」パッケージに対応していません。彼らはすべきですか?それらは何に対応しますか?ここを除いて、コードには「server.hw.demo」を使用するものは何もありません。その文字列は何であるはずですか?
実装とインターフェースが異なるクラスにあることは重要ですか?
私のクライアントは機能しません、そして私はそれを質問として投稿しました、しかしそれは長くて誰もそれに答えませんでした。私はこの部分を理解することに挑戦しています。私には、最も可能性の高い原因のようです。方法がわかれば、他の質問を削除します。