Проблема
В разработке JAX-WS при развертывании следующей конечной точки службы
File: HelloWorld.java
package com.mkyong.ws;//Service Endpoint Interface @WebService public interface HelloWorld{ @WebMethod String getHelloWorldAsString(); }
File: HelloWorldImpl.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 необходима для чтения класса реализации конечной точки службы:
wsgen -keep -cp . com.mkyong.ws.HelloWorldImpl
Он генерирует два класса для одного метода
getHelloWorldAsString ()
в папке
package.jaxws
.
, GetHelloWorldAsString.java
, GetHelloWorldAsStringResponse.java
Скопируйте эти классы в правильную папку, в данном случае это « com.mkyong.ws.jaxws ». Попробуйте опубликовать это снова.
Ссылка
документация на инструмент]
ссылка://тег/jax-ws/[jax-ws]ссылка://тег/веб-сервисы/[веб-сервисы]