Problem
Wenn in der JAX-WS-Entwicklung der folgende Service-Endpunkt bereitgestellt wird,
Datei: HelloWorld.java
package com.mkyong.ws;//Service Endpoint Interface @WebService public interface HelloWorld{ @WebMethod String getHelloWorldAsString(); }
Datei: HelloWorldImpl.java
//Service Implementation package com.mkyong.ws; @WebService(endpointInterface = "com.mkyong.ws.HelloWorld") public class HelloWorldImpl implements HelloWorld{ @Override public String getHelloWorldAsString() { //... } }
Es wird folgende Fehlermeldung sofort angezeigt?
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) //...
Lösung
Die Service-Endpunkt-Schnittstelle wird nicht mit @ SOAPBinding-Objekten kommentiert. Daher wird der Standard-Dokumentstil ** für die Veröffentlichung verwendet. Zur besseren Lesbarkeit können Sie es wie folgt umschreiben:
//Service Endpoint Interface @WebService @SOAPBinding(style = Style.DOCUMENT, use=Use.LITERAL) public interface HelloWorld{ @WebMethod String getHelloWorldAsString(); }
Im Dokumentstil müssen Sie das Tool " wsgen " verwenden, um alle für JAX-WS tragbaren Artefakte (Zuordnungsklassen, WSDL- oder XSD-Schema) für die Serviceveröffentlichung zu generieren.
wsgen Befehl
Der Befehl wsgen ist erforderlich, um die Implementierungsklasse des Serviceendpunkts zu lesen:
wsgen -keep -cp . com.mkyong.ws.HelloWorldImpl
Es generiert zwei Klassen für eine einzelne Methode "getHelloWorldAsString ()" im Ordner package.jaxws .
-
GetHelloWorldAsString.java
-
GetHelloWorldAsStringResponse.java
Kopieren Sie diese Klassen in den korrekten Ordner. In diesem Fall heißt es " com.mkyong.ws.jaxws ". Versuchen Sie es erneut zu veröffentlichen.
Referenz
Werkzeugdokumentation]