我们要求XML标记与java POJO属性不相似。
我们需要一个解决方案,将XML标签映射到具有不同名称的POJO。
这是相同的XML,
<RES>
<TAG1>
value
</TAG1>
</RES>
这是POJO类,
public class Response {
protected String tag1Value;
...}
这里我要映射到POJO中的tag1Value。
我发现下面的语法可用于将XML映射到java属性。
public class Response {
@XmlElement(name="TAG1")
protected String tag1Value;
...}
但我想知道如何在XSD中配置它,以便可以在XMLElement中使用name属性生成POJO。
使用以下XSD如何一起指定java属性名称和XML nae,
<xsd:element name="tag1Value" minOccurs="0" maxOccurs="1">
帮助表示赞赏......
答案 0 :(得分:0)
您可以通过自定义指定架构的jaxb绑定来实现:
(我假设您的xsd看起来如何,但如果我错了,您可以调整目标节点的路径)
<jxb:bindings schemaLocation="../xsd/your_schema.xsd">
<jxb:bindings node="//xs:element[@name='Response']//xs:complexType//xs:all//xs:element[@name='tag1Value']">
<annox:annotate target="field">
<annox:annotate annox:class="javax.xml.bind.annotation.XmlElement" name="TAG1" />
</annox:annotate>
</jxb:bindings>
</jxb:bindings>
答案 1 :(得分:0)
这就是绑定的目的。
创建一个名为bindings.xjb
的文件(xjb
按惯例是文件扩展名)。在此文件中,您可以自定义代码生成的某些方面。例如,您可以使用jaxb:property
在生成的类中指定属性的名称:
<jaxb:bindings version="1.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jaxb:extensionBindingPrefixes="xjc">
<jaxb:bindings
schemaLocation="mySchema.xsd"
node="/xs:schema">
<!-- node is the XPath leading to the element you want to customize -->
<jaxb:bindings node="xs:complexType[@name='SomeComplexType']/xs:sequence/xs:element[@name='TAG1']">
<jaxb:property name="tag1Value"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
您可以在编译期间使用xjc mySchema.xsd -b bindings.xjb
或使用Maven插件或Ant任务的配置选项(无论您使用什么)提供此文件。
这将生成名为tag1Value
的属性,该属性将使用@XmlElement(name="TAG1")
进行注释。