Menu

Dozer issue while convert Object to Integer[]

Help
2010-09-28
2013-05-02
  • Abhishek Ransingh

    Hi Matt,
      In my case how can I covert from object to array? That is:
       my destination field is Array and my source is an object. how to do that conversion using Dozer?

    <mapping>
    <class-a>domain.report.ReportOptions</class-a>
    <class-b>dto.report.ReportOptions</class-b>
                         <field>
                             …..
                         </field>
          </mapping>

    My classes: domain.report.ReportOptions

    @XmlRootElement
    public class ReportOptions implements Serializable {

    private Integer            groupIds;

    private Integer            userIds;

    // Respective Setter Getters

    **************************************************************************************
    dto.report.ReportOptions class:

    @XmlRootElement(name = "reportOptions")
    public class ReportOptions {

    private GroupIdList              groupIds;

    private UserIdList               userIds;

    //Setters Getters for those fields

    *******************************************************************

    GroupIdList class:

    @XmlRootElement(name = "groupIdList")
    public class GroupIdList {

        private Set<GroupIdentifier> groupIds = new HashSet<GroupIdentifier>();

        /**
         * Add a group id
         *
         * @param groupId
         *            Group id to add
         */
        public void addGroup(GroupIdentifier groupId)
        {
            groupIds.add(groupId);
        }

        public Set<GroupIdentifier> getGroupIds()
        {
            return groupIds;
        }

        public void setGroupIds(Set<GroupIdentifier> groupIds)
        {
            this.groupIds = groupIds;
        }

    ************************************************************************
    GroupIdentifier class:

    public class GroupIdentifier extends ABC {

        public GroupIdentifier(String… components)
        {
            super(shiftPrefix("xyz", components));
        }

    }

    ********************************************************************
    ABC class:

    public abstract class ABC implements Serializable {

    private final String originalIdentifier;

    // some other stuffs
    // And no setter getter for this originalIdentifier.

    So, how to use dozer in this case to convert from dto.report.ReportOptions to domain.report.ReportOptions?
    Can you please help me out? I've tried a lot of ways. But after conversion, those two fields are coming null if I use type="One-way" or else the error is like :

    MapId: null
      Type: null
      Source parent class: dto.report.ReportOptions
      Source field name: groupIds.groupIds
      Source field type: class java.util.HashSet
      Source field value:
      Dest parent class: domain.report.ReportOptions
      Dest field name: groupIds
      Dest field type: [Ljava.lang.Integer;
    java.lang.IllegalArgumentException: array element type mismatch
    at java.lang.reflect.Array.set(Native Method)
    at org.dozer.util.CollectionUtils.convertListToArray(CollectionUtils.java:98)
    at org.dozer.MappingProcessor.mapListToArray(MappingProcessor.java:637)
    at org.dozer.MappingProcessor.mapSetToArray(MappingProcessor.java:785)
    at org.dozer.MappingProcessor.mapCollection(MappingProcessor.java:499)
    at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:394)
    at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:303)
    at org.dozer.MappingProcessor.mapField(MappingProcessor.java:249)
    at org.dozer.MappingProcessor.map(MappingProcessor.java:218)
    at org.dozer.MappingProcessor.map(MappingProcessor.java:163)
    at org.dozer.MappingProcessor.map(MappingProcessor.java:119)
    at org.dozer.MappingProcessor.map(MappingProcessor.java:114)
    at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:92)

    My xml class goes here:
    <?xml version="1.0" encoding="UTF-8"?>
    <mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net
              http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <mappings>
    <mapping>
    <class-a>domain.report.ReportOptions</class-a>
    <class-b>dto.report.ReportOptions</class-b>

    <field>
    <a>groupIds</a>
    <b>groupIds.groupIds</b>
    </field>
            </mapping>
    </mappings>

     
  • Abhishek Ransingh

    Can any body help me regarding this??

     

Log in to post a comment.