This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new d35a268  [OPENMEETINGS-2177] import tests seems to pass
d35a268 is described below

commit d35a2680c744b5e46d3217f6fbb3b34ab13ba6d1
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Thu Mar 5 16:55:08 2020 +0700

    [OPENMEETINGS-2177] import tests seems to pass
---
 .../org/apache/openmeetings/db/bind/Constants.java | 12 +++
 .../openmeetings/db/bind/adapter/FileAdapter.java  | 23 +++---
 .../db/bind/adapter/PollTypeAdapter.java           | 21 +++--
 .../openmeetings/db/dao/file/BaseFileItemDao.java  | 36 ++++++++-
 .../openmeetings/db/dao/file/FileItemDao.java      |  2 +-
 .../openmeetings/db/dao/record/RecordingDao.java   |  6 +-
 .../openmeetings/db/entity/file/FileItem.java      | 20 +++--
 .../openmeetings/db/entity/record/Recording.java   |  9 ++-
 .../openmeetings/db/entity/room/RoomFile.java      | 25 ++++--
 .../openmeetings/db/entity/room/RoomPoll.java      | 52 ++++++++----
 .../db/entity/room/RoomPollAnswer.java             | 38 ++++++---
 .../db/entity/user/PrivateMessage.java             | 57 +++++++++----
 .../db/entity/user/PrivateMessageFolder.java       | 30 +++++--
 .../apache/openmeetings/db/entity/user/User.java   |  2 +-
 .../openmeetings/db/entity/user/UserContact.java   | 76 +++++++++++-------
 .../apache/openmeetings/backup/BackupImport.java   | 93 +++++++++-------------
 .../web/room/poll/CreatePollDialog.java            |  2 +-
 .../web/room/poll/PollResultsDialog.java           |  9 ++-
 .../openmeetings/web/room/poll/VoteDialog.java     |  2 +-
 .../org/apache/openmeetings/backup/TestImport.java | 11 +++
 .../openmeetings/backup/calendar/appointements.xml |  1 -
 .../openmeetings/backup/file/flvRecordings.xml     | 16 ++--
 .../backup/msg/privateMessageFolder.xml            | 34 ++++++++
 .../openmeetings/backup/user/userContacts.xml      | 64 +++++++++++++++
 pom.xml                                            |  8 +-
 25 files changed, 464 insertions(+), 185 deletions(-)

diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/Constants.java 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/Constants.java
index 3639fe6..d2594ac 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/Constants.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/Constants.java
@@ -45,4 +45,16 @@ public class Constants {
        public static final String MMEMBER_NODE = "meetingmember";
        public static final String RECORDING_LIST_NODE = "flvrecordings";
        public static final String RECORDING_NODE = "flvrecording";
+       public static final String MSG_FOLDER_LIST_NODE = 
"privatemessagefolders";
+       public static final String MSG_FOLDER_NODE = "privatemessagefolder";
+       public static final String CONTACT_LIST_NODE = "usercontacts";
+       public static final String CONTACT_NODE = "usercontact";
+       public static final String MSG_LIST_NODE = "privatemessages";
+       public static final String MSG_NODE = "privatemessage";
+       public static final String FILE_LIST_NODE = "fileExplorerItems";
+       public static final String FILE_NODE = "fileExplorerItem";
+       public static final String POLL_LIST_NODE = "roompolls";
+       public static final String POLL_NODE = "roompoll";
+       public static final String ROOM_FILE_LIST_NODE = "RoomFiles";
+       public static final String ROOM_FILE_NODE = "RoomFile";
 }
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/FileAdapter.java
similarity index 62%
rename from 
openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
rename to 
openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/FileAdapter.java
index 640f4d6..c4c39e7 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/IntegerTransform.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/FileAdapter.java
@@ -16,20 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.backup;
+package org.apache.openmeetings.db.bind.adapter;
 
-import static org.apache.commons.lang3.math.NumberUtils.toInt;
+import java.util.Map;
 
-import org.simpleframework.xml.transform.Transform;
+import org.apache.openmeetings.db.dao.file.BaseFileItemDao;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
 
-public class IntegerTransform implements Transform<Integer> {
-       @Override
-       public Integer read(String value) throws Exception {
-               return toInt(value, 0);
+public class FileAdapter extends EntityAdapter<BaseFileItem> {
+       public FileAdapter() {
+               super();
+       }
+
+       public FileAdapter(BaseFileItemDao dao, Map<Long, Long> idMap) {
+               super(dao, idMap);
        }
 
        @Override
-       public String write(Integer value) throws Exception {
-               return String.valueOf(value);
+       protected BaseFileItem newEntity() {
+               return new FileItem();
        }
 }
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/PollTypeAdapter.java
similarity index 56%
rename from 
openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
rename to 
openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/PollTypeAdapter.java
index ed3c62b..bb15c13 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/LongTransform.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/bind/adapter/PollTypeAdapter.java
@@ -16,20 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.openmeetings.backup;
+package org.apache.openmeetings.db.bind.adapter;
 
-import static org.apache.commons.lang3.math.NumberUtils.toLong;
+import static org.apache.commons.lang3.math.NumberUtils.toInt;
+import static org.apache.openmeetings.db.bind.adapter.CDATAAdapter.CDATA_BEGIN;
+import static org.apache.openmeetings.db.bind.adapter.CDATAAdapter.CDATA_END;
 
-import org.simpleframework.xml.transform.Transform;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+
+public class PollTypeAdapter extends XmlAdapter<String, RoomPoll.Type> {
 
-public class LongTransform implements Transform<Long> {
        @Override
-       public Long read(String value) throws Exception {
-               return toLong(value);
+       public String marshal(RoomPoll.Type v) throws Exception {
+               return CDATA_BEGIN + v.getId() + CDATA_END;
        }
 
        @Override
-       public String write(Long value) throws Exception {
-               return String.valueOf(value);
+       public RoomPoll.Type unmarshal(String v) throws Exception {
+               return RoomPoll.Type.get(toInt(v));
        }
 }
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
index f2992fe..82e9267 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/BaseFileItemDao.java
@@ -18,12 +18,15 @@
  */
 package org.apache.openmeetings.db.dao.file;
 
+import static org.apache.openmeetings.db.util.DaoHelper.UNSUPPORTED;
+
 import java.util.Date;
 import java.util.List;
 
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 
+import org.apache.openmeetings.db.dao.IDataProviderDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -40,7 +43,7 @@ import 
org.springframework.transaction.annotation.Transactional;
 
 @Repository
 @Transactional
-public class BaseFileItemDao {
+public class BaseFileItemDao implements IDataProviderDao<BaseFileItem> {
        private static final Logger log = 
LoggerFactory.getLogger(BaseFileItemDao.class);
        @PersistenceContext
        protected EntityManager em;
@@ -58,6 +61,7 @@ public class BaseFileItemDao {
                return list.size() == 1 ? list.get(0) : null;
        }
 
+       @Override
        public BaseFileItem get(Long id) {
                if (id == null || id.longValue() <= 0) {
                        return null;
@@ -122,4 +126,34 @@ public class BaseFileItemDao {
                }
                return f;
        }
+
+       @Override
+       public List<BaseFileItem> get(long start, long count) {
+               throw UNSUPPORTED;
+       }
+
+       @Override
+       public List<BaseFileItem> get(String search, long start, long count, 
String order) {
+               throw UNSUPPORTED;
+       }
+
+       @Override
+       public long count() {
+               throw UNSUPPORTED;
+       }
+
+       @Override
+       public long count(String search) {
+               throw UNSUPPORTED;
+       }
+
+       @Override
+       public BaseFileItem update(BaseFileItem entity, Long userId) {
+               throw UNSUPPORTED;
+       }
+
+       @Override
+       public void delete(BaseFileItem entity, Long userId) {
+               throw UNSUPPORTED;
+       }
 }
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
index 7c80bff..afe0999 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/file/FileItemDao.java
@@ -178,7 +178,7 @@ public class FileItemDao extends BaseFileItemDao {
        public FileItem move(long id, long parentId, long ownerId, long roomId) 
{
                log.debug(".move() started");
 
-               FileItem f = get(id);
+               FileItem f = get(Long.valueOf(id));
                if (f == null) {
                        return null;
                }
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
index 9c77f3a..09c953e 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/record/RecordingDao.java
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.db.dao.record;
 
+import static org.apache.openmeetings.db.dao.user.UserDao.FETCH_GROUP_BACKUP;
+import static org.apache.openmeetings.db.util.DaoHelper.fillLazy;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG;
 
@@ -74,7 +76,9 @@ public class RecordingDao extends BaseFileItemDao {
        }
 
        public List<Recording> get() {
-               return em.createNamedQuery("getRecordingsAll", 
Recording.class).getResultList();
+               return fillLazy(em
+                               , oem -> 
oem.createNamedQuery("getRecordingsAll", Recording.class)
+                               , FETCH_GROUP_BACKUP);
        }
 
        public List<Recording> getByExternalType(String externalType) {
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
index 77e44e7..50b1125 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/file/FileItem.java
@@ -18,12 +18,17 @@
  */
 package org.apache.openmeetings.db.entity.file;
 
+import static org.apache.openmeetings.db.bind.Constants.FILE_NODE;
+
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.NamedQuery;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
+import org.apache.openmeetings.db.bind.adapter.CDATAAdapter;
+import org.apache.openmeetings.db.bind.adapter.LongAdapter;
 
 @Entity
 @NamedQuery(name = "getAllFiles", query = "SELECT f FROM FileItem f ORDER BY 
f.id")
@@ -43,25 +48,28 @@ import org.simpleframework.xml.Root;
 @NamedQuery(name = "getFileFilteredByGroup", query = "SELECT f FROM FileItem f 
WHERE f.deleted = false AND f.ownerId IS NULL "
                + "AND f.groupId = :groupId AND f.parentId IS NULL AND f.type 
IN :filter "
                + "ORDER BY f.type ASC, f.name")
-@Root
+@XmlRootElement(name = FILE_NODE)
 public class FileItem extends BaseFileItem {
        private static final long serialVersionUID = 1L;
 
        @Column(name = "filesize")
-       @Element(data = true, required = false)
+       @XmlElement(name = "size", required = false)
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long size;
 
        @Column(name = "external_id")
+       @XmlElement(name = "externalId", required = false)
+       @XmlJavaTypeAdapter(CDATAAdapter.class)
        private String externalId;
 
        @Override
-       @Element(data = true, name = "fileExplorerItemId")
        public Long getId() {
                return super.getId();
        }
 
        @Override
-       @Element(data = true, name = "fileExplorerItemId")
+       @XmlElement(name = "fileExplorerItemId")
+       @XmlJavaTypeAdapter(LongAdapter.class)
        public void setId(Long id) {
                super.setId(id);
        }
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
index 913bb37..3e56a15 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/record/Recording.java
@@ -19,6 +19,7 @@
 package org.apache.openmeetings.db.entity.record;
 
 import static org.apache.openmeetings.db.bind.Constants.RECORDING_NODE;
+import static org.apache.openmeetings.db.dao.user.UserDao.FETCH_GROUP_BACKUP;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
 import static org.apache.openmeetings.util.OmFileHelper.RECORDING_FILE_NAME;
 
@@ -40,6 +41,9 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
+import org.apache.openjpa.persistence.FetchAttribute;
+import org.apache.openjpa.persistence.FetchGroup;
+import org.apache.openjpa.persistence.FetchGroups;
 import org.apache.openmeetings.db.bind.adapter.BooleanAdapter;
 import org.apache.openmeetings.db.bind.adapter.CDATAAdapter;
 import org.apache.openmeetings.db.bind.adapter.DateAdapter;
@@ -63,6 +67,9 @@ import org.apache.openmeetings.db.entity.file.BaseFileItem;
  *
  */
 @Entity
+@FetchGroups({
+       @FetchGroup(name = FETCH_GROUP_BACKUP, attributes = { 
@FetchAttribute(name = "chunks") })
+})
 @NamedQuery(name = "getRecordingsByExternalUser", query = "SELECT r FROM 
Recording r "
                + "WHERE r.insertedBy = (SELECT gu.user.id FROM GroupUser gu 
WHERE "
                + "gu.group.deleted = false AND gu.group.external = true AND 
gu.group.name = :externalType "
@@ -78,7 +85,7 @@ import org.apache.openmeetings.db.entity.file.BaseFileItem;
                + "AND (r.parentId IS NULL OR r.parentId = 0) "
                + "ORDER BY r.type ASC, r.inserted")
 @NamedQuery(name = "resetRecordingProcessingStatus", query = "UPDATE Recording 
r SET r.status = :error WHERE r.status IN (:recording, :converting)")
-@NamedQuery(name = "getRecordingsAll", query = "SELECT r FROM Recording r LEFT 
JOIN FETCH r.chunks ORDER BY r.id")
+@NamedQuery(name = "getRecordingsAll", query = "SELECT r FROM Recording r 
ORDER BY r.id")
 @NamedQuery(name = "getRecordingsByRoom", query = "SELECT r FROM Recording r 
WHERE r.deleted = false AND r.roomId = :roomId "
                + "ORDER BY r.type ASC, r.inserted")
 @NamedQuery(name = "getRecordingsByParent", query = "SELECT r FROM Recording r 
WHERE r.deleted = false AND r.parentId = :parentId "
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
index db6dc10..a9e4d71 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomFile.java
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.db.entity.room;
 
+import static org.apache.openmeetings.db.bind.Constants.ROOM_FILE_NODE;
+
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
@@ -27,38 +29,49 @@ import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.bind.adapter.FileAdapter;
+import org.apache.openmeetings.db.bind.adapter.LongAdapter;
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
 import org.apache.openmeetings.db.entity.file.BaseFileItem;
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
 
 @Entity
 @Table(name = "room_file")
-@Root(name = "RoomFile")
+@XmlRootElement(name = ROOM_FILE_NODE)
+@XmlAccessorType(XmlAccessType.FIELD)
 public class RoomFile implements IDataProviderEntity {
        private static final long serialVersionUID = 1L;
 
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
-       @Element(data = true, required = true)
+       @XmlElement(name = "id")
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long id;
 
        @Column(name = "room_id")
-       @Element(data = true, required = true)
+       @XmlElement(name = "roomId")
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long roomId;
 
        @ManyToOne(fetch = FetchType.EAGER, optional = false)
        @JoinColumn(name = "file_id", insertable = true, updatable = true, 
nullable = false)
        @ForeignKey(enabled = true)
-       @Element(data = true, required = true)
+       @XmlElement(name = "file")
+       @XmlJavaTypeAdapter(FileAdapter.class)
        private BaseFileItem file;
 
        /*
         * Index of whiteboard for this file, zero based
         */
        @Column(name = "wb_idx", nullable = false)
+       @XmlElement(name = "wbIdx", required = false)
+       @XmlJavaTypeAdapter(value = LongAdapter.class, type = long.class)
        private long wbIdx = 0;
 
        public RoomFile() {
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
index 900dae3..faeadfc 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.db.entity.room;
 
+import static org.apache.openmeetings.db.bind.Constants.POLL_NODE;
+
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
@@ -36,14 +38,24 @@ import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlElementWrapper;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.bind.adapter.BooleanAdapter;
+import org.apache.openmeetings.db.bind.adapter.CDATAAdapter;
+import org.apache.openmeetings.db.bind.adapter.DateAdapter;
+import org.apache.openmeetings.db.bind.adapter.PollTypeAdapter;
+import org.apache.openmeetings.db.bind.adapter.RoomAdapter;
+import org.apache.openmeetings.db.bind.adapter.UserAdapter;
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
 import org.apache.openmeetings.db.entity.user.User;
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.ElementList;
-import org.simpleframework.xml.Root;
 
 @Entity
 @NamedQuery(name = "closePoll", query = "UPDATE RoomPoll rp SET rp.archived = 
:archived "
@@ -58,7 +70,8 @@ import org.simpleframework.xml.Root;
 @NamedQuery(name = "hasPoll", query = "SELECT COUNT(rp) FROM RoomPoll rp "
                + "WHERE rp.room.id = :roomId AND rp.archived = :archived")
 @Table(name = "room_poll")
-@Root(name = "roompoll")
+@XmlRootElement(name = POLL_NODE)
+@XmlAccessorType(XmlAccessType.FIELD)
 public class RoomPoll implements IDataProviderEntity {
        private static final long serialVersionUID = 1L;
        public static final int YES_NO_TYPE_ID = 1;
@@ -66,8 +79,8 @@ public class RoomPoll implements IDataProviderEntity {
 
        @XmlType(namespace="org.apache.openmeetings.room.poll.type")
        public enum Type {
-               yesNo(YES_NO_TYPE_ID)
-               , numeric(NUMERIC_TYPE_ID);
+               YES_NO(YES_NO_TYPE_ID)
+               , NUMERIC(NUMERIC_TYPE_ID);
                private int id;
 
                Type(int id) {
@@ -87,51 +100,60 @@ public class RoomPoll implements IDataProviderEntity {
                }
 
                public static Type get(int type) {
-                       return type == NUMERIC_TYPE_ID ? Type.numeric : 
Type.yesNo;
+                       return type == NUMERIC_TYPE_ID ? Type.NUMERIC : 
Type.YES_NO;
                }
        }
 
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
+       @XmlTransient
        private Long id;
 
        @Column(name = "name")
-       @Element(name = "pollname", data = true, required = false)
+       @XmlElement(name = "pollname", required = false)
+       @XmlJavaTypeAdapter(CDATAAdapter.class)
        private String name;
 
        @Column(name = "question")
-       @Element(name = "pollquestion", data = true, required = false)
+       @XmlElement(name = "pollquestion", required = false)
+       @XmlJavaTypeAdapter(CDATAAdapter.class)
        private String question;
 
        @Column(name = "created")
-       @Element(data = true, required = false)
+       @XmlElement(name = "created", required = false)
+       @XmlJavaTypeAdapter(DateAdapter.class)
        private Date created;
 
        @Column(name = "archived", nullable = false)
-       @Element(data = true, required = false)
+       @XmlElement(name = "archived", required = false)
+       @XmlJavaTypeAdapter(value = BooleanAdapter.class, type = boolean.class)
        private boolean archived;
 
        @Column(name = "type")
-       @Element(name = "polltypeid", data = true, required = false)
        @Enumerated(EnumType.STRING)
+       @XmlElement(name = "polltypeid", required = false)
+       @XmlJavaTypeAdapter(PollTypeAdapter.class)
        private Type type;
 
        @OneToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "user_id")
        @ForeignKey(enabled = true)
-       @Element(name = "createdbyuserid", data = true, required = false)
+       @XmlElement(name = "createdbyuserid", required = false)
+       @XmlJavaTypeAdapter(UserAdapter.class)
        private User creator;
 
        @OneToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "room_id")
        @ForeignKey(enabled = true)
-       @Element(name = "roomid", data = true, required = false)
+       @XmlElement(name = "roomid", required = false)
+       @XmlJavaTypeAdapter(RoomAdapter.class)
        private Room room;
 
        @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
        @JoinColumn(name = "poll_id")
-       @ElementList(name = "roompollanswers", required = false)
+       @XmlElementWrapper(name = "roompollanswers", required = false)
+       @XmlElement(name = "roompollanswer", required = false)
        private List<RoomPollAnswer> answers;
 
        /**
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPollAnswer.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPollAnswer.java
index acfc93c..43e6bac 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPollAnswer.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/RoomPollAnswer.java
@@ -18,11 +18,7 @@
  */
 package org.apache.openmeetings.db.entity.room;
 
-import org.apache.openjpa.persistence.jdbc.ForeignKey;
-import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.apache.openmeetings.db.entity.user.User;
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
+import java.util.Date;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -34,41 +30,61 @@ import javax.persistence.JoinColumn;
 import javax.persistence.NamedQuery;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
-import java.util.Date;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.bind.adapter.BooleanAdapter;
+import org.apache.openmeetings.db.bind.adapter.DateAdapter;
+import org.apache.openmeetings.db.bind.adapter.IntAdapter;
+import org.apache.openmeetings.db.bind.adapter.UserAdapter;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.user.User;
 
 @Entity
 @NamedQuery(name = "notVoted", query = "SELECT rpa FROM RoomPollAnswer rpa 
WHERE rpa.roomPoll.room.id = :roomId "
                + "AND rpa.votedUser.id = :userId AND rpa.roomPoll.archived = 
false")
 @Table(name = "room_poll_answer")
-@Root(name="roompollanswer")
+@XmlRootElement(name = "roompollanswer")
+@XmlAccessorType(XmlAccessType.FIELD)
 public class RoomPollAnswer implements IDataProviderEntity {
        private static final long serialVersionUID = 1L;
 
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
+       @XmlTransient
        private Long id;
 
        @OneToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "user_id")
        @ForeignKey(enabled = true)
-       @Element(name="voteduserid", data=false, required=false)
+       @XmlElement(name = "voteduserid", required = false)
+       @XmlJavaTypeAdapter(UserAdapter.class)
        private User votedUser;
 
        @Column(name = "answer")
-       @Element(data=false, required=false)
+       @XmlElement(name = "answer", required = false)
+       @XmlJavaTypeAdapter(BooleanAdapter.class)
        private Boolean answer;
 
        @Column(name = "pointList")
-       @Element(name="pointlist", data=false, required=false)
+       @XmlElement(name = "pointlist", required = false)
+       @XmlJavaTypeAdapter(IntAdapter.class)
        private Integer pointList;
 
        @Column(name = "voteDate")
-       @Element(name="votedate", data=false)
+       @XmlElement(name = "votedate", required = false)
+       @XmlJavaTypeAdapter(DateAdapter.class)
        private Date voteDate;
 
        @OneToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "poll_id")
+       @XmlTransient
        private RoomPoll roomPoll;
 
        @Override
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
index 3655e18..8d4505f 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.db.entity.user;
 
+import static org.apache.openmeetings.db.bind.Constants.MSG_NODE;
+
 import java.util.Date;
 
 import javax.persistence.CascadeType;
@@ -32,12 +34,21 @@ import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.bind.adapter.BooleanAdapter;
+import org.apache.openmeetings.db.bind.adapter.CDATAAdapter;
+import org.apache.openmeetings.db.bind.adapter.DateAdapter;
+import org.apache.openmeetings.db.bind.adapter.LongAdapter;
+import org.apache.openmeetings.db.bind.adapter.RoomAdapter;
+import org.apache.openmeetings.db.bind.adapter.UserAdapter;
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
 import org.apache.openmeetings.db.entity.room.Room;
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
 
 @Entity
 @NamedQuery(name = "getPrivateMessages", query = "SELECT c FROM PrivateMessage 
c ORDER BY c.id")
@@ -47,7 +58,8 @@ import org.simpleframework.xml.Root;
 @NamedQuery(name = "deletePrivateMessages", query = "DELETE FROM 
PrivateMessage c WHERE c.id IN (:ids) ")
 @NamedQuery(name = "getPrivateMessagesByRoom", query = "SELECT c FROM 
PrivateMessage c WHERE c.room.id = :roomId ")
 @Table(name = "private_message")
-@Root(name = "privatemessage")
+@XmlRootElement(name = MSG_NODE)
+@XmlAccessorType(XmlAccessType.FIELD)
 public class PrivateMessage implements IDataProviderEntity {
        private static final long serialVersionUID = 1L;
        public static final Long INBOX_FOLDER_ID = Long.valueOf(0);
@@ -57,64 +69,77 @@ public class PrivateMessage implements IDataProviderEntity {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
-       @Element(data = true, name = "privateMessageId")
+       @XmlElement(name = "privateMessageId")
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long id;
 
        @Column(name = "subject")
-       @Element(data = true, required = false)
+       @XmlElement(name = "subject", required = false)
+       @XmlJavaTypeAdapter(CDATAAdapter.class)
        private String subject;
 
        @Lob
        @Column(name = "message")
-       @Element(data = true, required = false)
+       @XmlElement(name = "message", required = false)
+       @XmlJavaTypeAdapter(CDATAAdapter.class)
        private String message;
 
        @Column(name = "inserted")
-       @Element(data = true)
+       @XmlElement(name = "inserted")
+       @XmlJavaTypeAdapter(DateAdapter.class)
        private Date inserted;
 
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "from_id")
        @ForeignKey(enabled = true)
-       @Element(data = true, required = false)
+       @XmlElement(name = "from", required = false)
+       @XmlJavaTypeAdapter(UserAdapter.class)
        private User from;
 
        @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
        @JoinColumn(name = "to_id")
        @ForeignKey(enabled = true)
-       @Element(data = true, required = false)
+       @XmlElement(name = "to", required = false)
+       @XmlJavaTypeAdapter(UserAdapter.class)
        private User to;
 
        @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
        @JoinColumn(name = "owner_id")
        @ForeignKey(enabled = true)
-       @Element(data = true, required = false)
+       @XmlElement(name = "owner", required = false)
+       @XmlJavaTypeAdapter(UserAdapter.class)
        private User owner;
 
        @Column(name = "booked_room", nullable = false)
-       @Element(data = true)
+       @XmlElement(name = "bookedRoom")
+       @XmlJavaTypeAdapter(value = BooleanAdapter.class, type = boolean.class)
        private boolean bookedRoom;
 
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "room_id")
        @ForeignKey(enabled = true)
-       @Element(data = true, required = false)
+       @XmlElement(name = "room", required = false)
+       @XmlJavaTypeAdapter(RoomAdapter.class)
        private Room room;
 
        @Column(name = "is_read", nullable = false)
-       @Element(data = true)
+       @XmlElement(name = "isRead")
+       @XmlJavaTypeAdapter(value = BooleanAdapter.class, type = boolean.class)
        private boolean isRead;
 
        @Column(name = "private_message_folder_id")
-       @Element(data = true, name = "privateMessageFolderId", required = false)
+       @XmlElement(name = "privateMessageFolderId", required = false)
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long folderId;
 
        @Column(name = "is_contact_request", nullable = false)
-       @Element(data = true)
+       @XmlElement(name = "isRead")
+       @XmlJavaTypeAdapter(value = BooleanAdapter.class, type = boolean.class)
        private boolean isContactRequest;
 
        @Column(name = "user_contact_id")
-       @Element(data = true, required = false)
+       @XmlElement(name = "userContactId", required = false)
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long userContactId;
 
        public PrivateMessage() {
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java
index f686e00..02fd7fa 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.db.entity.user;
 
+import static org.apache.openmeetings.db.bind.Constants.MSG_FOLDER_NODE;
+
 import java.util.Date;
 
 import javax.persistence.Column;
@@ -26,34 +28,48 @@ import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
-
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.openmeetings.db.bind.adapter.CDATAAdapter;
+import org.apache.openmeetings.db.bind.adapter.DateAdapter;
+import org.apache.openmeetings.db.bind.adapter.LongAdapter;
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
 
 @Entity
 @Table(name = "private_message_folder")
-@Root(name="privatemessagefolder")
+@XmlRootElement(name = MSG_FOLDER_NODE)
+@XmlAccessorType(XmlAccessType.FIELD)
 public class PrivateMessageFolder implements IDataProviderEntity {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
-       @Element(data = true, name = "privateMessageFolderId")
+       @XmlElement(name = "privateMessageFolderId")
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long id;
 
        @Column(name = "folder_name")
-       @Element(data = true)
+       @XmlElement(name = "folderName")
+       @XmlJavaTypeAdapter(CDATAAdapter.class)
        private String folderName;
 
        @Column(name = "user_id")
-       @Element(data = true)
+       @XmlElement(name = "userId")
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long userId;
 
        @Column(name = "inserted")
+       @XmlElement(name = "inserted")
+       @XmlJavaTypeAdapter(DateAdapter.class)
        private Date inserted;
 
        @Column(name = "updated")
+       @XmlTransient
        private Date updated;
 
        @Override
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
index 7ea3948..fe53bd5 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
@@ -235,7 +235,7 @@ public class User extends HistoricalEntity {
 
        @Basic(fetch = FetchType.LAZY)
        @Column(name = "password", length = 1024)
-       @LoadFetchGroup("backupexport")
+       @LoadFetchGroup(FETCH_GROUP_BACKUP)
        @XmlElement(name = "pass", required = false)
        @XmlJavaTypeAdapter(CDATAAdapter.class)
        private String password;
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/UserContact.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/UserContact.java
index d965594..bbf8b67 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/UserContact.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/UserContact.java
@@ -18,6 +18,8 @@
  */
 package org.apache.openmeetings.db.entity.user;
 
+import static org.apache.openmeetings.db.bind.Constants.CONTACT_NODE;
+
 import java.io.Serializable;
 import java.util.Date;
 
@@ -31,69 +33,79 @@ import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.openjpa.persistence.jdbc.ForeignKey;
-import org.simpleframework.xml.Element;
-import org.simpleframework.xml.Root;
+import org.apache.openmeetings.db.bind.adapter.BooleanAdapter;
+import org.apache.openmeetings.db.bind.adapter.LongAdapter;
+import org.apache.openmeetings.db.bind.adapter.UserAdapter;
 
 @Entity
 @NamedQuery(name = "deleteUserContact", query = "delete from UserContact u 
where u.id = :id")
 @NamedQuery(name = "deleteAllUserContacts", query = "delete from UserContact u 
where u.owner.id = :ownerId")
 @NamedQuery(name = "getContactByUserOwner", query = "SELECT c FROM UserContact 
c WHERE c.contact.id = :userId AND c.owner.id = :ownerId AND c.contact.deleted 
= false")
-@NamedQuery(name = "getContactsByUserAndStatus", query = "select c from 
UserContact c " +
-               "where c.owner.id = :ownerId " +
-               "AND c.pending = :pending " +
-               "AND c.contact.deleted = false")
-@NamedQuery(name = "getContactRequestsByUserAndStatus", query = "select c from 
UserContact c " +
-               "where c.contact.id = :userId " +
-               "AND c.pending = :pending " +
-               "AND c.contact.deleted = false")
-@NamedQuery(name = "getContactsByUser", query = "SELECT c FROM UserContact c " 
+
-               "WHERE c.contact.id = :userId " +
-               "AND c.contact.deleted = false ORDER BY c.pending DESC")
-@NamedQuery(name = "countContactsByUser", query = "select COUNT(c) from 
UserContact c " +
-               "where c.contact.id = :userId " +
-               "AND c.contact.deleted = false")
+@NamedQuery(name = "getContactsByUserAndStatus", query = "select c from 
UserContact c "
+               + "where c.owner.id = :ownerId AND c.pending = :pending AND 
c.contact.deleted = false")
+@NamedQuery(name = "getContactRequestsByUserAndStatus", query = "select c from 
UserContact c "
+               + "where c.contact.id = :userId AND c.pending = :pending AND 
c.contact.deleted = false")
+@NamedQuery(name = "getContactsByUser", query = "SELECT c FROM UserContact c "
+               + "WHERE c.contact.id = :userId AND c.contact.deleted = false 
ORDER BY c.pending DESC")
+@NamedQuery(name = "countContactsByUser", query = "select COUNT(c) from 
UserContact c "
+               + "where c.contact.id = :userId AND c.contact.deleted = false")
 @NamedQuery(name = "getUserContactsById", query = "SELECT c FROM UserContact c 
WHERE c.id = :id")
 @NamedQuery(name = "getUserContacts", query = "SELECT c FROM UserContact c 
ORDER BY c.id")
 @Table(name = "user_contact")
-@Root(name="usercontact")
+@XmlRootElement(name = CONTACT_NODE)
+@XmlAccessorType(XmlAccessType.FIELD)
 public class UserContact implements Serializable {
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
-       @Column(name="id")
-       @Element(data = true, name = "userContactId")
+       @Column(name = "id")
+       @XmlElement(name = "userContactId")
+       @XmlJavaTypeAdapter(LongAdapter.class)
        private Long id;
 
        @ManyToOne(fetch = FetchType.EAGER)
-       @JoinColumn(name="user_id")
-       @Element(data=true, required=false)
+       @JoinColumn(name = "user_id")
+       @XmlElement(name = "contact", required = false)
+       @XmlJavaTypeAdapter(UserAdapter.class)
        private User contact;
 
        @ManyToOne(fetch = FetchType.EAGER)
-       @JoinColumn(name="owner_id")
+       @JoinColumn(name = "owner_id")
        @ForeignKey(enabled = true)
-       @Element(data=true, required=false)
+       @XmlElement(name = "owner", required = false)
+       @XmlJavaTypeAdapter(UserAdapter.class)
        private User owner;
 
-       @Column(name="pending", nullable = false)
-       @Element(data=true)
+       @Column(name = "pending", nullable = false)
+       @XmlElement(name = "pending")
+       @XmlJavaTypeAdapter(value = BooleanAdapter.class, type = boolean.class)
        private boolean pending;
 
-       @Column(name="inserted")
+       @Column(name = "inserted")
+       @XmlTransient
        private Date inserted;
 
-       @Column(name="updated")
+       @Column(name = "updated")
+       @XmlTransient
        private Date updated;
 
-       @Column(name="share_calendar", nullable = false)
-       @Element(data=true, required=false)
+       @Column(name = "share_calendar", nullable = false)
+       @XmlElement(name = "pending", required = false)
+       @XmlJavaTypeAdapter(value = BooleanAdapter.class, type = boolean.class)
        private boolean shareCalendar;
 
        public Long getId() {
                return id;
        }
+
        public void setId(Long id) {
                this.id = id;
        }
@@ -101,6 +113,7 @@ public class UserContact implements Serializable {
        public User getContact() {
                return contact;
        }
+
        public void setContact(User contact) {
                this.contact = contact;
        }
@@ -108,6 +121,7 @@ public class UserContact implements Serializable {
        public User getOwner() {
                return owner;
        }
+
        public void setOwner(User owner) {
                this.owner = owner;
        }
@@ -115,6 +129,7 @@ public class UserContact implements Serializable {
        public boolean isPending() {
                return pending;
        }
+
        public void setPending(boolean pending) {
                this.pending = pending;
        }
@@ -122,6 +137,7 @@ public class UserContact implements Serializable {
        public Date getInserted() {
                return inserted;
        }
+
        public void setInserted(Date inserted) {
                this.inserted = inserted;
        }
@@ -129,6 +145,7 @@ public class UserContact implements Serializable {
        public Date getUpdated() {
                return updated;
        }
+
        public void setUpdated(Date updated) {
                this.updated = updated;
        }
@@ -136,6 +153,7 @@ public class UserContact implements Serializable {
        public boolean getShareCalendar() {
                return shareCalendar;
        }
+
        public void setShareCalendar(boolean shareCalendar) {
                this.shareCalendar = shareCalendar;
        }
diff --git 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
index 4595d7d..645a134 100644
--- 
a/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
+++ 
b/openmeetings-install/src/main/java/org/apache/openmeetings/backup/BackupImport.java
@@ -27,14 +27,26 @@ import static 
org.apache.openmeetings.db.bind.Constants.CFG_LIST_NODE;
 import static org.apache.openmeetings.db.bind.Constants.CFG_NODE;
 import static org.apache.openmeetings.db.bind.Constants.CHAT_LIST_NODE;
 import static org.apache.openmeetings.db.bind.Constants.CHAT_NODE;
+import static org.apache.openmeetings.db.bind.Constants.CONTACT_LIST_NODE;
+import static org.apache.openmeetings.db.bind.Constants.CONTACT_NODE;
+import static org.apache.openmeetings.db.bind.Constants.FILE_LIST_NODE;
+import static org.apache.openmeetings.db.bind.Constants.FILE_NODE;
 import static org.apache.openmeetings.db.bind.Constants.GROUP_LIST_NODE;
 import static org.apache.openmeetings.db.bind.Constants.GROUP_NODE;
 import static org.apache.openmeetings.db.bind.Constants.MMEMBER_LIST_NODE;
 import static org.apache.openmeetings.db.bind.Constants.MMEMBER_NODE;
+import static org.apache.openmeetings.db.bind.Constants.MSG_FOLDER_LIST_NODE;
+import static org.apache.openmeetings.db.bind.Constants.MSG_FOLDER_NODE;
+import static org.apache.openmeetings.db.bind.Constants.MSG_LIST_NODE;
+import static org.apache.openmeetings.db.bind.Constants.MSG_NODE;
 import static org.apache.openmeetings.db.bind.Constants.OAUTH_LIST_NODE;
 import static org.apache.openmeetings.db.bind.Constants.OAUTH_NODE;
+import static org.apache.openmeetings.db.bind.Constants.POLL_LIST_NODE;
+import static org.apache.openmeetings.db.bind.Constants.POLL_NODE;
 import static org.apache.openmeetings.db.bind.Constants.RECORDING_LIST_NODE;
 import static org.apache.openmeetings.db.bind.Constants.RECORDING_NODE;
+import static org.apache.openmeetings.db.bind.Constants.ROOM_FILE_LIST_NODE;
+import static org.apache.openmeetings.db.bind.Constants.ROOM_FILE_NODE;
 import static org.apache.openmeetings.db.bind.Constants.ROOM_GRP_LIST_NODE;
 import static org.apache.openmeetings.db.bind.Constants.ROOM_GRP_NODE;
 import static org.apache.openmeetings.db.bind.Constants.ROOM_LIST_NODE;
@@ -155,14 +167,10 @@ import javax.xml.transform.stream.StreamSource;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.text.WordUtils;
-import org.apache.openmeetings.backup.converter.BaseFileItemConverter;
-import org.apache.openmeetings.backup.converter.DateConverter;
-import org.apache.openmeetings.backup.converter.PollTypeConverter;
-import org.apache.openmeetings.backup.converter.RoomConverter;
-import org.apache.openmeetings.backup.converter.UserConverter;
 import org.apache.openmeetings.backup.converter.WbConverter;
 import org.apache.openmeetings.core.converter.DocumentConverter;
 import org.apache.openmeetings.db.bind.adapter.AppointmentAdapter;
+import org.apache.openmeetings.db.bind.adapter.FileAdapter;
 import org.apache.openmeetings.db.bind.adapter.GroupAdapter;
 import org.apache.openmeetings.db.bind.adapter.OmCalendarAdapter;
 import org.apache.openmeetings.db.bind.adapter.RoomAdapter;
@@ -215,12 +223,6 @@ import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.util.StoredFile;
 import org.apache.openmeetings.util.crypt.SCryptImplementation;
 import org.apache.wicket.util.string.Strings;
-import org.simpleframework.xml.Serializer;
-import org.simpleframework.xml.convert.Registry;
-import org.simpleframework.xml.convert.RegistryStrategy;
-import org.simpleframework.xml.core.Persister;
-import org.simpleframework.xml.strategy.Strategy;
-import org.simpleframework.xml.transform.RegistryMatcher;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -914,9 +916,9 @@ public class BackupImport {
        /*
         * ##################### Import Private Message Folders
         */
-       private void importPrivateMsgFolders(File base) {
+       void importPrivateMsgFolders(File base) {
                log.info("Recording import complete, starting private message 
folder import");
-               readList(null, base, "privateMessageFolder.xml", 
"privatemessagefolders", "privatemessagefolder", PrivateMessageFolder.class, p 
-> {
+               readList(base, "privateMessageFolder.xml", 
MSG_FOLDER_LIST_NODE, MSG_FOLDER_NODE, PrivateMessageFolder.class, p -> {
                        Long folderId = p.getId();
                        PrivateMessageFolder storedFolder = 
privateMessageFolderDao.get(folderId);
                        if (storedFolder == null) {
@@ -932,13 +934,12 @@ public class BackupImport {
         */
        private void importContacts(File base) throws Exception {
                log.info("Private message folder import complete, starting user 
contacts import");
-               Registry registry = new Registry();
-               Strategy strategy = new RegistryStrategy(registry);
-               Serializer serializer = new Persister(strategy);
-
-               registry.bind(User.class, new UserConverter(userDao, userMap));
+               Class<UserContact> eClazz = UserContact.class;
+               JAXBContext jc = JAXBContext.newInstance(eClazz);
+               Unmarshaller unmarshaller = jc.createUnmarshaller();
+               unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
 
-               readList(null, base, "userContacts.xml", "usercontacts", 
"usercontact", UserContact.class, uc -> {
+               readList(base, "userContacts.xml", CONTACT_LIST_NODE, 
CONTACT_NODE, eClazz, uc -> {
                        Long ucId = uc.getId();
                        UserContact storedUC = userContactDao.get(ucId);
 
@@ -958,15 +959,13 @@ public class BackupImport {
         */
        private void importPrivateMsgs(File base) throws Exception {
                log.info("Usercontact import complete, starting private 
messages item import");
-               Registry registry = new Registry();
-               Strategy strategy = new RegistryStrategy(registry);
-               Serializer serializer = new Persister(strategy);
-
-               registry.bind(User.class, new UserConverter(userDao, userMap));
-               registry.bind(Room.class, new RoomConverter(roomDao, roomMap));
-               registry.bind(Date.class, DateConverter.class);
+               Class<PrivateMessage> eClazz = PrivateMessage.class;
+               JAXBContext jc = JAXBContext.newInstance(eClazz);
+               Unmarshaller unmarshaller = jc.createUnmarshaller();
+               unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
+               unmarshaller.setAdapter(new RoomAdapter(roomDao, roomMap));
 
-               readList(null, base, "privateMessages.xml", "privatemessages", 
"privatemessage", PrivateMessage.class, p -> {
+               readList(base, "privateMessages.xml", MSG_LIST_NODE, MSG_NODE, 
eClazz, p -> {
                        p.setId(null);
                        p.setFolderId(messageFolderMap.get(p.getFolderId()));
                        
p.setUserContactId(userContactMap.get(p.getUserContactId()));
@@ -992,16 +991,8 @@ public class BackupImport {
        private List<FileItem> importFiles(File base) throws Exception {
                log.info("Private message import complete, starting file 
explorer item import");
                List<FileItem> result = new ArrayList<>();
-               Registry registry = new Registry();
-               Strategy strategy = new RegistryStrategy(registry);
-               RegistryMatcher matcher = new RegistryMatcher();
-               Serializer ser = new Persister(strategy, matcher);
-
-               matcher.bind(Long.class, LongTransform.class);
-               matcher.bind(Integer.class, IntegerTransform.class);
-               registry.bind(Date.class, DateConverter.class);
                final Map<Long, Long> folders = new HashMap<>();
-               saveTree(base, "fileExplorerItems.xml", "fileExplorerItems", 
"fileExplorerItem", FileItem.class, folders, file -> {
+               saveTree(base, "fileExplorerItems.xml", FILE_LIST_NODE, 
FILE_NODE, FileItem.class, folders, file -> {
                        Long fId = file.getId();
                        // We need to reset this as openJPA reject to store 
them otherwise
                        file.setId(null);
@@ -1021,18 +1012,13 @@ public class BackupImport {
         */
        private void importPolls(File base) throws Exception {
                log.info("File explorer item import complete, starting room 
poll import");
-               Registry registry = new Registry();
-               Strategy strategy = new RegistryStrategy(registry);
-               RegistryMatcher matcher = new RegistryMatcher();
-               Serializer serializer = new Persister(strategy, matcher);
-
-               matcher.bind(Integer.class, IntegerTransform.class);
-               registry.bind(User.class, new UserConverter(userDao, userMap));
-               registry.bind(Room.class, new RoomConverter(roomDao, roomMap));
-               registry.bind(RoomPoll.Type.class, PollTypeConverter.class);
-               registry.bind(Date.class, DateConverter.class);
-
-               readList(null, base, "roompolls.xml", "roompolls", "roompoll", 
RoomPoll.class, rp -> {
+               Class<RoomPoll> eClazz = RoomPoll.class;
+               JAXBContext jc = JAXBContext.newInstance(eClazz);
+               Unmarshaller unmarshaller = jc.createUnmarshaller();
+               unmarshaller.setAdapter(new UserAdapter(userDao, userMap));
+               unmarshaller.setAdapter(new RoomAdapter(roomDao, roomMap));
+
+               readList(base, "roompolls.xml", POLL_LIST_NODE, POLL_NODE, 
eClazz, rp -> {
                        rp.setId(null);
                        if (rp.getRoom() == null || rp.getRoom().getId() == 
null) {
                                //room was deleted
@@ -1055,13 +1041,12 @@ public class BackupImport {
         */
        private void importRoomFiles(File base) throws Exception {
                log.info("Poll import complete, starting room files import");
-               Registry registry = new Registry();
-               Strategy strategy = new RegistryStrategy(registry);
-               Serializer serializer = new Persister(strategy);
-
-               registry.bind(BaseFileItem.class, new 
BaseFileItemConverter(fileItemDao, fileItemMap));
+               Class<RoomFile> eClazz = RoomFile.class;
+               JAXBContext jc = JAXBContext.newInstance(eClazz);
+               Unmarshaller unmarshaller = jc.createUnmarshaller();
+               unmarshaller.setAdapter(new FileAdapter(fileItemDao, 
fileItemMap));
 
-               readList(null, base, "roomFiles.xml", "RoomFiles", "RoomFile", 
RoomFile.class, rf -> {
+               readList(base, "roomFiles.xml", ROOM_FILE_LIST_NODE, 
ROOM_FILE_NODE, eClazz, rf -> {
                        Room r = roomDao.get(roomMap.get(rf.getRoomId()));
                        if (r == null || rf.getFile() == null || 
rf.getFile().getId() == null) {
                                return;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
index 61391d7..28f7d8b 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
@@ -96,7 +96,7 @@ public class CreatePollDialog extends Modal<RoomPoll> {
                User u = userDao.get(getUserId());
                p.setCreator(u);
                p.setRoom(roomDao.get(roomId));
-               p.setType(RoomPoll.Type.yesNo);
+               p.setType(RoomPoll.Type.YES_NO);
                setModelObject(p);
                form.setModelObject(getModelObject());
                target.add(form);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
index 77b8cb8..34bba93 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
@@ -72,6 +72,7 @@ import 
de.agilecoders.wicket.extensions.markup.html.bootstrap.icon.FontAwesome5I
  */
 public class PollResultsDialog extends Modal<RoomPoll> {
        private static final long serialVersionUID = 1L;
+       private static final String[] NUM_TICKS = new String[] {"1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10"};
        private final WebMarkupContainer chartDiv = new 
WebMarkupContainer("chart");
        private final Long roomId;
        private PollSelectForm selForm;
@@ -226,8 +227,8 @@ public class PollResultsDialog extends Modal<RoomPoll> {
        }
 
        private String[] getTicks(RoomPoll p) {
-               return p != null && RoomPoll.Type.numeric == p.getType()
-                               ? new String[] {"1", "2", "3", "4", "5", "6", 
"7", "8", "9", "10"}
+               return p != null && RoomPoll.Type.NUMERIC == p.getType()
+                               ? NUM_TICKS
                                : new String[] {getString("35"), 
getString("34")};
        }
 
@@ -240,10 +241,10 @@ public class PollResultsDialog extends Modal<RoomPoll> {
        }
 
        private static Integer[] getValues(RoomPoll p) {
-               Integer[] values = initValues(p != null && 
RoomPoll.Type.numeric == p.getType() ? 10 : 2);
+               Integer[] values = initValues(p != null && 
RoomPoll.Type.NUMERIC == p.getType() ? 10 : 2);
                if (p != null) {
                        for (RoomPollAnswer a : p.getAnswers()) {
-                               if (RoomPoll.Type.numeric == p.getType()) {
+                               if (RoomPoll.Type.NUMERIC == p.getType()) {
                                        values[a.getPointList() - 1] ++;
                                } else {
                                        
values[Boolean.FALSE.equals(a.getAnswer()) ? 0 : 1] ++;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
index 220a8cb..cbf3685 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
@@ -115,7 +115,7 @@ public class VoteDialog extends Modal<RoomPollAnswer> {
                a.setVotedUser(u);
                user.setObject(getName(this, a.getRoomPoll().getCreator()));
                form.setModelObject(a);
-               boolean typeNum = a.getRoomPoll() != null && 
RoomPoll.Type.numeric == a.getRoomPoll().getType();
+               boolean typeNum = a.getRoomPoll() != null && 
RoomPoll.Type.NUMERIC == a.getRoomPoll().getType();
                form.typeBool.setVisible(!typeNum);
                form.typeInt.setVisible(typeNum);
                target.add(form);
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImport.java 
b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImport.java
index 0fdaae1..640673d 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImport.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/backup/TestImport.java
@@ -27,6 +27,7 @@ import org.apache.openmeetings.db.dao.basic.ChatDao;
 import org.apache.openmeetings.db.dao.record.RecordingDao;
 import org.apache.openmeetings.db.dao.server.LdapConfigDao;
 import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
 import org.apache.openmeetings.db.entity.basic.Configuration;
 import org.apache.openmeetings.db.entity.server.LdapConfig;
 import org.junit.jupiter.api.Test;
@@ -41,6 +42,8 @@ public class TestImport extends AbstractTestImport {
        private ChatDao chatDao;
        @Autowired
        private RecordingDao recDao;
+       @Autowired
+       private PrivateMessageFolderDao msgFolderDao;
 
        @Test
        public void importVersionNE() throws Exception {
@@ -111,4 +114,12 @@ public class TestImport extends AbstractTestImport {
                backupImport.importRecordings(recs.getParentFile());
                assertEquals(recCount + 4, recDao.get().size(), "Recordings 
should be added");
        }
+
+       @Test
+       public void importMsgFolders() throws Exception {
+               long fldrCount = msgFolderDao.get(0, Integer.MAX_VALUE).size();
+               File fldrs = new 
File(getClass().getClassLoader().getResource("org/apache/openmeetings/backup/msg/privateMessageFolder.xml").toURI());
+               backupImport.importPrivateMsgFolders(fldrs.getParentFile());
+               assertEquals(fldrCount + 1, msgFolderDao.get(0, 
Integer.MAX_VALUE).size(), "Message folders should be added");
+       }
 }
diff --git 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/calendar/appointements.xml
 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/calendar/appointements.xml
index 770dd65..a07e477 100644
--- 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/calendar/appointements.xml
+++ 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/calendar/appointements.xml
@@ -47,7 +47,6 @@ see http://openmeetings.apache.org/Upgrade.html for Details
          <appointmentStarttime 
class="java.util.Date"><![CDATA[1502681640000]]></appointmentStarttime>
          <appointmentEndtime 
class="java.util.Date"><![CDATA[1502685240000]]></appointmentEndtime>
          <appointmentDescription><![CDATA[test 
message<br>]]></appointmentDescription>
-         <users_id><![CDATA[1]]></users_id>
          <inserted class="java.util.Date"><![CDATA[1502681683111]]></inserted>
          <deleted><![CDATA[false]]></deleted>
          <typId><![CDATA[1]]></typId>
diff --git 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/file/flvRecordings.xml
 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/file/flvRecordings.xml
index aca316d..a2accdb 100644
--- 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/file/flvRecordings.xml
+++ 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/file/flvRecordings.xml
@@ -26,7 +26,7 @@ see http://openmeetings.apache.org/Upgrade.html for Details
  --><root>
    <flvrecordings>
       <flvrecording>
-         <fileName><![CDATA[Recording 2017.08.11 11:45:30]]></fileName>
+         <fileName><![CDATA[Rec 1]]></fileName>
          <fileHash><![CDATA[flvRecording_1.flv]]></fileHash>
          <insertedBy><![CDATA[1]]></insertedBy>
          <inserted class="java.util.Date"><![CDATA[1502426730324]]></inserted>
@@ -93,8 +93,8 @@ see http://openmeetings.apache.org/Upgrade.html for Details
          <status><![CDATA[PROCESSED]]></status>
       </flvrecording>
       <flvrecording>
-         <fileName><![CDATA[Recording 2017.08.11 16:00:49]]></fileName>
-         <fileHash><![CDATA[bc0acd29-7ec7-4db0-9366-595e87aa15b2]]></fileHash>
+         <fileName><![CDATA[Rec 2]]></fileName>
+         <fileHash><![CDATA[bc0acd29-7ec7-4db0-9366-595e87aa15e2]]></fileHash>
          <insertedBy><![CDATA[1]]></insertedBy>
          <inserted class="java.util.Date"><![CDATA[1502442049021]]></inserted>
          <updated class="java.util.Date"><![CDATA[1502442351441]]></updated>
@@ -112,7 +112,7 @@ see http://openmeetings.apache.org/Upgrade.html for Details
          <notified><![CDATA[false]]></notified>
       </flvrecording>
       <flvrecording>
-         <fileName><![CDATA[TEST]]></fileName>
+         <fileName><![CDATA[TEST REC]]></fileName>
          <insertedBy><![CDATA[1]]></insertedBy>
          <inserted class="java.util.Date"><![CDATA[1502442049021]]></inserted>
          <updated class="java.util.Date"><![CDATA[1502442351441]]></updated>
@@ -123,8 +123,8 @@ see http://openmeetings.apache.org/Upgrade.html for Details
          <interview><![CDATA[false]]></interview>
       </flvrecording>
       <flvrecording>
-         <fileName><![CDATA[Recording 2017.08.11 16:00:49]]></fileName>
-         <fileHash><![CDATA[bc0acd29-7ec7-4db0-9366-595e87aa15b3]]></fileHash>
+         <fileName><![CDATA[Rec 3 (del)]]></fileName>
+         <fileHash><![CDATA[bc0acd29-7ec7-4db0-9366-595e87aa15e2]]></fileHash>
          <insertedBy><![CDATA[1]]></insertedBy>
          <inserted class="java.util.Date"><![CDATA[1502442049021]]></inserted>
          <updated class="java.util.Date"><![CDATA[1502442351441]]></updated>
@@ -142,8 +142,8 @@ see http://openmeetings.apache.org/Upgrade.html for Details
          <notified><![CDATA[false]]></notified>
       </flvrecording>
       <flvrecording>
-         <fileName><![CDATA[Recording 2017.08.11 16:00:49]]></fileName>
-         <fileHash><![CDATA[bc0acd29-7ec7-4db0-9366-595e87aa15b4]]></fileHash>
+         <fileName><![CDATA[Rec 4]]></fileName>
+         <fileHash><![CDATA[bc0acd29-7ec7-4db0-9366]]></fileHash>
          <insertedBy><![CDATA[1]]></insertedBy>
          <inserted class="java.util.Date"><![CDATA[1502442049021]]></inserted>
          <updated class="java.util.Date"><![CDATA[1502442351441]]></updated>
diff --git 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/msg/privateMessageFolder.xml
 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/msg/privateMessageFolder.xml
new file mode 100644
index 0000000..29054c2
--- /dev/null
+++ 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/msg/privateMessageFolder.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<!-- ###############################################
+This File is auto-generated by the Backup Tool 
+you should use the BackupPanel to modify or change this file 
+see http://openmeetings.apache.org/Upgrade.html for Details 
+###############################################
+ --><root>
+   <privatemessagefolders>
+      <privatemessagefolder>
+         <privateMessageFolderId><![CDATA[666666666]]></privateMessageFolderId>
+         <folderName><![CDATA[1]]></folderName>
+         <userId><![CDATA[1]]></userId>
+      </privatemessagefolder>
+   </privatemessagefolders>
+</root>
diff --git 
a/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/user/userContacts.xml
 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/user/userContacts.xml
new file mode 100644
index 0000000..e2bc3e1
--- /dev/null
+++ 
b/openmeetings-web/src/test/resources/org/apache/openmeetings/backup/user/userContacts.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<!-- ###############################################
+This File is auto-generated by the Backup Tool 
+you should use the BackupPanel to modify or change this file 
+see http://openmeetings.apache.org/Upgrade.html for Details 
+###############################################
+ --><root>
+   <usercontacts>
+      <usercontact>
+         <userContactId><![CDATA[666666666]]></userContactId>
+         <contact><![CDATA[3]]></contact>
+         <owner><![CDATA[1]]></owner>
+         <pending><![CDATA[false]]></pending>
+         <shareCalendar><![CDATA[false]]></shareCalendar>
+      </usercontact>
+      <usercontact>
+         <userContactId><![CDATA[2]]></userContactId>
+         <contact><![CDATA[3]]></contact>
+         <owner><![CDATA[1]]></owner>
+         <pending><![CDATA[false]]></pending>
+         <shareCalendar><![CDATA[false]]></shareCalendar>
+      </usercontact>
+      <usercontact>
+         <userContactId><![CDATA[3]]></userContactId>
+         <contact><![CDATA[3]]></contact>
+         <owner><![CDATA[1]]></owner>
+         <pending><![CDATA[false]]></pending>
+         <shareCalendar><![CDATA[false]]></shareCalendar>
+      </usercontact>
+      <usercontact>
+         <userContactId><![CDATA[5]]></userContactId>
+         <contact><![CDATA[1]]></contact>
+         <owner><![CDATA[3]]></owner>
+         <pending><![CDATA[false]]></pending>
+         <shareCalendar><![CDATA[true]]></shareCalendar>
+      </usercontact>
+      <usercontact>
+         <userContactId><![CDATA[6]]></userContactId>
+         <contact><![CDATA[1]]></contact>
+         <owner><![CDATA[3]]></owner>
+         <pending><![CDATA[true]]></pending>
+         <shareCalendar><![CDATA[false]]></shareCalendar>
+      </usercontact>
+   </usercontacts>
+</root>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 618798c..be815c8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -80,7 +80,7 @@
                <wickets.version>9.0.0-M5-SNAPSHOT</wickets.version>
                <wicket-bootstrap.version>5.0.0-M1</wicket-bootstrap.version>
                <red5-client.version>1.2.3</red5-client.version>
-               <spring.version>5.2.3.RELEASE</spring.version>
+               <spring.version>5.2.4.RELEASE</spring.version>
                <mina.version>2.1.3</mina.version>
                <tomcat.version>9.0.31</tomcat.version>
                <ical4j.version>3.0.14</ical4j.version>
@@ -93,7 +93,7 @@
                <commons-lang3.version>3.9</commons-lang3.version>
                <javax.mail.version>1.6.2</javax.mail.version>
                <openjpa.version>3.1.1</openjpa.version>
-               <asterisk-java.version>2.0.2</asterisk-java.version>
+               <asterisk-java.version>3.1.0</asterisk-java.version>
                <commons-dbcp.version>2.7.0</commons-dbcp.version>
                <commons-pool2.version>2.8.0</commons-pool2.version>
                <postgresql.version>42.2.10</postgresql.version>
@@ -102,7 +102,7 @@
                <commons-codec.version>1.14</commons-codec.version>
                <commons-io.version>2.6</commons-io.version>
                <mysql.version>8.0.18</mysql.version>
-               <mssql.version>8.2.0.jre11</mssql.version>
+               <mssql.version>8.2.1.jre11</mssql.version>
                <commons-collections4.version>4.4</commons-collections4.version>
                <xstream.version>1.4.11.1</xstream.version>
                <api-all.version>2.0.0.AM2</api-all.version>
@@ -114,7 +114,7 @@
                <jetty.version>9.4.20.v20190813</jetty.version>
                <license.excludedScopes>test</license.excludedScopes>
                <bcprov-jdk15on.version>1.64</bcprov-jdk15on.version>
-               <mockito.version>3.2.4</mockito.version>
+               <mockito.version>3.3.0</mockito.version>
                <powermock.version>2.0.5</powermock.version>
                <quartz.version>2.3.2</quartz.version>
                <kurento.version>6.13.0</kurento.version>

Reply via email to