From adb134cbefcf9727b3052b98a20369d17d3b14b4 Mon Sep 17 00:00:00 2001 From: Ray Lee Date: Tue, 1 Oct 2019 17:22:00 -0700 Subject: [PATCH] DRYD-767: Do not attempt to unmarshal XML elements w/o a namespace URI. --- services/client/pom.xml | 6 +++ .../services/client/PoxPayload.java | 50 +++++++++++-------- services/common-api/pom.xml | 3 +- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/services/client/pom.xml b/services/client/pom.xml index 7b2b20eb4..d9224d579 100644 --- a/services/client/pom.xml +++ b/services/client/pom.xml @@ -35,6 +35,12 @@ commons-httpclient commons-httpclient + + org.apache.commons + commons-lang3 + 3.2.1 + provided + org.apache.httpcomponents httpclient diff --git a/services/client/src/main/java/org/collectionspace/services/client/PoxPayload.java b/services/client/src/main/java/org/collectionspace/services/client/PoxPayload.java index 6661db227..827ceca1c 100644 --- a/services/client/src/main/java/org/collectionspace/services/client/PoxPayload.java +++ b/services/client/src/main/java/org/collectionspace/services/client/PoxPayload.java @@ -20,6 +20,7 @@ import javax.xml.transform.stream.StreamSource; import com.sun.xml.bind.api.impl.NameConverter; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; @@ -329,29 +330,34 @@ public abstract class PoxPayload { return nc.toPackageName(namespaceURI); } - /** - * Attempts to unmarshal a DOM4j element (for a part) into an instance of a JAXB object - * - * @param elementInput the element input - * @return the object - */ - public static Object toObject(Element elementInput) { - Object result = null; - try { - Namespace namespace = elementInput.getNamespace(); - String thePackage = getPackage(namespace); - JAXBContext jc = JAXBContext.newInstance(thePackage); - Unmarshaller um = jc.createUnmarshaller(); - result = um.unmarshal( - new StreamSource(new StringReader(elementInput.asXML()))); - } catch (Exception e) { - String msg = String.format("Could not unmarshal XML payload '%s' into a JAXB object.", - elementInput.getName()); - logger.warn(msg); - } + /** + * Attempts to unmarshal a DOM4j element (for a part) into an instance of a JAXB object + * + * @param elementInput the element input + * @return the object + */ + public static Object toObject(Element elementInput) { + Object result = null; - return result; - } + try { + Namespace namespace = elementInput.getNamespace(); + + if (StringUtils.isNotEmpty(namespace.getURI())) { + String thePackage = getPackage(namespace); + JAXBContext jc = JAXBContext.newInstance(thePackage); + Unmarshaller um = jc.createUnmarshaller(); + + result = um.unmarshal(new StreamSource(new StringReader(elementInput.asXML()))); + } + } catch (Exception e) { + if (logger.isInfoEnabled()) { + String msg = String.format("Could not unmarshal XML element '%s' into a JAXB object.", elementInput.getName()); + logger.info(msg); + } + } + + return result; + } /** * Attempts to unmarshal a JAXB object (for a part) to a DOM4j element. diff --git a/services/common-api/pom.xml b/services/common-api/pom.xml index 10f4ba8c7..38741f208 100644 --- a/services/common-api/pom.xml +++ b/services/common-api/pom.xml @@ -14,7 +14,8 @@ org.apache.commons commons-lang3 - 3.1 + 3.2.1 + provided -- 2.47.3