【问题标题】:Is it possible to access the raw request XML in JAX-WS without using @WebServiceProvider?是否可以在不使用 @WebServiceProvider 的情况下访问 JAX-WS 中的原始请求 XML?
【发布时间】:2017-01-19 10:11:22
【问题描述】:

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

但是,我需要与一些使用 Axis 1 编写的遗留代码进行交互,这些代码专门在 org.w3c.dom.Element 对象上运行 - 换句话说,我只需在获得参数后立即将它们直接转换回 XML ,这似乎非常低效。

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

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

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

【问题讨论】:

    标签: java xml web-services jaxb jax-ws


    【解决方案1】:

    我自己偶然发现了答案,所以这里是为遇到此问题的其他人提供的:

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-02
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多