如何实现接收 SOAP XML(SAAJ?)而不是生成的对象(通过 CXF)的 SOAP 端点

How to implement SOAP Endpoints that receive SOAP XML (SAAJ?) instead of generated objects (by CXF)

我们目前已经使用 CXF(Spring 启动)实现了 SOAP 端点。按照契约优先的方式,我们提供一个WSDL,从中生成Java个对象和服务(cxf-codegen-plugin),最后实现服务接口。

这一切都很好也很简单,但是我们只需要 SOAP XML 或相应的 DOM 树 。不仅不需要转换为 Java 对象,我们还必须将它们转换回 XML 并且 会丢失原始 XML 中的一些信息。

据我所知 SAAJ(带附件的 SOAP API for Java)就在这里,还是我遗漏了什么?至多所有关于 SAAJ 的资源都很旧 和“低水平”。我找不到适合这种方法的好资源。

此外,我们希望尽快将新服务实现为微服务,目前正在审查 QuarkusApache Camel。但是,我找不到一种(简单的)方法来从 WSDL 创建相应的端点,然后我们通过它接收 SOAP 消息作为普通 XML / DOM 树。

也许您有一些有用的提示,无论 SAAJ 是否可行,或者是否有更好的 APIs !也许我现在被高级 API 宠坏了;-) 你有什么进一步的提示可以帮助我吗?

此致 圣诞快乐

在 jax-ws 中,消息级别的访问可以在服务器端使用基于 Web 服务提供商的端点完成,在客户端使用 Dispatch 客户端完成。

基于 Web 服务提供商的端点为基于 Java 服务端点接口 (SEI) 的端点提供了动态替代方案。与抽象化 Java 对象及其 XML 表示之间转换细节的基于 SEI 的端点不同,Provider 接口使您能够直接在 XML 消息级别访问内容——无需JAXB 绑定。基于 Web 服务提供者的端点可以分别使用 javax.xml.ws.Provider 或 com.sun.xml.ws.api.server.AsyncProvider 接口同步或异步实现。

详情见https://cxf.apache.org/docs/provider-services.html