シンプルなXmlAdapterを動作させることができません

java jaxb moxy unmarshalling
シンプルなXmlAdapterを動作させることができません

XmlAdapterを動作させるためにHashMapに取得しようとしていますが、例外が発生し続けます。 http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html [このブログエントリ]を非常に厳密にフォローしましたが、コードを何度も確認しましたが、問題。

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

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

  Paul

    manufacturer
    product

上記のブログ投稿の手順に従ってください:

1. マップできないクラスを特定する

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

*2. Mappable *である同等のクラスを作成する

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

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

3. XmlAdapterを作成して、マッピングできないオブジェクトとマッピング可能なオブジェクトを変換します

public class MappingAdapter extends XmlAdapter>
{
  @Override
  public HashMap unmarshal(MappingType v> throws Exception
  {
    HashMap hashMap = new HashMap();
    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 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 [[email protected]], of class
[class mypackage.MappingType],could not be converted to [class java.util.HashMap]
  at etc etc

例外の説明は非常に明確ですが、「MappingType」を「HashMap」に変換しようとしている場所がわかりません。 時々質問をタイプすると、今度は答えが得られません。

私はそれが簡単なものであると確信しています-あなたが私の間違いを見たらそれを指摘してください!

ありがとうございます。

ちなみに、http://blog.bdoughan.com/ [Blaise Doughanのブログ]には、JAXBとMOXyの素晴らしい情報が満載です。

  2  0


ベストアンサー

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

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

1


XmlAdapterの公式ドキュメントを参照できます。 彼らは同じ例を示しました。

0


タイトルとURLをコピーしました