是否可以在不使用@WebServiceProvider 的情况下访问 JAX-WS 中的原始请求 XML?

Is it possible to access the raw request XML in JAX-WS without using @WebServiceProvider?

使用 @WebService@WebMethod 定义的 JAX-WS 服务利用 JAXB 将 XML 转换为 Java 对象。对于大多数用例,这很棒!

但是,我需要与一些使用 Axis 1 编写的遗留代码进行交互,这些代码专门对 org.w3c.dom.Element 对象进行操作 - 换句话说,我实际上只需将参数直接转换回 XML 我一拿到它们,这看起来效率低得可怕。

因此,我一直在寻找一种从 JAX-WS 服务接收 return 原始 XML 的方法,无论是作为字符串还是作为对象。

我已经能够通过使用 @WebServiceProvider 和实现 Provider<Source> 接口来获得我需要的功能,但是对于我正在做的事情来说,这感觉有点太低级了做 - 我不能使用 @WebMethod 轻松设置路由;相反,我必须从 WebServiceContext 和 fiddle 中获取 PATH_INFO 和字符串来获取我需要的信息。

所以我的问题是,有没有一种方法可以在 JAX-WS 服务中使用原始 XML(有效地去除 JAXB)而不下降到 @WebServiceProvider 级别?

我只是自己偶然发现了答案,所以这里是给遇到这个问题的其他人的:

documentation 中所述,JAXB 可以将 xsd:anyType 编组为 Object。结果对象的具体类型是 apache.xerces.internal.dom.ElementNSImpl,它是 org.w3c.dom.Element 的实现 - 即正是我需要的!

因此,我的问题的解决方案就是在我的方法中使用 Object 作为参数和 return 类型。不是一个非常干净的感觉解决方案,但它有效。