Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带贴图和自定义转换器的推土机贴图不起作用_Java_Dozer - Fatal编程技术网

Java 带贴图和自定义转换器的推土机贴图不起作用

Java 带贴图和自定义转换器的推土机贴图不起作用,java,dozer,Java,Dozer,我想用dozer将一个具有键值对列表的类映射到一个hashmap 键值对 这是包含键值对的类 public class TExtensions { private List<SExtension> item; // Getter, Setter public class SExtension { private String field; private String value; // Getter, Setter B类 我的转换器 公共

我想用dozer将一个具有键值对列表的类映射到一个hashmap

键值对 这是包含键值对的类

public class TExtensions {
    private List<SExtension> item;
    // Getter, Setter

public class SExtension {
    private String field;
    private String value;
    // Getter, Setter
B类 我的转换器
公共类扩展转换器扩展DozerConverter
{
公共扩展转换器(){
super(Map.class、TExtensions.class);
}
@凌驾
公共文本信息转换到(地图来源、文本信息目的地){
if(source!=null&&!source.isEmpty()){
destination=新的TExtensions();
六向拉伸;
for(对象键:source.keySet()){
扩展=新的六分之一张力();
extension.setField(key.toString());
extension.setValue(source.get(key.toString());
destination.getItem().add(扩展名);
}
}否则{
目的地=空;
}
返回目的地;
}
@凌驾
公共地图转换源(文本源、地图目的地){
如果(源!=null){
destination=newhashmap();
for(SExtension扩展名:source.getItem()){
destination.put(extension.getField(),extension.getValue());
}
}否则{
目的地=空;
}
返回目的地;
}
}
当我通过配置进行映射时,它工作得很好,但我不能使用该功能,因为类并不总是类路径的一部分,因为它们是可选模块的一部分。因此,我必须将映射放在其他地方,并将其放入映射文件中,但这不起作用

配置 那管用,但我不能用

<configuration>
    <custom-converters>
        <converter type="ExtensionConverter">
            <class-a>java.util.Map</class-a>
            <class-b>TExtensions</class-b>
        </converter>
    </custom-converters>
</configuration>

java.util.Map
纺织
映射文件 这不起作用,但似乎是唯一的选择

<mapping>
    <class-a>FooModel</class-a>
    <class-b>FooWs</class-b>
    <field custom-converter="ExtensionConverter">
        <a>extensions</a>
        <b>extensions</b>
    </field>
</mapping>

食品模型
福斯
扩展
扩展
当我使用映射文件(而不是配置)进行映射时,它会从映射映射到文本,但不会从另一个方向映射。调试转换器时,源对象和目标对象都为null

我已经用推土机5.5.1和推土机5.4.0对此进行了测试

现在我可以想出两个解决我问题的办法

  • 无论转换器是否在类路径中,都为这两种类型加载自定义转换器
  • 修复映射文件的问题
  • 我更喜欢第一个解决方案,因为它看起来更干净,而且我不必复制映射文件

    你有什么想法吗

    public class ExtensionConverter extends DozerConverter<Map, TExtensions>    
    {
    
    public ExtensionConverter() {
        super(Map.class, TExtensions.class);
    }
    
    @Override
    public TExtensions convertTo(Map source, TExtensions destination) {
        if (source != null && !source.isEmpty()){
            destination = new TExtensions();
            SExtension extension;
            for (Object key : source.keySet()){
                extension = new SExtension();
                extension.setField(key.toString());
                extension.setValue(source.get(key).toString());
                destination.getItem().add(extension);
            }
        } else{
            destination = null;
        }
        return destination;
    }
    
    @Override
    public Map convertFrom(TExtensions source, Map destination) {
        if (source != null){
            destination = new HashMap<String, String>();
            for (SExtension extension : source.getItem()){
                destination.put(extension.getField(), extension.getValue());
            }
        } else{
            destination = null;
        }
        return destination;
    }
    }
    
    <configuration>
        <custom-converters>
            <converter type="ExtensionConverter">
                <class-a>java.util.Map</class-a>
                <class-b>TExtensions</class-b>
            </converter>
        </custom-converters>
    </configuration>
    
    <mapping>
        <class-a>FooModel</class-a>
        <class-b>FooWs</class-b>
        <field custom-converter="ExtensionConverter">
            <a>extensions</a>
            <b>extensions</b>
        </field>
    </mapping>