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

时间:2017-01-19 10:11:22

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

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

但是,我需要与使用Axis 1编写的一些遗留代码进行交互,这些代码专门在org.w3c.dom.Element个对象上运行 - 换句话说,我实际上必须尽快将参数直接转换回XML因为我得到了它们,这看起来非常低效。

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

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

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

1 个答案:

答案 0 :(得分:0)

我自己偶然发现了答案,所以这里有其他问题:

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

因此我的问题的解决方案只是使用Object作为参数并在我的方法中返回类型。不是一个大规模清洁的感觉解决方案,但它的工作原理。