Проблема
В разработке 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]ссылка://тег/веб-сервисы/[веб-сервисы]