我想配置 xjc 以使用 jaxb2-basics-annotate 插件在生成的Java类中注释某个属性,但我正在努力解决特定的XML元素使用 XPath 。
以下是 xsd 的摘录(顺便提一下,我自己无法更改):
<xs:complexType name="ExpressionType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
相应的xjc生成的Java类如下所示:
....
public class ExpressionType
{
@XmlValue
protected String value;
@XmlAttribute(name = "id", required = true)
protected String id;
...
在bindings.xjb
文件中我想配置Java属性value
由注释XmlJavaTypeAdapter
注释,如下所示:
<jxb:bindings node="//xs:complexType[@name='ExpressionType']/<???>" multiple="true">
<annox:annotate target="field">@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(MyOwnCdataAdapter.class)</annox:annotate>
</jxb:bindings>
三个???
引用我的问题;-):如何解决在XPath中映射到Java属性value
的内部内容?
对于我成功使用的id
属性
//xs:complexType[@name='ExpressionType']/xs:simpleContent/xs:extension/xs:attribute[@name='id']
但是根据我的要求,我不知道如何在xpath中表达这一点,也反映出该类型是xs:string
的扩展名。
答案 0 :(得分:1)
请参阅this issue了解解决方案。
我只是在这里复制粘贴解决方案,以避免仅限于链接&#34; downvotes。
这似乎比我想象的要复杂得多。我没有设法使用标准XJC方法将自定义附加到简单的内容派生属性。所以我写了customizations
插件,它从文件中读取自定义,与类或字段相关联。例如,org\jvnet\jaxb2_commons\tests\issues\Gh24Type.value.xml
自定义value
类的org.jvnet.jaxb2_commons.tests.issues.Gh24Type
属性。
它是如何运作的:
jaxb2-basics
-Xcustomizations
插件,并将-Xcustomizations-directory=<dir>
指向要从中加载自定义文件的目录。例如,${basedir}/src/main/resources
。value
类的org.jvnet.jaxb2_commons.tests.issues.Gh24Type
属性,您将拥有src/main/resources/org/jvnet/jaxb2_commons/tests/issues/Gh24Type.value.xml
文件。将您的自定义设置放入此文件中。必须是有效的XML,例如:
@ javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(MyOwnCdataAdapter.class)
请参阅this project,尤其是Gh24Type
。
这个新功能已经发布了jaxb2-basics的1.0.3版本。
希望这有帮助。
免责声明:我是jaxb2-annotate-plugin
的作者以及上述解决方案。