JAXB如何在子类数组中强制xsi:type?(JBoss 4.2.3)

JAXB如何在子类数组中强制xsi:type?(JBoss 4.2.3),jboss,jaxb,Jboss,Jaxb,(请注意,我对webservices完全陌生,因此以下内容可能很愚蠢/不正确,但请耐心等待) 在我的WebServices'@WebMethod中,我返回一个抽象基类数组(JBoss4.2.3中的JAXB注释实体) 显然,除非对每个数组元素的类型信息进行编码,否则这将失败 那么如何确保JAXB添加xsi:type属性呢? 我的WebService界面有以下注释,我尝试了所有合法组合: @SOAPBinding(style=RPC,parameterStyle=WRAPPED,use=LITERA

(请注意,我对webservices完全陌生,因此以下内容可能很愚蠢/不正确,但请耐心等待)

在我的WebServices'@WebMethod中,我返回一个抽象基类数组(JBoss4.2.3中的JAXB注释实体)

显然,除非对每个数组元素的类型信息进行编码,否则这将失败

那么如何确保JAXB添加xsi:type属性呢?

我的WebService界面有以下注释,我尝试了所有合法组合:

@SOAPBinding(style=RPC,parameterStyle=WRAPPED,use=LITERAL)

此接口上的方法采用注释为@WebParam的x2参数(name=“…”,mode=IN)

其他具有类似签名的方法不能返回异构数组,它们可以完美地工作


一些相关的事情: 看起来JBoss使用方法签名中定义的类型来决定要加载到JAXBContext中的类-如果我将返回类型更改为Object[],它会抛出一个错误,指出AbstractBase类“或者它的任何超类都不为该上下文所知”我添加了返回特定子类的伪方法,以便生成的WSDL具有所有子类的列表

当我尝试为此编写测试时,对于单个元素来说一切正常,但是JAXB对于数组类型抛出了一个错误:无法将类型“[LAbstractBase;”封送为元素,因为它缺少@XmlRootElement注释

来自如下所示的代码(注意:AbstractBase、ConcreteOne和ConcreteTwo都有@XmlRootElement注释)

这是有效的,在JBoss Web服务中返回这个也是有效的!尽管我正在使用:

@SOAPBinding(style = DOCUMENT, parameterStyle = BARE, use = LITERAL)
因此它没有添加xsi:type属性,但是文档节点被正确标记:

<ConcreteOne>...</ConcreteOne>
。。。

在某个时候,我会将Web服务更改为使用RPC,因为我不太喜欢单参数限制,但现在它运行良好。

以下内容可能会有所帮助:谢谢Blaise,我已经阅读了那篇文章!这篇文章让我进行了测试。我现在开始了,请回答下面的问题。你的博客文章很好,很简洁,再次感谢=)
@SOAPBinding(style = DOCUMENT, parameterStyle = BARE, use = LITERAL)
<ConcreteOne>...</ConcreteOne>