【发布时间】:2009-11-12 14:27:45
【问题描述】:
在 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>
【问题讨论】:
-
你能发布你的spring xml配置吗?我有一个类似的问题,我通过配置解决了它......这是一段时间前,但如果你发布你的,我可以检查我的正确配置是什么并发布差异。
标签: java spring jaxb jax-ws spring-ws