包含 XML 内容的 CXF Web 服务响应
CXF Webservice response with XML content
我有一个现有的 CXF Java 网络服务,它 return 是一种深度、复杂、嵌套的响应类型。部分响应类型存在于数据库中,存储为纯 XML 消息(完全相同 XML 应 returned 的内容)。
示例响应类型:
PartyResponse -> PartyRec -> PartyInfo
PartyInfo 结构在数据库中存储为 XML。
我如何 return 来自 Java 的响应,插入 XML 部分而不用 JAXB 将其反序列化为 Java 对象,只是为了再次将其序列化为 XML 之后立即通过 CXF?
可以使用jaxws Provider的Payload方式。
参见 http://cxf.apache.org/docs/provider-services.html
您的服务然后可以 return 一个 Source 对象,它只是一个通用 XML 对象。如下所示:
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;
}
}
我有一个现有的 CXF Java 网络服务,它 return 是一种深度、复杂、嵌套的响应类型。部分响应类型存在于数据库中,存储为纯 XML 消息(完全相同 XML 应 returned 的内容)。
示例响应类型: PartyResponse -> PartyRec -> PartyInfo PartyInfo 结构在数据库中存储为 XML。
我如何 return 来自 Java 的响应,插入 XML 部分而不用 JAXB 将其反序列化为 Java 对象,只是为了再次将其序列化为 XML 之后立即通过 CXF?
可以使用jaxws Provider的Payload方式。 参见 http://cxf.apache.org/docs/provider-services.html
您的服务然后可以 return 一个 Source 对象,它只是一个通用 XML 对象。如下所示:
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;
}
}