2

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 というエラーが表示されます。

4

1 に答える 1

0

アノテーションを使用すると、@XmlTypeファクトリクラスとメソッドを構成できます。質問で説明されているファクトリクラスはAPI要件を完全には満たしていませんが、そのアダプタを簡単に作成できます。

UUIDGeneratorAdapter

以下のクラスは、ファクトリクラスをJAXB(JSR-222)実装が利用できるものに適合させます。

public class UUIDGeneratorAdapter {

    public static Uuid getUuid() {
        return UUIDGenerator.getInstance().getUuid();
    }

}

Uuid

@XmlType以下は、アノテーションを使用してファクトリクラスを構成する方法の例です。

import javax.xml.bind.annotation.XmlType;

@XmlType(factoryClass=UUIDGeneratorWrapper.class, factoryMethod="getUuid")
public class Uuid {

    // ...

}

詳細については

于 2012-12-13T20:53:59.287 に答える