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"));
+ }
}