JAXB自己重命名属性

时间:2016-02-22 07:55:59

标签: java xml xsd jaxb rename

在我的XSD中,我有以下属性:

<xs:element name="id8digits" type="xs:string" minOccurs="0"/>

但是当我使用JAXB生成java-classes时,它将其重命名为:

@XmlElement(name = "id8digits", namespace = "my.org.name")
protected String id8Digits; // Capital D instead of lower case d

XSD由第三方提供,我无法更改XSD本身。我已阅读有关绑定文件的内容,但即使我使用小写d将属性重命名为id8digits,JAXB也会将其重命名为大写字母D.

我也尝试过使用globalbindings并设置enableJavaNamingConventions="false",但这并没有成功。

bindings.xml

<jxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" version="2.1"><jxb:bindings schemaLocation="XSD.xsd">
<jxb:globalBindings enableJavaNamingConventions="false"/>
<jxb:bindings node="//xs:element[@name='id8digits']">
    <jxb:property name="id8digits"/>
</jxb:bindings>

1 个答案:

答案 0 :(得分:0)

你在其他地方遇到问题: -

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="Test")
@XmlAccessorType(XmlAccessType.FIELD)
public class Test {

    @XmlElement(name = "id8digits", namespace = "my.org.name")
    protected String id8Digits;

    public String getId8Digits() {
        return id8Digits;
    }

    public void setId8Digits(String id8Digits) {
        this.id8Digits = id8Digits;
    }

    public static void main(String[] args) throws JAXBException {
        JAXBContext jc = JAXBContext.newInstance(Test.class);
        Marshaller m = jc.createMarshaller();
        Test jaxbElement = new Test();
        jaxbElement.setId8Digits("Testing");
        m.marshal(jaxbElement, System.out);
    }
}

输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Test xmlns:ns2="my.org.name"><ns2:id8digits>Testing</ns2:id8digits></Test>