gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-libeufin] 16/25: Introducing the converters:


From: gnunet
Subject: [GNUnet-SVN] [taler-libeufin] 16/25: Introducing the converters:
Date: Fri, 20 Sep 2019 19:32:54 +0200

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository libeufin.

commit a321e4373781d35427bf25b99a00dda64fefe04b
Author: Marcello Stanisci <address@hidden>
AuthorDate: Tue Sep 17 17:22:20 2019 +0200

    Introducing the converters:
    
    DOM -> String
    String -> DOM
    Java Object -> DOM
---
 src/main/java/tech/libeufin/XMLManagement.java | 111 +++++++++++++++++++++++--
 src/main/kotlin/Main.kt                        |  12 ++-
 src/test/java/XMLManagementTest.java           |  20 +++++
 3 files changed, 137 insertions(+), 6 deletions(-)

diff --git a/src/main/java/tech/libeufin/XMLManagement.java 
b/src/main/java/tech/libeufin/XMLManagement.java
index 3d9e389..4576201 100644
--- a/src/main/java/tech/libeufin/XMLManagement.java
+++ b/src/main/java/tech/libeufin/XMLManagement.java
@@ -1,14 +1,22 @@
 package tech.libeufin;
 
+import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
-import java.io.IOException;
+
+import java.io.*;
 import javax.xml.XMLConstants;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.*;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
-import javax.xml.transform.Source;
 import javax.xml.validation.*; // has SchemaFactory
-import java.io.File;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
 
 /**
  * This class takes care of importing XSDs and validate
@@ -44,6 +52,36 @@ public class XMLManagement {
     }
 
     /**
+     * Parse string into XML DOM.
+     * @param xmlString the string to parse.
+     * @return the DOM representing @a xmlString
+     */
+    static public Document parseStringIntoDOM(String xmlString) {
+
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+
+        try {
+
+            InputStream xmlInputStream = new 
ByteArrayInputStream(xmlString.getBytes());
+            // Source xmlSource = new StreamSource(xmlInputStream);
+
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document document = builder.parse(new InputSource(xmlInputStream));
+
+            return document;
+
+        } catch (ParserConfigurationException e) {
+            System.out.println("Could not parse string into DOM: " + e);
+        } catch (SAXException e) {
+            System.out.println("Could not parse string into DOM: " + e);
+        } catch (IOException e) {
+            System.out.println("Could not parse string into DOM: " + e);
+        }
+
+        return null;
+    }
+
+    /**
      *
      * @param xmlDoc the XML document to validate
      * @return true when validation passes, false otherwise
@@ -72,4 +110,67 @@ public class XMLManagement {
         return this.validate(xmlSource);
     }
 
+    /**
+     * Return the DOM representation of the Java object, using the JAXB
+     * interface.
+     *
+     * @param object to be transformed into DOM.  Typically, the object
+     *               has already got its setters called.
+     * @return the DOM Document, or null (if errors occur).
+     */
+    static public Document parseObjectIntoDocument(Object object) {
+
+        try {
+            JAXBContext jc = JAXBContext.newInstance(object.getClass());
+
+            /* Make the target document.  */
+            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+            DocumentBuilder db = dbf.newDocumentBuilder();
+            Document document = db.newDocument();
+
+            /* Marshalling the object into the document.  */
+            Marshaller m = jc.createMarshaller();
+            m.marshal(object, document); // document absorbed XML!
+            return document;
+
+        } catch (JAXBException e) {
+            System.out.println(e);
+        } catch (ParserConfigurationException e) {
+            System.out.println(e);
+        }
+
+        return null;
+    }
+
+    /**
+     * Extract String from DOM.
+     * @param document the DOM to extract the string from.
+     * @return the final String, or null if errors occur.
+     */
+    static public String getStringFromDocument(Document document){
+
+        try {
+            /* Make Transformer.  */
+            TransformerFactory tf = TransformerFactory.newInstance();
+            Transformer t = tf.newTransformer();
+            t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+            t.setOutputProperty(OutputKeys.INDENT, "no");
+
+            /* Make string writer.  */
+            StringWriter sw = new StringWriter();
+
+            /* Extract string.  */
+            t.transform(new DOMSource(document), new StreamResult(sw));
+            String output = sw.toString();
+
+            return output;
+
+        } catch (TransformerConfigurationException e) {
+            System.out.println(e);
+        } catch (TransformerException e) {
+            System.out.println(e);
+        }
+
+        return null;
+    }
 };
\ No newline at end of file
diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt
index ee6a700..5f5fc88 100644
--- a/src/main/kotlin/Main.kt
+++ b/src/main/kotlin/Main.kt
@@ -43,12 +43,22 @@ fun main(args: Array<String>) {
                 println("Body: $body")
                 val isValid = xmlProcess.validate(body)
                 call.response.header("Content-Type", "application/xml")
+
+                /*if (!isValid) {
+                    /* Return "invalid request" */
+                }
+
+                if (!knownType) {
+
+                    /* Log to console and return "unknown type" */
+                }
+
                 if (isValid){
                     call.respond(HttpStatusCode.OK, xmlResponseObject)
                 }
                 else {
                     call.respond(HttpStatusCode.BadRequest, xmlResponseObject)
-                }
+                }*/
             }
         }
     }
diff --git a/src/test/java/XMLManagementTest.java 
b/src/test/java/XMLManagementTest.java
index 0837ca1..3bf205c 100644
--- a/src/test/java/XMLManagementTest.java
+++ b/src/test/java/XMLManagementTest.java
@@ -1,12 +1,18 @@
 import org.junit.Test;
+import org.w3c.dom.Element;
 import tech.libeufin.XMLManagement;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.InputStream;
+import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.transform.Source;
 import javax.xml.transform.stream.StreamSource;
 import static org.junit.Assert.*;
+import org.w3c.dom.Document;
+
+@XmlRootElement(name="SimpleJAXBTest")
+class SimpleJAXBTest {}
 
 public class XMLManagementTest {
 
@@ -25,5 +31,19 @@ public class XMLManagementTest {
         assertFalse(xm.validate(ebics_from_string));
 
         assertFalse(xm.validate("<moreInvalidXML>"));
+
+        /* Parse XML string into DOM */
+        Document document = xm.parseStringIntoDOM("<root></root>");
+        Element documentElement = document.getDocumentElement();
+        assertTrue("root" == documentElement.getTagName());
+
+        /* Make XML DOM from Java object (JAXB) */
+        Document simpleRoot = xm.parseObjectIntoDocument(new SimpleJAXBTest());
+        Element simpleRootDocumentElement = simpleRoot.getDocumentElement();
+        assertTrue("SimpleJAXBTest" == simpleRootDocumentElement.getTagName());
+
+        /* Serialize the DOM into string.  */
+        String simpleRootString = 
XMLManagement.getStringFromDocument(simpleRoot);
+        System.out.println(simpleRootString);
     }
 }

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]