Можно ли создать операцию веб-службы с использованием примитивных или базовых типов Java при использовании Jaxb2Marschaller в spring-ws? Например, метод выглядит следующим образом:
@Override
@PayloadRoot(localPart = "AddTaskRequest", namespace = "http://example.com/examplews/")
public long addTask(final Task task) throws AddTaskFault {
// do something
return 0;
}
Я использую плагин maven jaxws для генерации классов интерфейса и модели из моего WSDL. Когда я пытаюсь вызвать веб-сервис, я получаю следующую ошибку:
java.lang.IllegalStateException: нет адаптера для конечной точки [...]: реализует ли ваша конечная точка поддерживаемый интерфейс, такой как MessageHandler или PayloadEndpoint
Я узнал, что если я изменю метод на этот:
@Override
@PayloadRoot(localPart = "AddTaskRequest", namespace = "http://example.com/examplews/")
public JAXBElement<Long> addTask(final JAXBElement<Task> task) throws AddTaskFault {
final ObjectFactory objectFactory = new ObjectFactory();
return objectFactory.createAddTaskResponse(0L);
}
Я могу назвать это, но эта подпись не совместима с интерфейсом, сгенерированным плагином maven jaxws.
Что я могу сделать, чтобы настроить spring-ws для использования первого типа реализации или сообщить плагину maven jaxws для генерации второго варианта интерфейса?
ОБНОВЛЕНИЕ: Мои соответствующие записи конфигурации spring-ws выглядят так:
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.example.examplews" />
</bean>
<bean class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<constructor-arg ref="marshaller" />
</bean>
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping">
<property name="order" value="1" />
</bean>