You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2020/02/24 14:00:19 UTC

[syncope] branch master updated: [SYNCOPE-1541] XmlAdapter + FastDateFormat

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 057c090  [SYNCOPE-1541] XmlAdapter + FastDateFormat
057c090 is described below

commit 057c0903a9f10b2fc31052fb69a89751fac2e90f
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Mon Feb 24 14:53:01 2020 +0100

    [SYNCOPE-1541] XmlAdapter + FastDateFormat
---
 .../syncope/common/lib/info/package-info.java      |  5 +++++
 .../jaxb/{package-info.java => DateAdapter.java}   | 25 ++++++++++++++++------
 .../syncope/common/lib/jaxb/package-info.java      |  4 ++++
 .../syncope/common/lib/log/package-info.java       |  5 +++++
 .../apache/syncope/common/lib/package-info.java    |  5 +++++
 .../syncope/common/lib/policy/package-info.java    |  5 +++++
 .../syncope/common/lib/report/package-info.java    |  5 +++++
 .../syncope/common/lib/request/package-info.java   |  5 +++++
 .../syncope/common/lib/search/package-info.java    |  5 +++++
 .../apache/syncope/common/lib/to/package-info.java |  5 +++++
 .../syncope/common/lib/types/package-info.java     |  5 +++++
 .../org/apache/syncope/common/lib/JAXBTest.java    | 22 +++++++++++++++++++
 12 files changed, 89 insertions(+), 7 deletions(-)

diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/info/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/info/package-info.java
index 60ef65d..4093ba3 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/info/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/info/package-info.java
@@ -20,8 +20,13 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.info;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/DateAdapter.java
similarity index 59%
copy from common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/package-info.java
copy to common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/DateAdapter.java
index dd6b260..f6d481d 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/DateAdapter.java
@@ -16,12 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-@XmlSchema(
-        namespace = SyncopeConstants.NS,
-        xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
-                    namespaceURI = SyncopeConstants.NS) })
 package org.apache.syncope.common.lib.jaxb;
 
-import javax.xml.bind.annotation.XmlNs;
-import javax.xml.bind.annotation.XmlSchema;
-import org.apache.syncope.common.lib.SyncopeConstants;
+import java.util.Date;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+import org.apache.commons.lang3.time.FastDateFormat;
+
+public class DateAdapter extends XmlAdapter<String, Date> {
+
+    private static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
+
+    @Override
+    public Date unmarshal(final String value) throws Exception {
+        return FastDateFormat.getInstance(DATE_FORMAT).parse(value);
+    }
+
+    @Override
+    public String marshal(final Date value) throws Exception {
+        return FastDateFormat.getInstance(DATE_FORMAT).format(value);
+    }
+}
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/package-info.java
index dd6b260..53754c9 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/jaxb/package-info.java
@@ -20,8 +20,12 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.jaxb;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/log/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/log/package-info.java
index 1aa449d..0f71579 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/log/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/log/package-info.java
@@ -20,8 +20,13 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.log;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/package-info.java
index 43df8b4..9b680ce 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/package-info.java
@@ -17,6 +17,11 @@
  * under the License.
  */
 @XmlSchema(namespace = SyncopeConstants.NS)
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/package-info.java
index 67952ac..1850d20 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/policy/package-info.java
@@ -20,8 +20,13 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.policy;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/report/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/report/package-info.java
index 9d6a5da..cd2f367 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/report/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/report/package-info.java
@@ -20,8 +20,13 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.report;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/package-info.java
index ea81a3a..4f2bccf 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/request/package-info.java
@@ -20,8 +20,13 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.request;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/package-info.java
index 5b06db0..e510f6f 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/search/package-info.java
@@ -20,8 +20,13 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.search;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/package-info.java
index 7467695..aff9f18 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/to/package-info.java
@@ -20,8 +20,13 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.to;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/package-info.java b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/package-info.java
index 6d6cd5c..2a43129 100644
--- a/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/package-info.java
+++ b/common/idrepo/lib/src/main/java/org/apache/syncope/common/lib/types/package-info.java
@@ -20,8 +20,13 @@
         namespace = SyncopeConstants.NS,
         xmlns = { @XmlNs(prefix = SyncopeConstants.NS_PREFIX,
                     namespaceURI = SyncopeConstants.NS) })
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
 package org.apache.syncope.common.lib.types;
 
+import java.util.Date;
 import javax.xml.bind.annotation.XmlNs;
 import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
 import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
diff --git a/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/JAXBTest.java b/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/JAXBTest.java
index 942ce1f..cc6aa4f 100644
--- a/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/JAXBTest.java
+++ b/common/idrepo/lib/src/test/java/org/apache/syncope/common/lib/JAXBTest.java
@@ -19,10 +19,13 @@
 package org.apache.syncope.common.lib;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.util.Calendar;
+import java.util.Date;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
@@ -31,6 +34,7 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.syncope.common.lib.info.NumbersInfo;
 import org.apache.syncope.common.lib.request.UserUR;
 import org.apache.syncope.common.lib.report.UserReportletConf;
+import org.apache.syncope.common.lib.to.ExecTO;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.junit.jupiter.api.Test;
 
@@ -85,4 +89,22 @@ public class JAXBTest {
         Object actual = unmarshaller.unmarshal(new StringReader(writer.toString()));
         assertEquals(original, actual);
     }
+
+    @Test
+    public void issueSYNCOPE1541() throws JAXBException {
+        JAXBContext context = JAXBContext.newInstance(ExecTO.class);
+        Marshaller marshaller = context.createMarshaller();
+
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date());
+        cal.set(Calendar.MILLISECOND, 0);
+
+        ExecTO exec = new ExecTO();
+        exec.setStart(cal.getTime());
+
+        StringWriter writer = new StringWriter();
+        marshaller.marshal(exec, writer);
+
+        assertTrue(writer.toString().contains(".000"));
+    }
 }