Я создал простой веб-сервис, который реализует операцию добавления, и создал несколько клиентских файлов с помощью wsimport. Теперь я хочу включить как можно меньше конкретных артефактов wsdl. Вот пример того, как будет называться веб-сервис:
String serviceNamespace = "http://jws.samples.geronimo.apache.org/";
String serviceName = "CalculatorServiceService";
QName serviceQN = new QName(serviceNamespace, serviceName);
Service service = Service.create(new URL("http://localhost:8080/WebService/calculator?wsdl"), serviceQN);
String portNamespace = "http://jws.samples.geronimo.apache.org/";
String portName = "CalculatorServicePort";
QName portQN = new QName(portNamespace, portName);
Calculator myProxy = (Calculator) service.getPort(portQN, Calculator.class);
Но, похоже, мне нужно включать классы-оболочки для каждого сообщения. Например, сообщение о результате операции добавления:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "addResponse", propOrder = { "_return" })
public class AddResponse {
@XmlElement(name = "return")
protected int _return;
public int getReturn() {
return _return;
}
public void setReturn(int value) {
this._return = value;
}
}
Эти оболочки используются в аннотациях в интерфейсе сервиса:
@WebService(name = "Calculator", targetNamespace = "http://jws.samples.geronimo.apache.org/")
public interface Calculator {
@WebMethod
@RequestWrapper(className = "org.example.webservices.clients.dynamicproxy.Add")
@ResponseWrapper(className = "org.example.webservices.clients.dynamicproxy.AddResponse")
public int add(
@WebParam(name = "value1", targetNamespace = "")
int value1,
@WebParam(name = "value2", targetNamespace = "")
int value2);
}
Если аннотации будут удалены, веб-служба не запустится.
com.sun.xml.ws.model.RuntimeModelerException: ошибка средства моделирования во время выполнения: класс-оболочка org.example.webservices.clients.dynamicproxy.jaxws.Add не найден. Вы запускали APT для их генерации?
Но зачем мне эти обертки? Разве JAX-WS не может создавать эти оболочки на лету? Видите ли вы какую-либо информацию, которую невозможно получить из файла wsdl?