Java JAXB构造函数注入

Java JAXB构造函数注入,java,jaxb,customization,constructor-injection,Java,Jaxb,Customization,Constructor Injection,我想知道如何让JAXB编译器在java类定义中将XML模式中的某些元素声明为final,我还想控制不同的构造函数,正如在中一样,我希望有一个构造函数可以使用类中包含的完整参数列表以及JAXB所需的默认私有构造函数来创建对象 有什么帮助吗 谢谢 下面是我正在尝试做的一个例子: 现在生成的代码看起来像 公共类mycomplex { 受保护布尔; 公共布尔getMyboolean(){return myboolean;} public void setMyboolean(boolean b){th

我想知道如何让JAXB编译器在java类定义中将XML模式中的某些元素声明为final,我还想控制不同的构造函数,正如在中一样,我希望有一个构造函数可以使用类中包含的完整参数列表以及JAXB所需的默认私有构造函数来创建对象

有什么帮助吗

谢谢

下面是我正在尝试做的一个例子:


现在生成的代码看起来像

公共类mycomplex
{
受保护布尔;
公共布尔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; }
}

这可以实现吗?

没有标准的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:


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

      我有类似的问题,我发现了以下库:


      现在一切似乎都很简单;)

      请给我们一些例子,包括您正在谈论的模式组件的种类,以及您希望如何在java.original post中表示它们。可能吗?我认为不可能。据我所知,构造函数注入从未添加到JAXB2中,尽管我认为它是在某一点上计划的。Kohsuke在这里解释了为什么不可能:。就我个人而言,我认为这是公牛$%#$,因为大家都已经使用了不安全的工具。还有一个用于构造函数注入的JDK注释:非常感谢,但这并不完全是我想要的。我将对数百个类进行解组,这意味着这样做将非常乏味,因为我必须自己定义所有内容,这些类都会随着时间的推移而变化-->如果我必须一直重新定义,这将非常耗时。有没有一种方法可以在跨数百个不同类的自动化过程中适应这种行为?再次感谢。@BlaiseDoughan您是否有机会添加到您的Moxy中?@AdamGent-您是否介意提供此信息作为对以下增强请求的评论