5

我想知道如何使 JAXB 编译器使我的 XML 模式中的某些元素在 java 类定义中声明为 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; }
}

这可以实现吗?

4

3 回答 3

0

我已经用另一种方式解决了这个问题。我正在创建一个工具,该工具将编辑生成的 java 源代码文件,并将添加/删除我需要的内容。有关更多信息,请参阅此:使用 Eclipse AST

于 2010-07-28T15:21:21.320 回答
0

我有类似的问题,我找到了以下库: http ://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#immutable

现在一切看起来都那么简单;)

于 2010-08-18T22:31:31.917 回答
0

没有标准的 JAXB 方法可以生成类似的类,因为 JAXB 规范不支持映射到类似的类。

您可以使用以下代码来避免使用 set 方法。只要有一个公共默认构造函数,您就可以根据需要添加其他构造函数。

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

@XmlAccessorType(XmlAccessType.FIELD)
public class mycomplex    
{    
        protected final boolean myboolean;    

        public boolean getMyboolean() { return myboolean; }    
}    

如果你想使用上面描述的类和一个非默认构造函数和一个标记为 final 的字段,你需要创建一个 XmlAdapter:

于 2010-07-26T17:57:28.753 回答