我有一個UUID類,我從靜態工廠方法(如 )獲取uuid UUIDGenerator.getInstance()。getUuid();當使用工廠方法檢索到一個值時,從JAXB創建xml
我有另一個有這些UUids作爲列表的類。
class Artifact
{
Uuid uuid;
setUuid(Uuid uuid)
{
this.uuid = uuid;
}
Uuid getUuid()
{
return this.uuid;
}
}
Class ArtifactData
{
private List<Artifact> artifacts;
//setter for list
// getter for list
}
我想XML以創建爲
<ArtifactData>
<AssociatedArtifactList>
<ArtifactUuid>#some value<ArtifactUuid>
</AssociatedArtifactList>
</ArtifactData>
如何創建這個XML列JAXB註釋。它抱怨說沒有Uuid的公共構造函數,因爲它是用工廠方法構建的。
編輯:Uuid和Uuid發生器不能被修改。他們在JAR中。這是我到目前爲止所嘗試的
public class Artifact
{
@XmlJavaTypeAdapter(ArtifactUuidAdapter.class)
private Uuid uuid;
public Uuid getUuid()
{
return uuid;
}
public void setUuid(Uuid uuid)
{
this.uuid = uuid;
}
}
@XmlRootElement
public class ArtifactData
{
private List<Artifact> associatedArtifactList;
public List<Artifact> getArtifacts()
{
return associatedArtifactList;
}
@XmlElementWrapper(name="associatedArtifactList")
@XmlElement(name = "artifactUuid")
public void setArtifacts(List<Artifact> artifacts)
{
this.associatedArtifactList = artifacts;
}
}
public class ArtifactUuidAdapter extends XmlAdapter<Uuid, String>
{
@Override
public Uuid marshal(String uuid) throws Exception
{
return Uuid.getInstance(uuid);
}
@Override
public String unmarshal(Uuid uuid) throws Exception
{
return uuid.getData();
}
}
我仍然收到一個錯誤,稱爲no arg默認構造函數丟失。
也許使用@XmlJavaTypeAdapter註釋http://jaxb.java.net/nonav/2.2.6/docs/api/javax /xml/bind/annotation/adapters/XmlJavaTypeAdapter.html將其轉換爲不同的類型,例如字符串,可以工作(我自己從未嘗試過)。 – Eelke
如果您在列表中有兩個「Artifact」實例,那麼您的XML將如何? –
這將是2 ArtifactUuid元素 – Phoenix