Axis2 Web服务,自下而上的方法,复杂的对象

时间:2011-05-10 13:23:25

标签: java web-services wsdl jaxb axis2

我使用axis2将现有类的方法公开为Web服务(自下而上方法)。该方法将复杂对象(非基本类型)作为参数,并返回复杂对象。

我理解当我将方法公开为Web服务时,axis2将尝试在wsdl文件中为我生成模式,并且我可以通过访问Web服务URL获取wsdl文件并将?wsdl追加到最后它

但仔细研究后,参数中复杂类型的一些属性在结果wsdl的模式部分中表示为xs:anyType。转换为xs:anyType的属性是List。这样做的坏处是,当我为客户端代码生成存根代码时,设置特定属性的方法签名将把对象作为参数,即setAttribute(Object obj)。

所以我的解决方案是使用JAXB 2.0生成我需要的类的xml架构,然后将xsd导入到axis2生成的wsdl文件中(从web服务url +?wsdl下载)和使用编辑过的wsdl而不是自动生成的wsdl。这个解决方案似乎对客户端运行良好。设置存根代码生成的属性的方法签名将采用适当的类型,即setAttribute(AnotherComplexType abcd)。通过使用tcpmon,我可以看到从客户端发送到服务器的xml似乎是正确的。

但是,这种方法对服务器端不起作用,因为axis2不使用JAXB 2.0注释将接收到的xml转换回公开方法将能够处理的类。

我的问题是,无论如何要解决我的问题?我可以想到的可能方法是修改axis2接收xml后处理xml的方式(如果确实有办法,我可以手动处理它),或者让axis2与JAXB 2.0注释一起工作吗?或许还有其他想法吗?

注意:我没有使用axis2的JAX-WS部分

1 个答案:

答案 0 :(得分:1)

最后我自己解决了这个问题。我使用wsdl为服务器端生成存根代码,修改messageReceivers以使用生成的消息接收器,编写实现生成的接口的包装类,编写转换器以从包装类的参数中生成的类型转换对象方法将暴露给我的内部类型,而是公开包装类。

相关问题