0

JMapper を使用して StaticS から StaticD クラスにマップしようとしています。以下が構成です。

<jmapper>
  <class name="com.StaticD">
    <global>
       <value name="map"/>
    </global>
  </class>
  <class name="com.StaticS">
    <conversion name="toDate" from="map" to="startDate, endDate">
        return new java.text.SimpleDateFormat("dd/MM/yyyy").parse((String)${source}.get("${destination.name}"));
    </conversion>
    <conversion name="toString" from="map" to="securityName, id">
        return (${destination.type}) ${source}.get("${destination.name}");
    </conversion>
  </class>
</jmapper>

クラスは次のとおりです。

public class StaticS {

    private Map<String, String> map;

    public Map<String, String> getMap()
    {
        return map;
    }

    public StaticS(Map<String, String> map) {
        super();
        this.map = map;
    }
}


public class StaticD {

    private Date startDate;

    private Date endDate;

    private String id;

    private String securityName;

    public Date getStartDate() {
        return startDate;
    }
    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }
    public Date getEndDate() {
        return endDate;
    }
    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }
    public String getId()
    {
        return id;
    }
    public void setId(String id)
    {
        this.id = id;
    }
    public String getSecurityName() {
        return securityName;
    }
    public void setSecurityName(String securityName) {
        this.securityName = securityName;
    }
    public StaticD() {}
}

これら2つのファイルをマップするためにマッパーフレームワークを呼び出す方法は次のとおりです。

Map<String, String> map = new HashMap<>();
        map.put("id", "JMapper Framework v.1.2.0");
        map.put("endDate", "22/08/1988");
        map.put("startDate", "22/08/1987");
        map.put("securityName", "IBM");

        // ANNOTATION
        JMapper<StaticD, StaticS> mapper = new JMapper<StaticD, StaticS>(StaticD.class, StaticS.class, "staticConversion.xml");
        StaticD destination = mapper.getDestination(new StaticS(map));
        System.out.println(destination);

実際の出力は次のとおりです。

StaticD{id=JMapper Framework v.1.2.0, startDate=Sat Aug 22 00:00:00 CDT 1987, endDate=Sat Aug 22 00:00:00 CDT 1987, securityName=JMapper Framework v.1.2.0}

予想される出力は次のとおりです。

StaticD{id=JMapper Framework v.1.2.0, startDate=Sat Aug 22 00:00:00 CDT 1987, endDate=Sat Aug 22 00:00:00 CDT 1988, securityName=IBM}

ご覧のとおり、startDate は、実際の出力の StaticD クラスの start および endDate プロパティの両方になります。

プロパティごとに個別の変換を使用すると機能しますが、2 つの異なるプロパティに同じ変換を使用するとマッピングが機能しません。

たとえば、次のコードは機能しますが、コードは冗長です。

<conversion name="toString" from="map" to="securityName">
            return (${destination.type}) ${source}.get("${destination.name}");
        </conversion>
<conversion name="toString" from="map" to="id">
            return (${destination.type}) ${source}.get("${destination.name}");
        </conversion>

to 引数で複数のプロパティを使用すると、これら 2 つのクラスをマッピングするための前述の構成が機能しない理由を教えてください。

4

1 に答える 1