Спасибо большое, мне пришлось сделать аналогичный трюк для моих собственных нужд, и ваше решение было последним, что мне нужно, чтобы оно заработало.Я суммирую различия здесь для справки.
Я работал над конечной точкой, которая получает произвольный XML и возвращает произвольный XML.Нет маршалинга или демаршаллинга, потому что данные, как говорят, огромные .Получающий конец задокументирован здесь .
Простой контейнер String:
package our.site.etc;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="StringResponse",namespace="http://link.to.our/schemas/service/endpoint/yyyy/mm/dd")
public class StringResponse {
private String responseData;
public StringResponse() {
;
}
public StringResponse(String data) {
this.responseData = data;
}
public String getResponseData() {
return responseData;
}
public void setResponseData(String data) {
this.responseData = data;
}
}
Метод конечной точки:
@PayloadRoot(localPart = LOCALPART, namespace = NAMESPACE)
@ResponsePayload
public @ResponseBody StringResponse receiveMessage(MessageContext messageContext) throws Exception {
// do our thing:
return new StringResponse(super.handleMessage(messageContext));
}
И последнее, что нужно было сделать - это пропустить часть WSClient, просто чтобы определить маршаллер jaxb2:
<oxm:jaxb2-marshaller id="marshaller">
<oxm:class-to-be-bound name="our.site.etc.StringResponse"/>
</oxm:jaxb2-marshaller>
И теперь моя конечная точка возвращает строку ответа внутри CDATA.Практически он просто передает данные, делая с ним минимальные вещи.