You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/02/21 15:36:30 UTC
[isis] 02/11: ISIS-1867: caches JAXBContext by class in
JaxbService.Default implementation
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 1921a342d9a2d2a7b7bdb06f12b46df359b6e172
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Feb 21 14:49:06 2018 +0000
ISIS-1867: caches JAXBContext by class in JaxbService.Default implementation
---
.../isis/applib/services/jaxb/JaxbService.java | 34 +++++++++++++---------
1 file changed, 21 insertions(+), 13 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
index 9df01a3..dae78d2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
@@ -29,16 +29,16 @@ import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
+import com.google.common.collect.MapMaker;
+import com.google.common.collect.Maps;
+
import org.apache.isis.applib.ApplicationException;
-import org.apache.isis.applib.DomainObjectContainer;
import org.apache.isis.applib.NonRecoverableException;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.internal.base._Casts;
import org.apache.isis.applib.internal.base._NullSafe;
import org.apache.isis.applib.services.dto.Dto_downloadXsd;
-import com.google.common.collect.Maps;
-
public interface JaxbService {
@Programmatic
@@ -103,7 +103,7 @@ public interface JaxbService {
@Override
public Object fromXml(final JAXBContext jaxbContext, final String xml) {
- return fromXml(jaxbContext, xml, Maps.<String,Object>newHashMap());
+ return fromXml(jaxbContext, xml, Maps.newHashMap());
}
@Override
public Object fromXml(final JAXBContext jaxbContext, final String xml, final Map<String, Object> unmarshallerProperties) {
@@ -127,12 +127,12 @@ public interface JaxbService {
@Override
public <T> T fromXml(final Class<T> domainClass, final String xml) {
- return fromXml(domainClass, xml, Maps.<String,Object>newHashMap());
+ return fromXml(domainClass, xml, Maps.newHashMap());
}
@Override
public <T> T fromXml(final Class<T> domainClass, final String xml, final Map<String, Object> unmarshallerProperties) {
try {
- final JAXBContext context = JAXBContext.newInstance(domainClass);
+ final JAXBContext context = jaxbContextFor(domainClass);
return _Casts.uncheckedCast(fromXml(context, xml, unmarshallerProperties));
} catch (final JAXBException ex) {
@@ -140,9 +140,21 @@ public interface JaxbService {
}
}
+ private Map<Class<?>, JAXBContext> jaxbContextByClass = new MapMaker().concurrencyLevel(10).makeMap();
+
+ private <T> JAXBContext jaxbContextFor(final Class<T> dtoClass) throws JAXBException {
+ JAXBContext jaxbContext = jaxbContextByClass.get(dtoClass);
+ if(jaxbContext == null) {
+ jaxbContext = JAXBContext.newInstance(dtoClass);
+ jaxbContextByClass.put(dtoClass, jaxbContext);
+ }
+ return jaxbContext;
+ }
+
+
@Override
public String toXml(final Object domainObject) {
- return toXml(domainObject, Maps.<String,Object>newHashMap());
+ return toXml(domainObject, Maps.newHashMap());
}
@Override
@@ -150,7 +162,7 @@ public interface JaxbService {
final Class<?> domainClass = domainObject.getClass();
try {
- final JAXBContext context = JAXBContext.newInstance(domainClass);
+ final JAXBContext context = jaxbContextFor(domainClass);
final Marshaller marshaller = context.createMarshaller();
@@ -218,7 +230,7 @@ public interface JaxbService {
try {
final Class<?> domainClass = domainObject.getClass();
- final JAXBContext context = JAXBContext.newInstance(domainClass);
+ final JAXBContext context = jaxbContextFor(domainClass);
final CatalogingSchemaOutputResolver outputResolver = new CatalogingSchemaOutputResolver(isisSchemas);
context.generateSchema(outputResolver);
@@ -228,10 +240,6 @@ public interface JaxbService {
throw new ApplicationException(ex);
}
}
-
-
- @javax.inject.Inject
- DomainObjectContainer container;
}
--
To stop receiving notification emails like this one, please contact
danhaywood@apache.org.