在绑定自定义中使用scd时,xjc出错

时间:2011-07-06 20:39:25

标签: plugins maven jaxb

使用scd自定义绑定时,无法识别非Sun jaxb插件

例如,这不起作用:

<jaxb:bindings
    scd="/~fpml:TradeHeader">
    <ext:interfaces>
        example.TradeHeaderDelegateInterface
    </ext:interfaces>
</jaxb:bindings>    

然而,这有效:

<jaxb:bindings
    schemaLocation="../schemas/fpml-5-1/fpml-doc-5-1.xsd"
    node="/xsd:schema//xsd:complexType[@name='TradeHeader']">
    <ext:interfaces>
        example.TradeHeaderDelegateInterface
    </ext:interfaces>
</jaxb:bindings>

并且,这有效:

<jaxb:bindings 
    scd="/~fpml:CommodityMarketDisruption//fpml:marketDisruptionEvent">
    <jaxb:property name="marketDisruptionEvent"/>
</jaxb:bindings>

这让我觉得scd和第三方插件不相处:

我得到的错误是:

[ERROR] Error while parsing schema(s).Location [ file:/C:/projects/domain-fpml-5-1/src/main/resources/xjb/fpml-5-1.xjb{40,19}].
org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ext:interfaces'.

我的.xjb文件确实声明了“ext”前缀的命名空间,所以这不是问题。

有没有人使用过xjc插件(例如像copyable等那样的jaxb commons)并使用它来处理基于scd的自定义?

我的xjc版本是:2.2.2,我正在使用maven-jaxb2-plugin(版本0.8.0)插件来生成绑定。

感谢您的帮助,

阿拉汶

1 个答案:

答案 0 :(得分:1)

maven-jaxb22-plugin:jar:0.8.1:runtime,com.sun.xml.bind:jaxb-impl:jar:2.2.5-b10:runtime,com.sun.xml.bind:jaxb-xjc :jar:2.2.5-b10:runtime]仍然存在这个问题。

从查看xjc源代码(前一段时间),这不是一个简单的修复,因为自定义不会“导入”到目标xsd中,并且处理发生在匹配组件的上下文中。

Schema解析器就是这种情况,其中模式被“导入”到绑定上下文中,因此所有命名空间都是有效的。

我已将所有自定义还原为架构样式。我记得当尝试在同一个绑定文件中同时执行wsdl和xsd时,这会带来痛苦的影响。