具有XML内容的CXF Webservice响应

时间:2015-05-18 15:23:11

标签: java xml web-services jaxb cxf

我有一个现有的CXF Java Web服务,它返回一个深层,复杂的嵌套响应类型。响应类型的部分存在于作为普通XML消息存储的数据库中(应该返回的XML完全相同)。

示例响应类型: PartyResponse - > PartyRec - > PartyInfo 和PartyInfo结构作为XML存储在DB中。

如何从Java返回响应,插入XML部分而不将其反序列化为使用JAXB的Java对象,只是在之后通过CXF将其再次序列化为XML?

1 个答案:

答案 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;
    }
}