From 0e4cbf8f9078c7a04be28c35f9ee857657836d4c Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 24 Jul 2017 15:49:49 +0200 Subject: [PATCH] error handling for xml serialization improved to catch all library errors --- .../cache/PermanentDatabaseLevelCache.java | 10 ++++++---- .../mapviewer/annotation/cache/XmlSerializer.java | 12 ++++++++---- .../annotation/data/TargettingStructure.java | 15 +++++++++++++++ .../annotation/services/PubmedParser.java | 6 +++++- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/cache/PermanentDatabaseLevelCache.java b/annotation/src/main/java/lcsb/mapviewer/annotation/cache/PermanentDatabaseLevelCache.java index 985aa13906..607a26f3ba 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/cache/PermanentDatabaseLevelCache.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/cache/PermanentDatabaseLevelCache.java @@ -448,12 +448,14 @@ public class PermanentDatabaseLevelCache extends XmlParser implements PermanentD try { Document document = getXmlDocumentFromString(entry.getValue()); Calendar currentDate = Calendar.getInstance(); - if (currentDate.before(entry.getExpires())) { - return document.getFirstChild(); - } else { + if (currentDate.after(entry.getExpires())) { cacheRefreshService.submit(new RefreshTask(query, type)); - return document.getFirstChild(); } + Node result = null; + if (document != null) { + result = document.getFirstChild(); + } + return result; } catch (InvalidXmlSchemaException e) { logger.warn("Invalid xml for query: " + query); logger.warn("xml: " + entry.getValue()); diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/cache/XmlSerializer.java b/annotation/src/main/java/lcsb/mapviewer/annotation/cache/XmlSerializer.java index 4a5535ec10..37bf7e7338 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/cache/XmlSerializer.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/cache/XmlSerializer.java @@ -8,6 +8,7 @@ import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import org.apache.commons.lang3.SerializationException; +import org.apache.log4j.Logger; import org.w3c.dom.Node; /** @@ -20,7 +21,8 @@ import org.w3c.dom.Node; * type of the object to serialize */ public class XmlSerializer<T> { - + private final Logger logger = Logger.getLogger(XmlSerializer.class); + /** * Class of the object that DAO works on. */ @@ -74,7 +76,8 @@ public class XmlSerializer<T> { } catch (JAXBException e) { throw new SerializationException(e); } catch (Exception e) { - throw new SerializationException(e); + logger.error(e, e); + return null; } return sw.toString(); } @@ -95,8 +98,9 @@ public class XmlSerializer<T> { return (T) jaxbUnmarshaller.unmarshal(node); } catch (JAXBException e) { throw new SerializationException(e); - } catch (Exception e) { //the library can throw NPE sometimes... - throw new SerializationException(e); + } catch (Exception e) { // the library can throw NPE sometimes... + logger.error(e, e); + return null; } } diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/data/TargettingStructure.java b/annotation/src/main/java/lcsb/mapviewer/annotation/data/TargettingStructure.java index 6c704dc1d3..c35645c3da 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/data/TargettingStructure.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/data/TargettingStructure.java @@ -4,10 +4,25 @@ import java.util.Collection; import lcsb.mapviewer.model.map.MiriamData; +/** + * Interface for all externall objects that interact with elements on the map. + * + * @author Piotr Gawron + * + */ public interface TargettingStructure { + /** + * + * @return list of {@link MiriamData annotations} that describe source of this + * object + */ Collection<MiriamData> getSources(); + /** + * + * @return list of {@link Target targets} with which object is interacting + */ Collection<Target> getTargets(); } diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/PubmedParser.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/PubmedParser.java index f676f785ac..851847b75d 100644 --- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/PubmedParser.java +++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/PubmedParser.java @@ -183,7 +183,11 @@ public class PubmedParser extends CachableInterface implements IExternalService result.setId(id + ""); if (result.getTitle() != null && !result.getTitle().trim().isEmpty()) { - setCacheValue(queryString, articleSerializer.objectToString(result)); + try { + setCacheValue(queryString, articleSerializer.objectToString(result)); + } catch (SerializationException e) { + logger.warn("Problem with serialization of the string: " + queryString); + } } else { result = null; } -- GitLab