【发布时间】:2017-11-24 12:13:04
【问题描述】:
我正在为一个 Spring-WS 项目而苦苦挣扎。
在我的 Endpoint 类中,如果我没有指定我正在接收/返回 JAXBElement,我会收到以下错误:No adapter for endpoint;您的端点是用@Endpoint 注释的,还是实现了支持的接口,如 MessageHandler 或 PayloadEndpoint?
例如,这个方法可以正常工作:
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "pingRequest")
@ResponsePayload
public JAXBElement<PingResponse> pingRequest(@RequestPayload JAXBElement<PingRequest> request) {
PingResponse response = service.ping();
return new JAXBElement<PingResponse>(request.getName(), PingResponse.class, response);
}
但是这个会导致上面提到的错误:
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "pingRequest")
@ResponsePayload
public PingResponse pingRequest(@RequestPayload PingRequest request) {
return service.ping();
}
有什么方法可以让我简单地返回我想要的元素,而不是将其包装在 JAXBElement 中?
我有几个这样声明的方法,我注意到当我使用从另一个 XSD 导入的元素时,我只需要将它们包装为 JAXBElements。
例如,如果我这样定义我的 XSD:
<xs:element name="pingRequest">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="pingResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
它可以在没有在签名中指定 JAXBElement 的情况下工作。但是,如果我想将其导出并在另一个 XSD 中使用,如下所示:
service.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://example.com/service"
elementFormDefault="qualified"
targetNamespace="http://example.com/service"
xmlns:customlib="http://example.com/customlib">
<xs:import namespace="http://example.com/customlib"
schemaLocation="../customlib.xsd" />
<xs:element name="pingRequest" type="customlib:pingRequest" />
<xs:element name="pingResponse" type="customlib:pingResponse" />
customlib.xsd:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://example.com/customlib"
elementFormDefault="unqualified"
targetNamespace="http://example.com/customlib">
<xs:complexType name="pingRequest">
</xs:complexType>
<xs:complexType name="pingResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
那就不行了。我不确定用谷歌搜索什么才能达到预期的效果。
【问题讨论】: