2010-07-23 176 views
5

我想知道如何让JAXB编译器使我的XML模式中的某些元素在java类定义中声明为final,并且我还想能够控制不同的构造函数,如我想要一个构造函数,它可以使用包含在类中的完整参数列表以及JAXB所需的默认私有构造函数来创建对象。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; } 
} 

这可以实现吗?

+0

请给我们的例子,包括排序架构你正在谈论的组件,以及你想如何用java表示它们。 – skaffman 2010-07-23 08:57:15

+0

原创文章编辑。可能吗? – ExtremeCoder 2010-07-23 09:17:53

+0

我不认为这是,不。据我所知,构造函数注入从未被添加到JAXB2,尽管我认为它是在一个点上计划的。 – skaffman 2010-07-23 16:51:18

回答

0

我用另一种方式解决了这个问题。我正在创建一个工具来编辑生成的java源代码文件,并将添加/删除我需要的东西。请参阅本作的更多信息:Using the Eclipse AST

0

没有一种标准的JAXB方法来生成类似这样的类,因为JAXB规范不支持映射到类。

您可以使用下面的代码来避免设置方法。只要有公共默认构造函数,就可以添加其他构造函数。

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; }  
}  

如果你想使用你使用非默认的构造函数上面描述和现场标志着最后,你需要创建一个XmlAdapter类:

+0

非常感谢你的这一点,但这不完全是我所知寻找。我将解组数百个类,这意味着做这样的事情将会非常繁琐,因为我必须自己定义所有的东西,而且这些类都会随时变化 - 如果我不得不重新定义,非常耗时所有的事情。在数百个不同类别的更自动化过程中是否有适应这种行为的方式? 再次感谢。 – ExtremeCoder 2010-07-27 07:24:15

+0

@BlaiseDoughan你有没有机会将http://docs.oracle.com/javase/6/docs/api/java/beans/ConstructorProperties.html添加到你的Moxy中? – 2012-10-24 16:30:47

+0

@AdamGent - 您是否介意将此作为对以下增强请求的评论?:http://bugs.eclipse.org/328951 – 2012-10-24 16:37:04