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