Я нахожусь на ранних стадиях разработки веб-сервиса для обработки Заказчика, предоставляемого в качестве входных данных для сервиса с использованием JAX-WS.Netbeans 7.0, Glassfish 3.1 с включенной эталонной реализацией Metro.
У меня есть очень простая версия, работающая с приведенным ниже кодом.Это генерирует wsdl правильно, развертывает, и я могу использовать SoapUI для использования wsdl и тестирования веб-службы.
@WebService(serviceName = "CustomerBroker")
public class CustomerBroker {
private static final String RTN_MSG_CREATE = "Create";
private static final String RTN_MSG_UPDATE = "Update";
/** Process the supplied Customer */
@WebMethod(operationName = "processCustomer")
public String processCustomer(@WebParam(name = "customerId") String customerId, @WebParam(name = "customerName") String customerName) {
String returnMsg = "";
if (StringUtils.isBlank(customerId)) {
returnMsg = RTN_MSG_CREATE;
} else {
returnMsg = RTN_MSG_UPDATE;
}
return returnMsg;
}
}
Вместо отдельных строковых параметров для каждого поля данных клиента, я хотел бы, чтобы параметрметод, чтобы быть аннотированным классом JAXB.Я разработал ниже класс.В прошлом я успешно использовал JAXB с веб-службой JAX-RS и использовал этот код в качестве руководства.
@XmlType(name="Customer", propOrder={"customerId", "customerName"})
@XmlRootElement(name="Customer")
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
@XmlElement(name="customerId")
public String customerId;
@XmlElement(name="customerName")
public String customerName;
}
Когда я пытаюсь использовать этот класс в качестве параметра для метода веб-службы, который я запускаюв ошибки.Я пробовал многочисленные обновления аннотаций веб-службы, причем последняя попытка была следующей:
public String processCustomer(@WebParam(name = "Customer") Customer c)
Ошибка, которую я получаю при развертывании: java.lang.RuntimeException: ошибка конечной точки веб-службы сервлета.
Я бы хотел, чтобы сгенерированный wsdl и служба работали с классом JAXB Customer в качестве входных данных.Должен ли я быть в состоянии сделать это с правильными аннотациями, или я что-то упускаю?Я нашел много на JAXB и JAX-WS, но ничего, что соответствует этому простому примеру.Спасибо.
Полная трассировка стека:
Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: java.lang.RuntimeException: Servlet web service endpoint '' failure. Please see server.log for more details.
C:\NetBeansProjects\CustomerBroker\nbproject\build-impl.xml:749:
The module has not been deployed.
at org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment.deploy(Deployment.java:187)
at org.netbeans.modules.j2ee.ant.Deploy.execute(Deploy.java:106)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at org.apache.tools.ant.Target.execute(Target.java:390)
at org.apache.tools.ant.Target.performTasks(Target.java:411)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:284)
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:539)
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:154)