2

XmlAdapter を HashMap に機能させようとしていますが、例外が発生し続けます。私はこのブログのエントリを非常に注意深くフォローしており、コードを何度も見直しましたが、問題は見られません。

の最新バージョンをorg.eclipse.persistence.jaxb.JAXBContextFactoryJAXB プロバイダーとして使用しています。

これが私の XML のサンプルです。

<test>
  <myName>Paul</myName>
  <mappings>
    <entry key="man">manufacturer</entry>
    <entry key="prod">product</entry>
  </mappings>
<test>

上記のブログ投稿の手順に従います。

1.マッピング不可能なクラスを特定する

をマッピングしようとしていますjava.util.HashMap

2. マッピング可能な同等のクラスを作成する

public class MappingType
{
  public List<MappingEntryType> entry = new ArrayList<MappingEntryType>();
}

public class MappingEntryType
{
  @XmlAttribute
  public String key;
  @XmlValue
  public String value;
}

3. マップ不可オブジェクトとマップ可能オブジェクトを変換する XmlAdapter を作成する

public class MappingAdapter extends XmlAdapter<MappingType,
                                               HashMap<String, String>>
{
  @Override
  public HashMap<String, String> unmarshal(MappingType v> throws Exception
  {
    HashMap<String, String> hashMap = new HashMap<String, String>();
    for (MappingTypeEntry mappingEntry : v.entry)
    {
      hashMap.put(mappingEntry.key, mappingEntry.value);
    }
    return hashMap;
  }

  // marshal is here but I'm just working on unmarshalling now
}

4. XmlAdapter を指定する

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "test")
public class TestEntity
{
  @XmlElement
  private String myName;

  @XmlJavaTypeAdapter(MappingAdapter.class)
  HashMap<String, String> mappings;

  // getters & setters omitted in a feeble attempt at brevity
}

次のステップを追加しました。これを 5 と呼びます。スタック トレース

Exception [EclipseLink-3001](Eclipse Persistence Services-2.3.0.v20110604-r9504):
org.eclipse.persistence.exceptions.ConversionException
ExceptionDescription: The object [mypackage.MappingType@145d424], of class
[class mypackage.MappingType],could not be converted to [class java.util.HashMap]
  at etc etc

MappingType例外の説明は非常に明確ですが、 を に変換しようとしている場所がわかりませんHashMap。質問を入力すると答えにたどり着くことがありますが、今回はそうではありません。

簡単なことだと思います - 私の間違いに気づいたら、指摘してください!

ありがとう!

ところで、Blaise Doughan のブログには JAXB と MOXy に関する素晴らしい情報が満載で、チェックする価値があります。

4

2 に答える 2

1

何が起こっているのかわからなくても、問題を解決する方法を考えました。

このプロジェクトでSpringフレームワークを使用していて、XmlAdapterクラスはとしてマークされてい@Componentます。その注釈を削除すると、コードが完全に機能するようになりました。何らかの理由で、アダプターをSpringで管理しているため、JAXBプロバイダーがクラスを使用してXMLをアンマーシャリングできませんでした。

于 2011-08-02T03:09:07.577 に答える
0

XmlAdapterの公式ドキュメントを参照できます。彼らは同じ例を挙げています。

于 2012-06-06T05:51:55.467 に答える