ラッパークラスpackage.jaxws.methodNameが見つかりません. それらを生成するためにAPTを実行しましたか?
問題
JAX-WS開発では、次のサービスエンドポイントが導入されると、
File:HelloWorld.java
package com.mkyong.ws;//Service Endpoint Interface @WebService public interface HelloWorld{ @WebMethod String getHelloWorldAsString(); }
ファイル:HelloWorld Impl.java
//Service Implementation package com.mkyong.ws; @WebService(endpointInterface = "com.mkyong.ws.HelloWorld") public class HelloWorldImpl implements HelloWorld{ @Override public String getHelloWorldAsString() { //... } }
すぐにエラーメッセージが表示されますか?
Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.mkyong.ws.jaxws.GetHelloWorldAsString is not found. Have you run APT to generate them? at com.sun.xml.internal.ws.model.RuntimeModeler.getClass(RuntimeModeler.java:256) //...
解決策
サービスエンドポイントインターフェイスには `@ SOAPBinding`というアノテーションは付けられていないので、デフォルトの
ドキュメントスタイル
を使用して公開します。人間が読みやすいように、次のように書き直すことができます。
//Service Endpoint Interface @WebService @SOAPBinding(style = Style.DOCUMENT, use=Use.LITERAL) public interface HelloWorld{ @WebMethod String getHelloWorldAsString(); }
ドキュメントスタイルでは、 ”
wsgen
“ツールを使用して、サービスパブリケーションに必要なすべてのJAX-WSポータブルアーティファクト(マッピングクラス、wsdlまたはxsdスキーマ)を生成する必要があります。
wsgenコマンド
wsgen -keep -cp . com.mkyong.ws.HelloWorldImpl
-
package.jaxws ** フォルダの下に、単一のgetHelloWorldAsString()メソッドの2つのクラスを生成します。
-
GetHelloWorldAsString.java
-
GetHelloWorldAsStringResponse.java
-
それらのクラスを正しいフォルダにコピーします。この場合、 ”
com.mkyong.ws.jaxws
“です。もう一度公開してみてください。
リファレンス
ツール文書]