Dozer для сопоставления строки с байтовым массивом - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь решить простое преобразование между исходным классом ниже

package com.my.package;

public class Source
{
   private String member;

   public String getMember()
   {
       return member;
   }

   public void setMember(String member)
   {
       this.member = member;
   }

}

в целевой класс, как описано ниже:

package com.my.package;

public class Destination
{
   private byte[] member;

   public byte[] getMember()
   {
       return member;
   }

   public void setMember(byte[] member)
   {
       this.member = member;
   }

}

Для этого я сначала попытался запустить dozer mapper с помощьюниже config

  <mapping map-id="test">
        <class-a>com.my.package.Source
        </class-a>
        <class-b>com.my.package.Destination
        </class-b>
        <field>
            <a>member</a>
            <b>member</b>
        </field>
    </mapping>

И столкнулся с этим исключением:

Exception in thread "main" org.dozer.MappingException: Illegal object type for the method 'setMember'. 
 Expected types: 
[B
 Actual types: 
java.lang.String

Что выглядело справедливо, после еще нескольких поисков я наткнулся на следующий config:

<mapping map-id="test">
        <class-a>com.my.package.Source
        </class-a>
        <class-b>com.my.package.Destination
        </class-b>
        <field>
            <a>member</a>
            <b set-method="setMemberFromString(java.lang.String)">member</b>
        </field>
    </mapping>

Ипредставил этот новый сеттер в классе Destination, что-то вроде:

public void setMemberFromString(String str) {
   this.member = str.getBytes(Charset.forName("UTF-8"));
}

Удивительно, но даже это не работает и дает то же исключение.Есть идеи, что мне не хватает?

...