Java 使xjc生成成员变量名与元素名完全相同的类

Java 使xjc生成成员变量名与元素名完全相同的类,java,jaxb,xjc,xjb,Java,Jaxb,Xjc,Xjb,有没有办法在外部绑定中指定生成的类中的成员变量名称在模式级别(即非全局绑定)上应遵循相同的字母大小写(而不是java约定) 我在模式中有名为XYZProperty的元素,这些元素本身应该有名为XYZProperty的相应成员变量,而不是XYZProperty。我尝试在绑定文件中添加以下内容,但无效: <jxb:bindings node="//xsd:complexType[@name='SomeType']/xsd:sequence/xsd:element[@name='XYZPrope

有没有办法在外部绑定中指定生成的类中的成员变量名称在模式级别(即非全局绑定)上应遵循相同的字母大小写(而不是java约定)

我在模式中有名为XYZProperty的元素,这些元素本身应该有名为XYZProperty的相应成员变量,而不是XYZProperty。我尝试在绑定文件中添加以下内容,但无效:

<jxb:bindings node="//xsd:complexType[@name='SomeType']/xsd:sequence/xsd:element[@name='XYZProperty']">
    <jxb:property name="XYZProperty"/>
</jxb:bindings>


其中//xsd:complexType[@name='SomeType']/xsd:sequence/xsd:element[@name='XYZProperty']是架构中元素的xpath。

xjc的OpenJDK实现使用
com.sun.xml.internal.bind.api.impl.NameConverter#toVariableName
将属性名转换为成员变量名。似乎没有任何实现可以保持变量名“原样”。如果适用,您可以编写您的,这将设置私有属性名称为其公共名称。插件可能如下所示:

import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;

import com.sun.tools.xjc.Options;
import com.sun.tools.xjc.Plugin;
import com.sun.tools.xjc.model.CClassInfo;
import com.sun.tools.xjc.model.CPropertyInfo;
import com.sun.tools.xjc.model.Model;
import com.sun.tools.xjc.outline.Outline;

public class XJCPlugin extends Plugin {
    @Override
    public String getOptionName() {
        return "XsameElementNames";
    }

    @Override
    public int parseArgument(Options opt, String[] args, int i) {
        return 1;
    }

    @Override
    public String getUsage() {
        return "  -XsameElementNames    :  set property private name as its public name";
    }

    @Override
    public void postProcessModel(Model model, ErrorHandler errorHandler) {
        for (CClassInfo c : model.beans().values()) {
            for (CPropertyInfo prop : c.getProperties()) {
                prop.setName(false, prop.getName(true));
            }
        }
    }

    @Override
    public boolean run(Outline arg0, Options arg1, ErrorHandler arg2) throws SAXException {
        return true;
    }
}

谢谢你的建议。但是我不认为我可以在现有的项目中使用我自己的实现。直到现在我才明白jaxb绑定元素属性的实际功能,即它只使用遵循命名约定的名称。