在 Dozer 中使用参数转换具有一个 getter 的 j8583 对象
Converting j8583 object having one getter with params in Dozer
我有一个 IsoMessage 对象 (https://github.com/chochos/j8583/blob/master/src/main/java/com/solab/iso8583/IsoMessage.java),它有一个我只能通过 getField(int) 方法访问的内部数组。
public class IsoMessage {
@SuppressWarnings("rawtypes")
private IsoValue[] fields = new IsoValue[129];
.........
.........
.........
/** Returns the IsoValue for the specified field. First real field is 2. */
@SuppressWarnings("unchecked")
public <T> IsoValue<T> getField(int field) {
return fields[field];
}
我需要通过调用 getField(param Number) 读取存储在字段数组中的所有属性,并将它们移动到具有 Map 的新对象,并希望使用 dozer 来实现此目的。
我需要翻译的对象:
public class TransactionInstance implements Serializable {
private static final long serialVersionUID = 3429335891821913088L;
private String transactionName;
private Map<String, String> parameters;
我正在试验这种推土机配置,希望从我的 isoMessage 对象中获取字段 1
<mapping map-id="a">
<class-a>com.solab.iso8583.IsoMessage</class-a>
<class-b>j8583.example.TransactionInstance</class-b>
<field>
<a get-method="getField" key="1">field</a>
<b map-set-method="put">parameters</b>
</field>
</mapping>
但我一直坚持从原始对象中获取值,但出现此异常:
Exception in thread "main" org.dozer.MappingException: No read or write method found for field (field) in class (class com.solab.iso8583.IsoMessage)
at org.dozer.propertydescriptor.GetterSetterPropertyDescriptor.determinePropertyType(GetterSetterPropertyDescriptor.java:319)
at org.dozer.propertydescriptor.GetterSetterPropertyDescriptor.getPropertyType(GetterSetterPropertyDescriptor.java:76)
at org.dozer.fieldmap.MapFieldMap.determineActualPropertyType(MapFieldMap.java:170)
at org.dozer.fieldmap.MapFieldMap.getSrcFieldValue(MapFieldMap.java:95)
我正在检查这个 post https://github.com/DozerMapper/dozer/issues/111 and How to pass `this` to Dozer field mapping? 总线仍然卡在同一个地方,我也想知道我是否可以通过使用 API 来实现这个所以我可以动态地告诉哪个我想从原始 bean 中获取的字段
我不熟悉推土机,但字段 1 是位图。 getField(1)
returns null
.
我终于找到了正确的映射,利用 dozer 必须直接访问内部对象的能力 (http://dozer.sourceforge.net/documentation/custommethods.html)。
<mapping>
<class-a is-accessible="true">com.solab.iso8583.IsoMessage</class-a>
<class-b>j8583.example.TransactionInstance</class-b>
<field>
<a>fields[3]</a>
<b set-method="addParameter" map-set-method="addParameter" key="field3">parameters
</b>
</field>
</mapping>
我有一个 IsoMessage 对象 (https://github.com/chochos/j8583/blob/master/src/main/java/com/solab/iso8583/IsoMessage.java),它有一个我只能通过 getField(int) 方法访问的内部数组。
public class IsoMessage {
@SuppressWarnings("rawtypes")
private IsoValue[] fields = new IsoValue[129];
.........
.........
.........
/** Returns the IsoValue for the specified field. First real field is 2. */
@SuppressWarnings("unchecked")
public <T> IsoValue<T> getField(int field) {
return fields[field];
}
我需要通过调用 getField(param Number) 读取存储在字段数组中的所有属性,并将它们移动到具有 Map 的新对象,并希望使用 dozer 来实现此目的。
我需要翻译的对象:
public class TransactionInstance implements Serializable {
private static final long serialVersionUID = 3429335891821913088L;
private String transactionName;
private Map<String, String> parameters;
我正在试验这种推土机配置,希望从我的 isoMessage 对象中获取字段 1
<mapping map-id="a">
<class-a>com.solab.iso8583.IsoMessage</class-a>
<class-b>j8583.example.TransactionInstance</class-b>
<field>
<a get-method="getField" key="1">field</a>
<b map-set-method="put">parameters</b>
</field>
</mapping>
但我一直坚持从原始对象中获取值,但出现此异常:
Exception in thread "main" org.dozer.MappingException: No read or write method found for field (field) in class (class com.solab.iso8583.IsoMessage)
at org.dozer.propertydescriptor.GetterSetterPropertyDescriptor.determinePropertyType(GetterSetterPropertyDescriptor.java:319)
at org.dozer.propertydescriptor.GetterSetterPropertyDescriptor.getPropertyType(GetterSetterPropertyDescriptor.java:76)
at org.dozer.fieldmap.MapFieldMap.determineActualPropertyType(MapFieldMap.java:170)
at org.dozer.fieldmap.MapFieldMap.getSrcFieldValue(MapFieldMap.java:95)
我正在检查这个 post https://github.com/DozerMapper/dozer/issues/111 and How to pass `this` to Dozer field mapping? 总线仍然卡在同一个地方,我也想知道我是否可以通过使用 API 来实现这个所以我可以动态地告诉哪个我想从原始 bean 中获取的字段
我不熟悉推土机,但字段 1 是位图。 getField(1)
returns null
.
我终于找到了正确的映射,利用 dozer 必须直接访问内部对象的能力 (http://dozer.sourceforge.net/documentation/custommethods.html)。
<mapping>
<class-a is-accessible="true">com.solab.iso8583.IsoMessage</class-a>
<class-b>j8583.example.TransactionInstance</class-b>
<field>
<a>fields[3]</a>
<b set-method="addParameter" map-set-method="addParameter" key="field3">parameters
</b>
</field>
</mapping>