[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.
- [GNUnet-SVN] [taler-libeufin] 06/25: readme, (continued)
- [GNUnet-SVN] [taler-libeufin] 06/25: readme, gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 05/25: Copyright header., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 01/25: Import initial project structure., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 10/25: fix resource loading, gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 03/25: AGPL license, gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 12/25: Local test of XML validation., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 11/25: import sample hev, gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 14/25: Test with XML imported from string., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 13/25: fix test, gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 15/25: Abstracting string conversion to "stream"., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 16/25: Introducing the converters:,
gnunet <=
- [GNUnet-SVN] [taler-libeufin] 20/25: Server responds with ebicsHEVResponse., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 18/25: method to get (XML) strings from JAXB objects., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 23/25: Translating getLogger() into Kotlin., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 19/25: Importing JAXB scaffolding to reflect ebics "hev" types., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 21/25: Fix resource loading from JAR., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 25/25: Finish translating Java into Kotlin., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 17/25: Check if the message can be handled by the server., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 24/25: Move XMLManagement.java to Kotlin., gnunet, 2019/09/20
- [GNUnet-SVN] [taler-libeufin] 22/25: Complete initial setup (#5888)., gnunet, 2019/09/20