使用@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
级别?
答案 0 :(得分:0)
我自己偶然发现了答案,所以这里有其他问题:
正如documentation中所述,JAXB可以将xsd:anyType
封送到Object
。结果对象的具体类型是apache.xerces.internal.dom.ElementNSImpl
,它是org.w3c.dom.Element
的实现 - 也就是我所需要的!
因此我的问题的解决方案只是使用Object
作为参数并在我的方法中返回类型。不是一个大规模清洁的感觉解决方案,但它的工作原理。