0

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」を使用するものは何もありません。その文字列は何であるはずですか?

実装とインターフェースが異なるクラスにあることは重要ですか?

私のクライアントは機能しません、そして私はそれを質問として投稿しました、しかしそれは長くて誰もそれに答えませんでした。私はこの部分を理解することに挑戦しています。私には、最も可能性の高い原因のようです。方法がわかれば、他の質問を削除します。

4

1 に答える 1

0

ターゲット名前空間
(ソース:javatips.net

スクリーンショットの上に、ターゲット名前空間が表示されています。http://student.comこれは、パッケージがとして作成されているためcom.studentです。ターゲット名前空間はJavaパッケージの逆順である必要がありhttp://、パッケージの前に追加する必要もあります

私のブログを参照してください:

http://javatips.net/blog/2012/04/expose-cxf-service-with-rest-and-soap

于 2013-03-17T07:37:03.547 に答える