0

xmlマッピングを定義しました:

<mapping>
    <class-a>java.util.HashMap</class-a>
    <class-b>com.example.MyClass</class-b>
    <field>
        <a key=&quot;myDateField&quot;>this</a>
        <b>myXMLGregorianCalendarField</b>
    </field>
</mapping>

ここで、keyの値には。myDateFieldのインスタンスが含まれていますjava.lang.Date class。フィールドcom.example.MyClass#myXMLGregorianCalendarFieldはのインスタンスを期待しますjavax.xml.datatype.XMLGregorianCalendar

このマッピングは常に例外をスローします。

MapId: null
Type: null
Source parent class: java.util.HashMap
Source field name: this
Source field type: class java.util.Date
Source field value: Thu Jan 01 03:00:00 MSK 1970
Dest parent class: com.example.MyClass
Dest field name: myXMLGregorianCalendarField
Dest field type: javax.xml.datatype.XMLGregorianCalendar
org.dozer.MappingException: Illegal object type for the method 'setMyXMLGregorianCalendarField'. 
Expected types: 
    javax.xml.datatype.XMLGregorianCalendar
Actual types: 
    java.util.Date

この変換を正しく機能させるにはどうすればよいですか?

長時間のデバッグにより、プリミティブコンバーターはマップと「非マップ」で異なる方法で呼び出されることが明らかになりました。では、2番目の質問があります:なぜですか?

4

3 に答える 3

1

前のセクションで何を言っているのかわかりませんが、宛先クラスでカスタム セッターを使用してこのマッピングを実行できます。

マッピング ファイルは次のようになります。

<mapping>
    <class-a>java.util.HashMap</class-a>
    <class-b>com.example.MyClass</class-b>
    <field>
        <a key="myDateField">this</a>
        <b set-method="setMyXMLGregorianCalendarField(java.util.Date)">myXMLGregorianCalendarField</b>
    </field>
</mapping>

MyClassおそらくこのような変換を使用して、カスタム セッターを に実装します。

于 2012-04-03T15:09:08.837 に答える
0

日付からグレゴリオ暦に暗黙的に変換するヒント タグを試すことができます。

サンプルコードは次のとおりです。

    <フィールド>  
       <a key="myDateField">これ</a>
       <b>myXMLGregorianCalendarField</b>
       <a-hint>java.util.GregorianCalendar</a-hint>
   </フィールド>

 

暗黙の型変換を行うかどうかはわかりませんが、行う場合は、exta カスタム コンバーター メソッドを記述する必要はありません。の場合、暗黙的な変換が実行されません。カスタムの getter または setter メソッドを試してください。日付から GregorianCalendar への変換を実行します。カスタム getter および setter メソッドについては、次を参照してください: custom getter-setter

于 2012-05-17T06:48:28.040 に答える
0

おっと、私はここで答えを見つけました、 ブルドーザーでの自動変換

この下で、データ型変換の見出しの最後から 3 番目のオプションを見てください。彼らは、カスタム コンバーターの助けを借りずにこれらを内部的にマッピングできると書いています。

于 2012-05-17T06:51:57.990 に答える