我有一个现有的 CXF Java 网络服务,它返回一个深度、复杂、嵌套的响应类型。部分响应类型存在于数据库中,存储为纯 XML 消息(应该返回的 XML 完全相同)。
示例响应类型: PartyResponse -> PartyRec -> PartyInfo PartyInfo 结构在数据库中存储为 XML。
我如何返回来自 Java 的响应,插入 XML 部分而不用 JAXB 将其反序列化为 Java 对象,然后立即通过 CXF 将其再次序列化为 XML?
最佳答案
可以使用jaxws Provider的Payload方式。 参见 http://cxf.apache.org/docs/provider-services.html
然后您的服务可以只返回一个 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;
}
}
关于java - 包含 XML 内容的 CXF Web 服务响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30307087/