javajaxb构造函数注入
我想知道如何让JAXB编译器在java类定义中将XML模式中的某些元素声明为final,我还想控制不同的构造函数,正如在中一样,我希望有一个构造函数可以使用类中包含的完整参数列表以及JAXB所需的默认私有构造函数来创建对象
有什么帮助吗
谢谢
下面是我正在尝试做的一个例子:
<xs:complexType name="mycomplex">
<xs:all>
<xs:element name="myboolean" type="xs:boolean"/>
</xs:all>
</xs:complexType>
现在生成的代码看起来像
public class mycomplex
{
protected boolean myboolean;
public boolean getMyboolean() { return myboolean; }
public void setMyboolean(boolean b) { this.myboolean = b; }
}
但我想编辑模式,使其看起来像:
public class mycomplex
{
protected final boolean myboolean;
public mycomplex(boolean b) { this.myboolean = b; }
public boolean getMyboolean() { return myboolean; }
}
这能实现吗
# 1 楼答案
没有标准的JAXB方法来生成这样的类,因为JAXB规范不支持映射到这样的类
您可以使用以下代码来避免使用set方法。如果需要,可以添加其他构造函数,只要有一个公共默认构造函数
如果要将上述类与非默认构造函数和标记为final的字段一起使用,则需要创建XmlAdapter:
# 2 楼答案
我用另一种方式解决了这个问题。我正在创建一个工具来编辑生成的java源代码文件,并添加/删除我需要的内容。有关更多信息,请参阅此文档:Using the Eclipse AST
# 3 楼答案
我有类似的问题,我发现了以下库: http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#immutable
现在一切似乎都很简单;)