【发布时间】:2014-01-06 20:08:14
【问题描述】:
我遇到了关于 jaxb 的问题。我的元素之一是要求我设置JAXBElement<String>,而不仅仅是String。我知道解决这个问题的方法是更改 xsd,正如这里所讨论的 JAXB generating JAXBElement<String> instead of String,但 xsd 是由供应商提供的,我们无法说服他们更改它。
显然另一种解决方案是指定一个属性<jaxb:globalBindings generateElementProperty="false">,这将全局关闭JAXBElements,这也不是我们想要的。
根据this page,应该可以在<jaxb:property> 自定义中本地设置generateElementProperty="false"。我怎样才能在绑定文件中做到这一点?我能找到的唯一示例(如this)似乎是直接在xsd 中设置它——如果我可以改变它,我只需删除minOccurs。
我当前的绑定文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<jxb:bindings version="1.0" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema" jxb:extensionBindingPrefixes="xjc" xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
<jxb:bindings schemaLocation="../XXXPrivateService.xsd" node="/xs:schema">
<jxb:globalBindings>
<xjc:noValidator />
<xjc:serializable />
</jxb:globalBindings>
<jxb:schemaBindings>
<jxb:package name="com.XXX.YYYY.xsd.XXXprivateservice">
<jxb:javadoc><![CDATA[<body>TODO</body>]]></jxb:javadoc>
</jxb:package>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="../XXXPrivateService_1_2.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="com.XXX.YYYY.xsd.XXXprivateservice.two">
<jxb:javadoc><![CDATA[<body>TODO</body>]]></jxb:javadoc>
</jxb:package>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="../XXXPrivateService_1_2_3.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="com.XXX.YYYY.xsd.XXXprivateservice.three">
<jxb:javadoc><![CDATA[<body>TODO</body>]]></jxb:javadoc>
</jxb:package>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="../XXXPrivateService_1_2_3_4.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="com.XXX.YYYY.xsd.XXXprivateservice.four">
<jxb:javadoc><![CDATA[<body>TODO</body>]]></jxb:javadoc>
</jxb:package>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="../XXXPrivateService_1_2_3_4_5.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="com.XXX.YYYY.xsd.XXXprivateservice.five">
<jxb:javadoc><![CDATA[<body>TODO</body>]]></jxb:javadoc>
</jxb:package>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="../XXXPrivateService_1_2_3_4_5_6.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="com.XXX.YYYY.xsd.XXXprivateservice.six">
<jxb:javadoc><![CDATA[<body>TODO</body>]]></jxb:javadoc>
</jxb:package>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="../XXXPrivateService_1_2_3_4_5_6_7.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="com.XXX.YYYY.xsd.XXXprivateservice.seven">
<jxb:javadoc><![CDATA[<body>TODO</body>]]></jxb:javadoc>
</jxb:package>
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>
XSD 的违规部分如下所示:
<xs:element name="PayWithPointsRedemption">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="requestSourceId" type="xs:unsignedInt"/>
<xs:element minOccurs="0" name="rewardsAccountId" type="xs:unsignedInt"/>
<xs:element minOccurs="0" name="XXXReferenceId" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="externalChannelCode" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="payWithPointsRedemptionDetails" nillable="true" type="q4:ArrayOfPayWithPointsRedemptionDetail" xmlns:q4="http://ZZZZZ.YYYY.com/XXXRewards"/>
</xs:sequence>
</xs:complexType>
</xs:element>
【问题讨论】: