UUIDGenerator.getInstance().getUuid(); のような静的ファクトリメソッドから uuid を取得する UUID クラスがあります。
これらの UUid をリストとして持つ別のクラスがあります。
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>
Jaxb アノテーションからこの xml を作成するにはどうすればよいですか。Uuid はファクトリ メソッドから構築されているため、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 default constructor is missing というエラーが表示されます。