我正在處理一個配置XML文件,我希望它是動態的。JAXB繼承動態命名標籤
我有以下類別:
庫:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "repository")
public class Repository
implements Serializable
{
@XmlElement(name = "custom-configuration")
private CustomConfiguration customConfiguration;
...
// Constructor
// Getters and setters
}
CustomConfiguration:
@XmlAccessorType(XmlAccessType.FIELD)
public class CustomConfiguration
{
}
FooBarConfiguration:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "foo-bar-configuration")
public class FooBarConfiguration extends CustomConfiguration
{
@XmlAttribute
private String bucket;
@XmlAttribute
private String key;
public FooBarConfiguration()
{
}
public String getBucket()
{
return bucket;
}
public void setBucket(String bucket)
{
this.bucket = bucket;
}
public String getKey()
{
return key;
}
public void setKey(String key)
{
this.key = key;
}
}
這是我想擁有的一切:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<repository id="test-repository">
<foo-bar-configuration bucket="test-bucket" key="test-key"/>
<group/>
</repository>
這就是我得到相反:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<repository id="test-repository">
<customConfiguration xsi:type="fooBarConfiguration" bucket="test-bucket" key="test-key" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<group/>
</repository>
任何想法如何實現這一目標?
問題是我沒有使用XSD。我有類可以擴展未知的CustomConfiguration。他們可能或不在類路徑中,所以我不能只寫一個容易的ObjectMapper(因爲我必須事先知道這些類的名字)。還有其他建議嗎? – carlspring
@carlspring你不需要XSD,也不需要事先知道類。將'ObjectFactory'放在你的擴展類所在的位置。構建JAXB上下文時在運行時使用它。編譯時無需知道這些類。 – lexicore
您是否認爲您可以快速瀏覽我的差異:https://github.com/strongbox/strongbox/pull/183/files並告訴我我做錯了什麼? (如果您想構建代碼,請點擊此處:https://github.com/strongbox/strongbox/wiki/Building-the-code)。這是我得到的錯誤:https://github.com/strongbox/strongbox/pull/183/commits/9bdc666c32e7ba04df2e1befe7655050c1652bc9。 – carlspring