2010-07-23 218 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