在 spring-ws 中使用 Jaxb2Marshaller 时,是否可以使用原始或基本 Java 类型创建 Web 服务操作?例如一个看起来像这样的方法:
@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>