我有一个现有的CXF Java Web服务,它返回一个深层,复杂的嵌套响应类型。响应类型的部分存在于作为普通XML消息存储的数据库中(应该返回的XML完全相同)。
示例响应类型: PartyResponse - > PartyRec - > PartyInfo 和PartyInfo结构作为XML存储在DB中。
如何从Java返回响应,插入XML部分而不将其反序列化为使用JAXB的Java对象,只是在之后通过CXF将其再次序列化为XML?
答案 0 :(得分:1)
您可以使用jaxws Provider的Payload模式。 见http://cxf.apache.org/docs/provider-services.html
然后,您的服务可以只返回一个只是通用XML对象的Source对象。如下所示:
import javax.xml.transform.Source;
import javax.xml.ws.Provider;
import javax.xml.ws.Service;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceProvider;
@WebServiceProvider(serviceName="EchoService", portName="EchoPort")
@ServiceMode(value=Service.Mode.PAYLOAD)
public class EchoPayloadProvider implements Provider<Source> {
public Source invoke(Source request) throws WebServiceException {
// just echo back
return request;
}
}