有没有办法为xs:list的内容(itemType)自定义JAXB绑定

时间:2016-01-26 16:56:24

标签: java jaxb xjc

有没有办法为xs:list自定义JAXB绑定?下面的例子:

<simpleType name="doubleList">
    <list itemType="double" />
</simpleType>

将受xjc约束:List<Double>。但是,我想将其绑定到:List<BigDecimal>

我的初始设置是定义这样的绑定:

<jaxb:bindings multiple="true" node="//xs:simpleType[@name='doubleList']/xs:list/@itemType">
     <jaxb:property>
          <jaxb:baseType name="java.math.BigDecimal" />
     </jaxb:property>
</jaxb:bindings>

但是,这会产生以下问题:

  

XPath评估“// xs:simpleType [@ name ='doubleList'] / xs:list / @ itemType”需要生成一个元素。

有没有办法在不借助编写自己的自定义适配器的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

上面的doubleList在其他地方使用过。在这些点上应用绑定,产生正确的Javaclass。可以肯定的是,只选择合适的基本类型就足够了。

所以在其他地方使用doubleList的地方:

   <complexType name="DirectPositionType">    
    <simpleContent>
        <extension base="gml:doubleList">
            <attributeGroup ref="gml:SRSReferenceGroup" />
        </extension>
    </simpleContent>
</complexType>

结合

   <jaxb:bindings schemaLocation="http://schemas.opengis.net/gml/3.2.1/geometryBasic0d1d.xsd" node="/xs:schema">
    <jaxb:bindings multiple="true" node="//xs:complexType[@name='DirectPositionType']">
        <jaxb:property>
            <jaxb:baseType name="java.math.BigDecimal" />
        </jaxb:property>
    </jaxb:bindings>   
</jaxb:bindings>

生成的Java类:

public class DirectPositionType 
{
    @XmlValue
    protected List<BigDecimal> value;
    @XmlAttribute(name = "srsName")