gnunet-svn
[Top][All Lists]
Advanced

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

[libeufin] branch master updated: more migration (compilation fails)


From: gnunet
Subject: [libeufin] branch master updated: more migration (compilation fails)
Date: Thu, 12 Dec 2019 16:08:26 +0100

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

marcello pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new 0013763  more migration (compilation fails)
0013763 is described below

commit 00137637638ad04989f60f6def9d95a69715893b
Author: Marcello Stanisci <address@hidden>
AuthorDate: Thu Dec 12 16:08:14 2019 +0100

    more migration (compilation fails)
---
 .idea/gradle.xml                                   |  1 +
 .idea/kotlinc.xml                                  |  2 +-
 nexus/build.gradle                                 |  2 +-
 nexus/src/main/kotlin/Helpers.kt                   | 11 ++-
 nexus/src/main/kotlin/Main.kt                      | 24 +++----
 nexus/src/main/resources/logback.xml               |  3 +-
 nexus/src/test/kotlin/LetterFormatTest.kt          |  2 +-
 nexus/src/test/kotlin/SignatureDataTest.kt         |  5 +-
 sandbox/build.gradle                               |  2 +
 .../src/main/kotlin/tech/libeufin/sandbox/DB.kt    |  4 --
 .../tech/libeufin/sandbox/EbicsProtocolBackend.kt  | 80 +++++++++++++++++-----
 .../src/main/kotlin/tech/libeufin/sandbox/Main.kt  |  7 +-
 sandbox/src/main/resources/logback.xml             | 13 +---
 sandbox/src/test/kotlin/CryptoUtilTest.kt          |  1 +
 sandbox/src/test/kotlin/EbicsMessagesTest.kt       | 10 +--
 sandbox/src/test/kotlin/EbicsOrderUtilTest.kt      |  1 +
 sandbox/src/test/kotlin/LogTest.kt                 |  8 +++
 sandbox/src/test/kotlin/XmlCombinatorsTest.kt      |  2 +
 sandbox/src/test/kotlin/XmlUtilTest.kt             | 13 ++--
 .../sandbox => util/src/main/kotlin}/CryptoUtil.kt | 39 ++++++++---
 .../src/main/kotlin}/EbicsOrderUtil.kt             |  2 +-
 .../sandbox => util/src/main/kotlin}/XMLUtil.kt    |  2 +-
 .../src/main/kotlin}/XmlCombinators.kt             |  5 +-
 util/src/main/kotlin/blob.kt                       |  8 +++
 .../sandbox => util/src/main/kotlin}/hex.kt        |  2 +-
 util/src/main/kotlin/logger.kt                     |  6 ++
 .../ebics_h004/EbicsKeyManagementResponse.kt       |  2 +-
 .../kotlin}/schema/ebics_h004/EbicsNpkdRequest.kt  | 12 ++--
 .../main/kotlin}/schema/ebics_h004/EbicsRequest.kt | 48 ++++++-------
 .../kotlin}/schema/ebics_h004/EbicsResponse.kt     | 65 +++++++++---------
 .../main/kotlin}/schema/ebics_h004/EbicsTypes.kt   | 10 +--
 .../schema/ebics_h004/EbicsUnsecuredRequest.kt     | 38 +++++-----
 .../schema/ebics_h004/HIARequestOrderData.kt       |  2 +-
 .../schema/ebics_h004/HKDResponseOrderData.kt      |  2 +-
 .../schema/ebics_h004/HPBResponseOrderData.kt      |  2 +-
 .../schema/ebics_h004/HTDResponseOrderData.kt      |  2 +-
 .../kotlin}/schema/ebics_h004/package-info.java    |  2 +-
 .../main/kotlin}/schema/ebics_hev/EbicsMessages.kt |  2 +-
 .../kotlin}/schema/ebics_hev/package-info.java     |  2 +-
 .../kotlin}/schema/ebics_s001/SignatureTypes.kt    |  2 +-
 .../kotlin}/schema/ebics_s001/UserSignatureData.kt |  2 +-
 .../kotlin}/schema/ebics_s001/package-info.java    |  2 +-
 42 files changed, 261 insertions(+), 189 deletions(-)

diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 49f0342..7d86b4b 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -15,6 +15,7 @@
             <option value="$PROJECT_DIR$" />
             <option value="$PROJECT_DIR$/nexus" />
             <option value="$PROJECT_DIR$/sandbox" />
+            <option value="$PROJECT_DIR$/util" />
           </set>
         </option>
         <option name="useQualifiedModuleNames" value="true" />
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index 9b02d59..0dd4b35 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="Kotlin2JvmCompilerArguments">
-    <option name="jvmTarget" value="11" />
+    <option name="jvmTarget" value="1.8" />
   </component>
 </project>
\ No newline at end of file
diff --git a/nexus/build.gradle b/nexus/build.gradle
index faee97e..e427771 100644
--- a/nexus/build.gradle
+++ b/nexus/build.gradle
@@ -46,7 +46,7 @@ application {
 }
 
 dependencies {
-    implementation project(":sandbox")
+    implementation project(":util")
     compile "io.ktor:ktor-client-apache:1.2.4"
 }
 
diff --git a/nexus/src/main/kotlin/Helpers.kt b/nexus/src/main/kotlin/Helpers.kt
index 4537d26..328a272 100644
--- a/nexus/src/main/kotlin/Helpers.kt
+++ b/nexus/src/main/kotlin/Helpers.kt
@@ -3,12 +3,11 @@ package tech.libeufin.nexus
 import io.ktor.client.HttpClient
 import io.ktor.client.request.post
 import io.ktor.http.HttpStatusCode
-import tech.libeufin.sandbox.CryptoUtil
-import tech.libeufin.sandbox.XMLUtil
-import tech.libeufin.sandbox.LOGGER
-import tech.libeufin.sandbox.toByteArray
-import tech.libeufin.schema.ebics_h004.EbicsRequest
-import tech.libeufin.schema.ebics_s001.UserSignatureData
+import tech.libeufin.util.CryptoUtil
+import tech.libeufin.util.XMLUtil
+import tech.libeufin.util.schema.ebics_h004.EbicsRequest
+import tech.libeufin.util.schema.ebics_s001.UserSignatureData
+import tech.libeufin.util.toByteArray
 import java.math.BigInteger
 import java.security.PrivateKey
 import java.security.SecureRandom
diff --git a/nexus/src/main/kotlin/Main.kt b/nexus/src/main/kotlin/Main.kt
index 159368d..9b10f01 100644
--- a/nexus/src/main/kotlin/Main.kt
+++ b/nexus/src/main/kotlin/Main.kt
@@ -25,7 +25,6 @@ import io.ktor.application.ApplicationCallPipeline
 import io.ktor.application.call
 import io.ktor.application.install
 import io.ktor.client.*
-import io.ktor.client.request.post
 import io.ktor.features.ContentNegotiation
 import io.ktor.features.StatusPages
 import io.ktor.gson.gson
@@ -38,30 +37,23 @@ import io.ktor.response.respondText
 import io.ktor.routing.*
 import io.ktor.server.engine.embeddedServer
 import io.ktor.server.netty.Netty
-import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
-import org.apache.xml.security.binding.xmldsig.SignatureType
 import org.jetbrains.exposed.sql.transactions.transaction
 import org.joda.time.DateTime
+import org.slf4j.Logger
 import org.slf4j.LoggerFactory
-import tech.libeufin.sandbox.*
-import tech.libeufin.schema.ebics_h004.*
+import tech.libeufin.util.schema.ebics_h004.*
+import tech.libeufin.util.*
 import java.text.DateFormat
 import javax.sql.rowset.serial.SerialBlob
-import javax.xml.bind.JAXBElement
-import tech.libeufin.schema.ebics_s001.SignatureTypes
-import tech.libeufin.schema.ebics_s001.UserSignatureData
+import tech.libeufin.util.toHexString
+import tech.libeufin.util.CryptoUtil
+import tech.libeufin.util.EbicsOrderUtil
+import tech.libeufin.util.XMLUtil
 import java.math.BigInteger
-import java.security.PrivateKey
-import java.security.SecureRandom
-import java.security.interfaces.RSAPrivateCrtKey
 import java.text.SimpleDateFormat
 import java.util.*
 import java.util.zip.DeflaterInputStream
 import javax.crypto.EncryptedPrivateKeyInfo
-import javax.xml.datatype.DatatypeFactory
-import javax.xml.datatype.XMLGregorianCalendar
-import java.security.interfaces.RSAPublicKey
-import java.time.LocalDate
 
 
 fun testData() {
@@ -94,7 +86,7 @@ data class BadSignature(val statusCode: HttpStatusCode) : 
Exception("Signature v
 data class BadBackup(val statusCode: HttpStatusCode) : Exception("Could not 
restore backed up keys")
 data class BankInvalidResponse(val statusCode: HttpStatusCode) : 
Exception("Missing data from bank response")
 
-
+val LOGGER: Logger = LoggerFactory.getLogger("tech.libeufin.nexus")
 
 fun main() {
     dbCreateTables()
diff --git a/nexus/src/main/resources/logback.xml 
b/nexus/src/main/resources/logback.xml
index 3338034..84b1e60 100644
--- a/nexus/src/main/resources/logback.xml
+++ b/nexus/src/main/resources/logback.xml
@@ -1,3 +1,4 @@
+
 <configuration>
     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
         <encoder>
@@ -21,7 +22,7 @@
         </encoder>
     </appender>
 
-    <logger name="tech.libeufin.sandbox" level="DEBUG"  additivity="false">
+    <logger name="tech.libeufin.util" level="TRACE"  additivity="false">
         <appender-ref ref="STDOUT" />
         <appender-ref ref="SANDBOX-FILE" />
     </logger>
diff --git a/nexus/src/test/kotlin/LetterFormatTest.kt 
b/nexus/src/test/kotlin/LetterFormatTest.kt
index f6a559c..f5a455e 100644
--- a/nexus/src/test/kotlin/LetterFormatTest.kt
+++ b/nexus/src/test/kotlin/LetterFormatTest.kt
@@ -1,7 +1,7 @@
 package tech.libeufin.nexus
 
 import org.junit.Test
-import tech.libeufin.sandbox.toHexString
+import tech.libeufin.util.toHexString
 
 class LetterFormatTest {
 
diff --git a/nexus/src/test/kotlin/SignatureDataTest.kt 
b/nexus/src/test/kotlin/SignatureDataTest.kt
index 8cd133a..38db472 100644
--- a/nexus/src/test/kotlin/SignatureDataTest.kt
+++ b/nexus/src/test/kotlin/SignatureDataTest.kt
@@ -1,10 +1,9 @@
 package tech.libeufin.nexus
 
-import okio.internal.commonAsUtf8ToByteArray
-import tech.libeufin.sandbox.XMLUtil
+import tech.libeufin.util.XMLUtil
 import org.apache.xml.security.binding.xmldsig.SignatureType
 import org.junit.Test
-import tech.libeufin.sandbox.CryptoUtil
+import tech.libeufin.util.CryptoUtil
 import tech.libeufin.schema.ebics_h004.EbicsRequest
 import tech.libeufin.schema.ebics_h004.EbicsTypes
 import java.math.BigInteger
diff --git a/sandbox/build.gradle b/sandbox/build.gradle
index f96a44a..573671d 100644
--- a/sandbox/build.gradle
+++ b/sandbox/build.gradle
@@ -46,6 +46,8 @@ dependencies {
     testImplementation group: 'junit', name: 'junit', version: '4.12'
     testImplementation 'org.jetbrains.kotlin:kotlin-test-junit:1.3.50'
     testImplementation 'org.jetbrains.kotlin:kotlin-test:1.3.50'
+
+    implementation project(":util")
 }
 
 
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
index 7b899bd..ea4eedd 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
@@ -95,10 +95,6 @@ enum class KeyState {
     RELEASED
 }
 
-fun Blob.toByteArray(): ByteArray {
-    return this.binaryStream.readAllBytes()
-}
-
 /**
  * Any number can become a Amount IF it does NOT need to be rounded to comply 
to the scale == 2.
  */
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
index 46eae7b..00ad119 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsProtocolBackend.kt
@@ -27,16 +27,20 @@ import io.ktor.request.receiveText
 import io.ktor.response.respond
 import io.ktor.response.respondText
 import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
-import org.apache.xml.security.c14n.Canonicalizer
 import org.jetbrains.exposed.sql.and
+import org.jetbrains.exposed.sql.stringParam
 import org.jetbrains.exposed.sql.transactions.transaction
 import org.jetbrains.exposed.sql.upperCase
 import org.w3c.dom.Document
-import tech.libeufin.schema.ebics_h004.*
-import tech.libeufin.schema.ebics_hev.HEVResponse
-import tech.libeufin.schema.ebics_hev.SystemReturnCodeType
-import tech.libeufin.schema.ebics_s001.SignatureTypes
-import tech.libeufin.schema.ebics_s001.UserSignatureData
+import tech.libeufin.util.schema.ebics_h004.*
+import tech.libeufin.util.schema.ebics_hev.HEVResponse
+import tech.libeufin.util.schema.ebics_hev.SystemReturnCodeType
+import tech.libeufin.util.schema.ebics_s001.SignatureTypes
+import tech.libeufin.util.schema.ebics_s001.UserSignatureData
+import tech.libeufin.util.CryptoUtil
+import tech.libeufin.util.EbicsOrderUtil
+import tech.libeufin.util.XMLUtil
+import tech.libeufin.util.*
 import java.security.interfaces.RSAPrivateCrtKey
 import java.util.*
 import java.util.zip.DeflaterInputStream
@@ -59,7 +63,6 @@ private class EbicsInvalidOrderType : EbicsRequestError(
     "091005"
 )
 
-
 private suspend fun ApplicationCall.respondEbicsKeyManagement(
     errorText: String,
     errorCode: String,
@@ -108,6 +111,56 @@ private suspend fun 
ApplicationCall.respondEbicsKeyManagement(
     respondText(text, ContentType.Application.Xml, HttpStatusCode.OK)
 }
 
+private fun ApplicationCall.handleEbicsC52(header: EbicsRequest.Header) {
+
+    val userId = header.static.userID!!
+    val od = header.static.orderDetails ?: throw Exception("Need 
'OrderDetails'")
+    val op = od.orderParams ?: throw Exception("Need 'StandardOrderParams'")
+
+    /**
+     * (StandardOrderParams (DateRange (Start, End)))
+     */
+
+    val subscriber = transaction {
+        EbicsSubscriberEntity.find {
+            stringParam(userId) eq EbicsSubscribersTable.userId // will have 
to match partner and system IDs
+        }
+    }.firstOrNull() ?: throw Exception("Unknown subscriber")
+
+    val history = extractHistoryForEach(
+        subscriber.bankCustomer.id.value,
+        (op as EbicsRequest.StandardOrderParams).dateRange?.start.toString(),
+        op.dateRange?.end.toString()) { println(it) }
+
+    val ret = constructXml(indent = true) {
+        namespace("foo", "bar")
+        root("foo:BkToCstmrAcctRpt") {
+            element("GrpHdr") {
+
+                element("MsgId") {
+                    text("id under group header")
+                }
+                element("CreDtTm") {
+                    text("now")
+                }
+            }
+            element("Rpt") {
+                element("Id") {
+                    text("id under report")
+                }
+                element("Acct") {
+                    text("account identifier")
+                }
+
+            }
+
+
+        }
+    }
+
+    // val str = XMLUtil.convertJaxbToString(ret)
+    // return str.toByteArray()
+}
 
 private suspend fun ApplicationCall.handleEbicsHia(header: 
EbicsUnsecuredRequest.Header, orderData: ByteArray) {
     val plainOrderData = InflaterInputStream(orderData.inputStream()).use {
@@ -444,17 +497,6 @@ fun signEbicsResponseX002(ebicsResponse: EbicsResponse, 
privateKey: RSAPrivateCr
     return signedDoc
 }
 
-
-class EbicsTransactionDetails(
-
-)
-
-
-fun queryEbicsTransactionDetails(ebicsRequest: EbicsRequest): 
EbicsTransactionDetails {
-    throw NotImplementedError()
-}
-
-
 suspend fun ApplicationCall.ebicsweb() {
     val requestDocument = receiveEbicsXml()
 
@@ -471,7 +513,6 @@ suspend fun ApplicationCall.ebicsweb() {
             when (header.static.orderDetails.orderType) {
                 "INI" -> handleEbicsIni(header, orderData)
                 "HIA" -> handleEbicsHia(header, orderData)
-                // "C52" -> handleEbicsC52(header, orderData)
                 else -> throw EbicsInvalidXmlError()
             }
         }
@@ -562,6 +603,7 @@ suspend fun ApplicationCall.ebicsweb() {
                             val response = when (orderType) {
                                 "HTD" -> handleEbicsHtd()
                                 "HKD" -> handleEbicsHkd()
+                                // "C52" -> 
handleEbicsC52(requestObject.header)
                                 else -> throw EbicsInvalidXmlError()
                             }
 
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
index 6a0cc09..f76ca95 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
@@ -38,16 +38,14 @@ import io.ktor.routing.post
 import io.ktor.routing.routing
 import io.ktor.server.engine.embeddedServer
 import io.ktor.server.netty.Netty
-import org.jetbrains.exposed.sql.GreaterEqOp
-import org.jetbrains.exposed.sql.LessEqOp
 import org.jetbrains.exposed.sql.and
-import org.jetbrains.exposed.sql.dateTimeParam
 import org.jetbrains.exposed.sql.transactions.transaction
 import org.joda.time.DateTime
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 import org.slf4j.event.Level
 import org.w3c.dom.Document
+import tech.libeufin.util.CryptoUtil
 import java.lang.ArithmeticException
 import java.math.BigDecimal
 import java.security.interfaces.RSAPublicKey
@@ -163,11 +161,8 @@ fun sampleData() {
                 date = DateTime.now()
                 localCustomer = customerEntity
             }
-
         }
     }
-
-
 }
 
 fun extractHistoryForEach(id: Int, start: String?, end: String?, builder: 
(BankTransactionEntity) -> Any) {
diff --git a/sandbox/src/main/resources/logback.xml 
b/sandbox/src/main/resources/logback.xml
index 3338034..7df7bcc 100644
--- a/sandbox/src/main/resources/logback.xml
+++ b/sandbox/src/main/resources/logback.xml
@@ -13,24 +13,17 @@
         </encoder>
     </appender>
 
-    <appender name="NEXUS-FILE" class="ch.qos.logback.core.FileAppender">
-        <file>/tmp/nexus.log</file>
-        <append>false</append>
-        <encoder>
-            <pattern>%-5relative %-5level %logger{35} - %msg%n</pattern>
-        </encoder>
-    </appender>
-
     <logger name="tech.libeufin.sandbox" level="DEBUG"  additivity="false">
         <appender-ref ref="STDOUT" />
         <appender-ref ref="SANDBOX-FILE" />
     </logger>
 
-    <logger name="tech.libeufin.nexus" level="TRACE"  additivity="false">
+    <logger name="tech.libeufin.util" level="TRACE"  additivity="false">
         <appender-ref ref="STDOUT" />
-        <appender-ref ref="NEXUS-FILE" />
+        <appender-ref ref="SANDBOX-FILE" />
     </logger>
 
+
     <logger name="io.netty" level="WARN" />
     <logger name="ktor" level="WARN" />
     <logger name="Exposed" level="WARN" />
diff --git a/sandbox/src/test/kotlin/CryptoUtilTest.kt 
b/sandbox/src/test/kotlin/CryptoUtilTest.kt
index 229e067..0891c18 100644
--- a/sandbox/src/test/kotlin/CryptoUtilTest.kt
+++ b/sandbox/src/test/kotlin/CryptoUtilTest.kt
@@ -20,6 +20,7 @@
 package tech.libeufin.sandbox
 
 import org.junit.Test
+import tech.libeufin.util.CryptoUtil
 import java.security.KeyPairGenerator
 import java.security.interfaces.RSAPrivateCrtKey
 import javax.crypto.EncryptedPrivateKeyInfo
diff --git a/sandbox/src/test/kotlin/EbicsMessagesTest.kt 
b/sandbox/src/test/kotlin/EbicsMessagesTest.kt
index f3a9325..cbe9a55 100644
--- a/sandbox/src/test/kotlin/EbicsMessagesTest.kt
+++ b/sandbox/src/test/kotlin/EbicsMessagesTest.kt
@@ -4,10 +4,12 @@ import junit.framework.TestCase.assertEquals
 import org.apache.xml.security.binding.xmldsig.SignatureType
 import org.junit.Test
 import org.w3c.dom.Element
-import tech.libeufin.schema.ebics_h004.*
-import tech.libeufin.schema.ebics_hev.HEVResponse
-import tech.libeufin.schema.ebics_hev.SystemReturnCodeType
-import tech.libeufin.schema.ebics_s001.SignatureTypes
+import tech.libeufin.util.schema.ebics_h004.*
+import tech.libeufin.util.schema.ebics_hev.HEVResponse
+import tech.libeufin.util.schema.ebics_hev.SystemReturnCodeType
+import tech.libeufin.util.schema.ebics_s001.SignatureTypes
+import tech.libeufin.util.CryptoUtil
+import tech.libeufin.util.XMLUtil
 import javax.xml.datatype.DatatypeFactory
 import kotlin.test.assertNotNull
 import kotlin.test.assertTrue
diff --git a/sandbox/src/test/kotlin/EbicsOrderUtilTest.kt 
b/sandbox/src/test/kotlin/EbicsOrderUtilTest.kt
index c35794e..9020ad6 100644
--- a/sandbox/src/test/kotlin/EbicsOrderUtilTest.kt
+++ b/sandbox/src/test/kotlin/EbicsOrderUtilTest.kt
@@ -1,6 +1,7 @@
 package tech.libeufin.sandbox
 
 import org.junit.Test
+import tech.libeufin.util.EbicsOrderUtil
 import kotlin.test.assertEquals
 
 
diff --git a/sandbox/src/test/kotlin/LogTest.kt 
b/sandbox/src/test/kotlin/LogTest.kt
index 0316c1d..c8a9479 100644
--- a/sandbox/src/test/kotlin/LogTest.kt
+++ b/sandbox/src/test/kotlin/LogTest.kt
@@ -5,6 +5,8 @@ import org.junit.Test
 import org.junit.Assert.*
 import org.slf4j.LoggerFactory
 import java.net.URLClassLoader
+import tech.libeufin.util.LOGGER as utilLogger
+
 
 class LogTest {
 
@@ -15,5 +17,11 @@ class LogTest {
         loggerSandbox.info("line")
         loggerNexus.trace("other line")
     }
+
+    @Test
+    fun logFromUtil() {
+        /* This log should show up with 'util' name but without this latter 
owning a logback.xml */
+        utilLogger.trace("shown")
+    }
 }
 
diff --git a/sandbox/src/test/kotlin/XmlCombinatorsTest.kt 
b/sandbox/src/test/kotlin/XmlCombinatorsTest.kt
index 1cc509c..f2b2148 100644
--- a/sandbox/src/test/kotlin/XmlCombinatorsTest.kt
+++ b/sandbox/src/test/kotlin/XmlCombinatorsTest.kt
@@ -20,6 +20,7 @@
 package tech.libeufin.sandbox
 
 import org.junit.Test
+import tech.libeufin.util.constructXml
 
 class XmlCombinatorsTest {
 
@@ -36,6 +37,7 @@ class XmlCombinatorsTest {
                         element("g/h/")
                     }
                 }
+                element("one more")
             }
         }
         println(s)
diff --git a/sandbox/src/test/kotlin/XmlUtilTest.kt 
b/sandbox/src/test/kotlin/XmlUtilTest.kt
index 3260661..5367d69 100644
--- a/sandbox/src/test/kotlin/XmlUtilTest.kt
+++ b/sandbox/src/test/kotlin/XmlUtilTest.kt
@@ -4,13 +4,12 @@ import org.apache.xml.security.binding.xmldsig.SignatureType
 import org.junit.Test
 import org.junit.Assert.*
 import org.junit.Ignore
-import org.junit.rules.ExpectedException
-import org.xml.sax.SAXParseException
-import tech.libeufin.schema.ebics_h004.EbicsKeyManagementResponse
-import tech.libeufin.schema.ebics_h004.EbicsResponse
-import tech.libeufin.schema.ebics_h004.EbicsTypes
-import tech.libeufin.schema.ebics_h004.HTDResponseOrderData
-import java.rmi.UnmarshalException
+import tech.libeufin.util.schema.ebics_h004.EbicsKeyManagementResponse
+import tech.libeufin.util.schema.ebics_h004.EbicsResponse
+import tech.libeufin.util.schema.ebics_h004.EbicsTypes
+import tech.libeufin.util.schema.ebics_h004.HTDResponseOrderData
+import tech.libeufin.util.CryptoUtil
+import tech.libeufin.util.XMLUtil
 import java.security.KeyPairGenerator
 import java.util.*
 import javax.xml.transform.stream.StreamSource
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/CryptoUtil.kt 
b/util/src/main/kotlin/CryptoUtil.kt
similarity index 93%
rename from sandbox/src/main/kotlin/tech/libeufin/sandbox/CryptoUtil.kt
rename to util/src/main/kotlin/CryptoUtil.kt
index 00690ce..0d7d86f 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/CryptoUtil.kt
+++ b/util/src/main/kotlin/CryptoUtil.kt
@@ -17,9 +17,11 @@
  * <http://www.gnu.org/licenses/>
  */
 
-package tech.libeufin.sandbox
+package tech.libeufin.util
 
 import org.bouncycastle.jce.provider.BouncyCastleProvider
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
 import java.io.ByteArrayOutputStream
 import java.math.BigInteger
 import java.security.*
@@ -138,7 +140,11 @@ object CryptoUtil {
         val keygen = KeyGenerator.getInstance("AES", bouncyCastleProvider)
         keygen.init(128)
         val transactionKey = keygen.generateKey()
-        return encryptEbicsE002withTransactionKey(data, encryptionPublicKey, 
transactionKey)
+        return encryptEbicsE002withTransactionKey(
+            data,
+            encryptionPublicKey,
+            transactionKey
+        )
     }
 
     /**
@@ -150,27 +156,44 @@ object CryptoUtil {
         transactionKey: SecretKey
     ): EncryptionResult {
 
-        val symmetricCipher = Cipher.getInstance("AES/CBC/X9.23Padding", 
bouncyCastleProvider)
+        val symmetricCipher = Cipher.getInstance("AES/CBC/X9.23Padding",
+            bouncyCastleProvider
+        )
         val ivParameterSpec = IvParameterSpec(ByteArray(16))
         symmetricCipher.init(Cipher.ENCRYPT_MODE, transactionKey, 
ivParameterSpec)
         val encryptedData = symmetricCipher.doFinal(data)
-        val asymmetricCipher = Cipher.getInstance("RSA/None/PKCS1Padding", 
bouncyCastleProvider)
+        val asymmetricCipher = Cipher.getInstance("RSA/None/PKCS1Padding",
+            bouncyCastleProvider
+        )
         asymmetricCipher.init(Cipher.ENCRYPT_MODE, encryptionPublicKey)
         val encryptedTransactionKey = 
asymmetricCipher.doFinal(transactionKey.encoded)
         val pubKeyDigest = getEbicsPublicKeyHash(encryptionPublicKey)
-        return EncryptionResult(encryptedTransactionKey, pubKeyDigest, 
encryptedData, transactionKey)
+        return EncryptionResult(
+            encryptedTransactionKey,
+            pubKeyDigest,
+            encryptedData,
+            transactionKey
+        )
     }
 
     fun decryptEbicsE002(enc: EncryptionResult, privateKey: RSAPrivateCrtKey): 
ByteArray {
-        return decryptEbicsE002(enc.encryptedTransactionKey, 
enc.encryptedData, privateKey)
+        return decryptEbicsE002(
+            enc.encryptedTransactionKey,
+            enc.encryptedData,
+            privateKey
+        )
     }
 
     fun decryptEbicsE002(encryptedTransactionKey: ByteArray, encryptedData: 
ByteArray, privateKey: RSAPrivateCrtKey): ByteArray {
-        val asymmetricCipher = Cipher.getInstance("RSA/None/PKCS1Padding", 
bouncyCastleProvider)
+        val asymmetricCipher = Cipher.getInstance("RSA/None/PKCS1Padding",
+            bouncyCastleProvider
+        )
         asymmetricCipher.init(Cipher.DECRYPT_MODE, privateKey)
         val transactionKeyBytes = 
asymmetricCipher.doFinal(encryptedTransactionKey)
         val secretKeySpec = SecretKeySpec(transactionKeyBytes, "AES")
-        val symmetricCipher = Cipher.getInstance("AES/CBC/X9.23Padding", 
bouncyCastleProvider)
+        val symmetricCipher = Cipher.getInstance("AES/CBC/X9.23Padding",
+            bouncyCastleProvider
+        )
         val ivParameterSpec = IvParameterSpec(ByteArray(16))
         symmetricCipher.init(Cipher.DECRYPT_MODE, secretKeySpec, 
ivParameterSpec)
         LOGGER.debug("decrypting: ${encryptedData.toHexString()}")
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsOrderUtil.kt 
b/util/src/main/kotlin/EbicsOrderUtil.kt
similarity index 98%
rename from sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsOrderUtil.kt
rename to util/src/main/kotlin/EbicsOrderUtil.kt
index 2edfd8e..a271c85 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/EbicsOrderUtil.kt
+++ b/util/src/main/kotlin/EbicsOrderUtil.kt
@@ -17,7 +17,7 @@
  * <http://www.gnu.org/licenses/>
  */
 
-package tech.libeufin.sandbox
+package tech.libeufin.util
 
 import java.lang.IllegalArgumentException
 import java.security.SecureRandom
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/XMLUtil.kt 
b/util/src/main/kotlin/XMLUtil.kt
similarity index 99%
rename from sandbox/src/main/kotlin/tech/libeufin/sandbox/XMLUtil.kt
rename to util/src/main/kotlin/XMLUtil.kt
index 6f49d95..b871108 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/XMLUtil.kt
+++ b/util/src/main/kotlin/XMLUtil.kt
@@ -17,7 +17,7 @@
  * <http://www.gnu.org/licenses/>
  */
 
-package tech.libeufin.sandbox
+package tech.libeufin.util
 
 import com.sun.org.apache.xerces.internal.dom.DOMInputImpl
 import org.w3c.dom.Document
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/XmlCombinators.kt 
b/util/src/main/kotlin/XmlCombinators.kt
similarity index 96%
rename from sandbox/src/main/kotlin/tech/libeufin/sandbox/XmlCombinators.kt
rename to util/src/main/kotlin/XmlCombinators.kt
index 26fc940..1ef44e8 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/XmlCombinators.kt
+++ b/util/src/main/kotlin/XmlCombinators.kt
@@ -1,9 +1,7 @@
-package tech.libeufin.sandbox
+package tech.libeufin.util
 
 import com.sun.xml.txw2.output.IndentingXMLStreamWriter
-import org.jetbrains.exposed.sql.Op
 import java.io.StringWriter
-import java.util.*
 import javax.xml.stream.XMLOutputFactory
 import javax.xml.stream.XMLStreamWriter
 
@@ -23,7 +21,6 @@ class XmlElementBuilder(val w: XMLStreamWriter) {
     }
 
     fun element(path: String, f: XmlElementBuilder.() -> Unit = {}) {
-
         val splitPath = path.trim('/').split("/").toMutableList()
         this.element(splitPath, f)
     }
diff --git a/util/src/main/kotlin/blob.kt b/util/src/main/kotlin/blob.kt
new file mode 100644
index 0000000..cb9250f
--- /dev/null
+++ b/util/src/main/kotlin/blob.kt
@@ -0,0 +1,8 @@
+package tech.libeufin.util
+
+import java.sql.Blob
+
+fun Blob.toByteArray(): ByteArray {
+    return this.binaryStream.readAllBytes()
+}
+
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/hex.kt 
b/util/src/main/kotlin/hex.kt
similarity index 80%
rename from sandbox/src/main/kotlin/tech/libeufin/sandbox/hex.kt
rename to util/src/main/kotlin/hex.kt
index 11b4afb..b14d730 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/hex.kt
+++ b/util/src/main/kotlin/hex.kt
@@ -1,4 +1,4 @@
-package tech.libeufin.sandbox
+package tech.libeufin.util
 
 fun ByteArray.toHexString() : String {
     return this.joinToString("") {
diff --git a/util/src/main/kotlin/logger.kt b/util/src/main/kotlin/logger.kt
new file mode 100644
index 0000000..f42b470
--- /dev/null
+++ b/util/src/main/kotlin/logger.kt
@@ -0,0 +1,6 @@
+package tech.libeufin.util
+
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+
+val LOGGER: Logger = LoggerFactory.getLogger("tech.libeufin.util")
\ No newline at end of file
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsKeyManagementResponse.kt
 b/util/src/main/kotlin/schema/ebics_h004/EbicsKeyManagementResponse.kt
similarity index 98%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsKeyManagementResponse.kt
rename to util/src/main/kotlin/schema/ebics_h004/EbicsKeyManagementResponse.kt
index 7d4ec06..2d49808 100644
--- 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsKeyManagementResponse.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/EbicsKeyManagementResponse.kt
@@ -1,4 +1,4 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import javax.xml.bind.annotation.*
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsNpkdRequest.kt 
b/util/src/main/kotlin/schema/ebics_h004/EbicsNpkdRequest.kt
similarity index 92%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsNpkdRequest.kt
rename to util/src/main/kotlin/schema/ebics_h004/EbicsNpkdRequest.kt
index 34f7ed2..b16c4fc 100644
--- 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsNpkdRequest.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/EbicsNpkdRequest.kt
@@ -1,4 +1,4 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import org.apache.xml.security.binding.xmldsig.SignatureType
 import javax.xml.bind.annotation.*
@@ -112,22 +112,22 @@ class EbicsNpkdRequest {
             return EbicsNpkdRequest().apply {
                 version = "H004"
                 revision = 1
-                header = EbicsNpkdRequest.Header().apply {
+                header = Header().apply {
                     authenticate = true
-                    mutable = EbicsNpkdRequest.EmptyMutableHeader()
-                    static = EbicsNpkdRequest.StaticHeaderType().apply {
+                    mutable = EmptyMutableHeader()
+                    static = StaticHeaderType().apply {
                         hostID = hostId
                         partnerID = partnerId
                         userID = userId
                         securityMedium = "0000"
-                        orderDetails = EbicsNpkdRequest.OrderDetails()
+                        orderDetails = OrderDetails()
                         orderDetails.orderType = "HPB"
                         orderDetails.orderAttribute = "DZHNN"
                         nonce = aNonce
                         timestamp = date
                     }
                 }
-                body = EbicsNpkdRequest.EmptyBody()
+                body = EmptyBody()
                 authSignature = SignatureType()
             }
         }
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt 
b/util/src/main/kotlin/schema/ebics_h004/EbicsRequest.kt
similarity index 91%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt
rename to util/src/main/kotlin/schema/ebics_h004/EbicsRequest.kt
index b733c95..3a1e97a 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/EbicsRequest.kt
@@ -1,9 +1,7 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
-import io.ktor.http.HttpStatusCode
 import org.apache.xml.security.binding.xmldsig.SignatureType
-import tech.libeufin.sandbox.CryptoUtil
-import tech.libeufin.sandbox.toByteArray
+import tech.libeufin.util.CryptoUtil
 import java.math.BigInteger
 import java.security.interfaces.RSAPublicKey
 import javax.xml.bind.annotation.*
@@ -259,7 +257,7 @@ class EbicsRequest {
         @get:XmlElement(name = "Start")
         lateinit var start: XMLGregorianCalendar
 
-        @get:XmlElement(name = "END")
+        @get:XmlElement(name = "End")
         lateinit var end: XMLGregorianCalendar
     }
 
@@ -319,7 +317,7 @@ class EbicsRequest {
             dateEnd: XMLGregorianCalendar
         ): EbicsRequest {
 
-            val tmp = this.createForDownloadInitializationPhase(
+            val tmp = createForDownloadInitializationPhase(
                 userId,
                 partnerId,
                 hostId,
@@ -359,19 +357,19 @@ class EbicsRequest {
                 body = Body()
                 header = Header().apply {
                     authenticate = true
-                    static = EbicsRequest.StaticHeaderType().apply {
+                    static = StaticHeaderType().apply {
                         userID = userId
                         partnerID = partnerId
                         hostID = hostId
                         nonce = nonceArg
                         timestamp = date
                         partnerID = partnerId
-                        orderDetails = EbicsRequest.OrderDetails().apply {
+                        orderDetails = OrderDetails().apply {
                             orderType = aOrderType
                             orderAttribute = "DZHNN"
-                            orderParams = EbicsRequest.StandardOrderParams()
+                            orderParams = StandardOrderParams()
                         }
-                        bankPubKeyDigests = 
EbicsRequest.BankPubKeyDigests().apply {
+                        bankPubKeyDigests = BankPubKeyDigests().apply {
                             authentication = EbicsTypes.PubKeyDigest().apply {
                                 algorithm = 
"http://www.w3.org/2001/04/xmlenc#sha256";
                                 version = "X002"
@@ -384,8 +382,9 @@ class EbicsRequest {
                             }
                             securityMedium = "0000"
                         }
-                        mutable = EbicsRequest.MutableHeader().apply {
-                            transactionPhase = 
EbicsTypes.TransactionPhaseType.INITIALISATION
+                        mutable = MutableHeader().apply {
+                            transactionPhase =
+                                EbicsTypes.TransactionPhaseType.INITIALISATION
                         }
                     }
                 }
@@ -406,22 +405,22 @@ class EbicsRequest {
         ): EbicsRequest {
 
             return EbicsRequest().apply {
-                header = EbicsRequest.Header().apply {
+                header = Header().apply {
                     version = "H004"
                     revision = 1
                     authenticate = true
-                    static = EbicsRequest.StaticHeaderType().apply {
+                    static = StaticHeaderType().apply {
                         hostID = hostId
                         nonce = nonceArg
                         timestamp = date
                         partnerID = partnerId
                         userID = userId
-                        orderDetails = EbicsRequest.OrderDetails().apply {
+                        orderDetails = OrderDetails().apply {
                             orderType = aOrderType
                             orderAttribute = "OZHNN"
-                            orderParams = EbicsRequest.StandardOrderParams()
+                            orderParams = StandardOrderParams()
                         }
-                        bankPubKeyDigests = 
EbicsRequest.BankPubKeyDigests().apply {
+                        bankPubKeyDigests = BankPubKeyDigests().apply {
                             authentication = EbicsTypes.PubKeyDigest().apply {
                                 algorithm = 
"http://www.w3.org/2001/04/xmlenc#sha256";
                                 version = "X002"
@@ -436,14 +435,15 @@ class EbicsRequest {
                         securityMedium = "0000"
                         numSegments = segmentsNumber
                     }
-                    mutable = EbicsRequest.MutableHeader().apply {
-                        transactionPhase = 
EbicsTypes.TransactionPhaseType.INITIALISATION
+                    mutable = MutableHeader().apply {
+                        transactionPhase =
+                            EbicsTypes.TransactionPhaseType.INITIALISATION
                     }
                 }
                 authSignature = SignatureType()
-                body = EbicsRequest.Body().apply {
-                    dataTransfer = EbicsRequest.DataTransfer().apply {
-                        signatureData = EbicsRequest.SignatureData().apply {
+                body = Body().apply {
+                    dataTransfer = DataTransfer().apply {
+                        signatureData = SignatureData().apply {
                             authenticate = true
                             value = cryptoBundle.encryptedData
                         }
@@ -490,8 +490,8 @@ class EbicsRequest {
                 }
 
                 authSignature = SignatureType()
-                body = EbicsRequest.Body().apply {
-                    dataTransfer = EbicsRequest.DataTransfer().apply {
+                body = Body().apply {
+                    dataTransfer = DataTransfer().apply {
                         orderData = encryptedData
                     }
                 }
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt 
b/util/src/main/kotlin/schema/ebics_h004/EbicsResponse.kt
similarity index 81%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt
rename to util/src/main/kotlin/schema/ebics_h004/EbicsResponse.kt
index 4ba6949..bca7937 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/EbicsResponse.kt
@@ -1,14 +1,12 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import org.apache.xml.security.binding.xmldsig.SignatureType
-import tech.libeufin.sandbox.CryptoUtil
+import tech.libeufin.util.CryptoUtil
 import java.math.BigInteger
 import javax.xml.bind.annotation.*
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
-import javax.xml.bind.annotation.adapters.HexBinaryAdapter
 import javax.xml.bind.annotation.adapters.NormalizedStringAdapter
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
-import javax.xml.namespace.QName
 
 @XmlAccessorType(XmlAccessType.NONE)
 @XmlType(name = "", propOrder = ["header", "authSignature", "body"])
@@ -129,21 +127,22 @@ class EbicsResponse {
             return EbicsResponse().apply {
                 this.version = "H004"
                 this.revision = 1
-                this.header = EbicsResponse.Header().apply {
+                this.header = Header().apply {
                     this.authenticate = true
-                    this._static = EbicsResponse.StaticHeaderType().apply {
+                    this._static = StaticHeaderType().apply {
                         this.transactionID = transactionID
                     }
-                    this.mutable = EbicsResponse.MutableHeaderType().apply {
-                        this.transactionPhase = 
EbicsTypes.TransactionPhaseType.INITIALISATION
+                    this.mutable = MutableHeaderType().apply {
+                        this.transactionPhase =
+                            EbicsTypes.TransactionPhaseType.INITIALISATION
                         this.orderID = orderID
                         this.reportText = "[EBICS_OK] OK"
                         this.returnCode = "000000"
                     }
                 }
                 this.authSignature = SignatureType()
-                this.body = EbicsResponse.Body().apply {
-                    this.returnCode = EbicsResponse.ReturnCode().apply {
+                this.body = Body().apply {
+                    this.returnCode = ReturnCode().apply {
                         this.authenticate = true
                         this.value = "000000"
                     }
@@ -156,13 +155,14 @@ class EbicsResponse {
             return EbicsResponse().apply {
                 this.version = "H004"
                 this.revision = 1
-                this.header = EbicsResponse.Header().apply {
+                this.header = Header().apply {
                     this.authenticate = true
-                    this._static = EbicsResponse.StaticHeaderType().apply {
+                    this._static = StaticHeaderType().apply {
                         this.transactionID = transactionID
                     }
-                    this.mutable = EbicsResponse.MutableHeaderType().apply {
-                        this.transactionPhase = 
EbicsTypes.TransactionPhaseType.RECEIPT
+                    this.mutable = MutableHeaderType().apply {
+                        this.transactionPhase =
+                            EbicsTypes.TransactionPhaseType.RECEIPT
                         if (positiveAck) {
                             this.reportText = 
"[EBICS_DOWNLOAD_POSTPROCESS_DONE] Received positive receipt"
                             this.returnCode = "011000"
@@ -173,8 +173,8 @@ class EbicsResponse {
                     }
                 }
                 this.authSignature = SignatureType()
-                this.body = EbicsResponse.Body().apply {
-                    this.returnCode = EbicsResponse.ReturnCode().apply {
+                this.body = Body().apply {
+                    this.returnCode = ReturnCode().apply {
                         this.authenticate = true
                         this.value = "000000"
                     }
@@ -192,13 +192,14 @@ class EbicsResponse {
             return EbicsResponse().apply {
                 this.version = "H004"
                 this.revision = 1
-                this.header = EbicsResponse.Header().apply {
+                this.header = Header().apply {
                     this.authenticate = true
-                    this._static = EbicsResponse.StaticHeaderType().apply {
+                    this._static = StaticHeaderType().apply {
                         this.transactionID = transactionID
                     }
-                    this.mutable = EbicsResponse.MutableHeaderType().apply {
-                        this.transactionPhase = 
EbicsTypes.TransactionPhaseType.TRANSFER
+                    this.mutable = MutableHeaderType().apply {
+                        this.transactionPhase =
+                            EbicsTypes.TransactionPhaseType.TRANSFER
                         this.segmentNumber = EbicsTypes.SegmentNumber().apply {
                             this.value = 
BigInteger.valueOf(segmentNumber.toLong())
                             if (lastSegment) {
@@ -211,8 +212,8 @@ class EbicsResponse {
                     }
                 }
                 this.authSignature = SignatureType()
-                this.body = EbicsResponse.Body().apply {
-                    this.returnCode = EbicsResponse.ReturnCode().apply {
+                this.body = Body().apply {
+                    this.returnCode = ReturnCode().apply {
                         this.authenticate = true
                         this.value = "000000"
                     }
@@ -230,14 +231,15 @@ class EbicsResponse {
             return EbicsResponse().apply {
                 this.version = "H004"
                 this.revision = 1
-                this.header = EbicsResponse.Header().apply {
+                this.header = Header().apply {
                     this.authenticate = true
-                    this._static = EbicsResponse.StaticHeaderType().apply {
+                    this._static = StaticHeaderType().apply {
                         this.transactionID = transactionID
                         this.numSegments = 
BigInteger.valueOf(numSegments.toLong())
                     }
-                    this.mutable = EbicsResponse.MutableHeaderType().apply {
-                        this.transactionPhase = 
EbicsTypes.TransactionPhaseType.INITIALISATION
+                    this.mutable = MutableHeaderType().apply {
+                        this.transactionPhase =
+                            EbicsTypes.TransactionPhaseType.INITIALISATION
                         this.segmentNumber = EbicsTypes.SegmentNumber().apply {
                             this.lastSegment = (numSegments == 1)
                             this.value = BigInteger.valueOf(1)
@@ -247,22 +249,23 @@ class EbicsResponse {
                     }
                 }
                 this.authSignature = SignatureType()
-                this.body = EbicsResponse.Body().apply {
-                    this.returnCode = EbicsResponse.ReturnCode().apply {
+                this.body = Body().apply {
+                    this.returnCode = ReturnCode().apply {
                         this.authenticate = true
                         this.value = "000000"
                     }
-                    this.dataTransfer = 
EbicsResponse.DataTransferResponseType().apply {
+                    this.dataTransfer = DataTransferResponseType().apply {
                         this.dataEncryptionInfo = 
EbicsTypes.DataEncryptionInfo().apply {
                             this.authenticate = true
-                            this.encryptionPubKeyDigest = 
EbicsTypes.PubKeyDigest().apply {
+                            this.encryptionPubKeyDigest = 
EbicsTypes.PubKeyDigest()
+                                .apply {
                                 this.algorithm = 
"http://www.w3.org/2001/04/xmlenc#sha256";
                                 this.version = "E002"
                                 this.value = enc.pubKeyDigest
                             }
                             this.transactionKey = enc.encryptedTransactionKey
                         }
-                        this.orderData = EbicsResponse.OrderData().apply {
+                        this.orderData = OrderData().apply {
                             this.value = encodedData.substring(0, 
Math.min(segmentSize, encodedData.length))
                         }
                     }
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt 
b/util/src/main/kotlin/schema/ebics_h004/EbicsTypes.kt
similarity index 97%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt
rename to util/src/main/kotlin/schema/ebics_h004/EbicsTypes.kt
index 092ded5..c6bd88c 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/EbicsTypes.kt
@@ -17,7 +17,7 @@
  * <http://www.gnu.org/licenses/>
  */
 
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
 import org.w3c.dom.Element
@@ -241,7 +241,7 @@ object EbicsTypes {
         lateinit var orderType: String
 
         @get:XmlElement(name = "FileFormat")
-        val fileFormat: EbicsTypes.FileFormatType? = null
+        val fileFormat: FileFormatType? = null
 
         @get:XmlElement(name = "TransferType")
         lateinit var transferType: String
@@ -288,7 +288,7 @@ object EbicsTypes {
         var orderTypes: String? = null
 
         @get:XmlElement(name = "FileFormat")
-        val fileFormat: EbicsTypes.FileFormatType? = null
+        val fileFormat: FileFormatType? = null
 
         @get:XmlElement(name = "AccountID")
         val accountID: String? = null
@@ -325,8 +325,8 @@ object EbicsTypes {
         @get:XmlElement(name = "HostID")
         lateinit var hostID: String
 
-        @get:XmlElement(type = EbicsTypes.Parameter::class)
-        var parameters: List<EbicsTypes.Parameter>? = null
+        @get:XmlElement(type = Parameter::class)
+        var parameters: List<Parameter>? = null
     }
 
     @XmlAccessorType(XmlAccessType.NONE)
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsUnsecuredRequest.kt
 b/util/src/main/kotlin/schema/ebics_h004/EbicsUnsecuredRequest.kt
similarity index 86%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsUnsecuredRequest.kt
rename to util/src/main/kotlin/schema/ebics_h004/EbicsUnsecuredRequest.kt
index 373bc8b..83cb0e2 100644
--- 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsUnsecuredRequest.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/EbicsUnsecuredRequest.kt
@@ -1,8 +1,8 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
-import tech.libeufin.sandbox.EbicsOrderUtil
-import tech.libeufin.schema.ebics_s001.SignatureTypes
+import tech.libeufin.util.EbicsOrderUtil
+import tech.libeufin.util.schema.ebics_s001.SignatureTypes
 import java.security.interfaces.RSAPrivateCrtKey
 import javax.xml.bind.annotation.*
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
@@ -122,10 +122,10 @@ class EbicsUnsecuredRequest {
 
                 version = "H004"
                 revision = 1
-                header = EbicsUnsecuredRequest.Header().apply {
+                header = Header().apply {
                     authenticate = true
-                    static = EbicsUnsecuredRequest.StaticHeaderType().apply {
-                        orderDetails = 
EbicsUnsecuredRequest.OrderDetails().apply {
+                    static = StaticHeaderType().apply {
+                        orderDetails = OrderDetails().apply {
                             orderAttribute = "DZNNN"
                             orderType = "HIA"
                             securityMedium = "0000"
@@ -134,14 +134,15 @@ class EbicsUnsecuredRequest {
                             partnerID = partnerId
                         }
                     }
-                    mutable = EbicsUnsecuredRequest.Header.EmptyMutableHeader()
+                    mutable = Header.EmptyMutableHeader()
                 }
-                body = EbicsUnsecuredRequest.Body().apply {
-                    dataTransfer = 
EbicsUnsecuredRequest.UnsecuredDataTransfer().apply {
-                        orderData = EbicsUnsecuredRequest.OrderData().apply {
+                body = Body().apply {
+                    dataTransfer = UnsecuredDataTransfer().apply {
+                        orderData = OrderData().apply {
                             value = EbicsOrderUtil.encodeOrderDataXml(
                                 HIARequestOrderData().apply {
-                                    authenticationPubKeyInfo = 
EbicsTypes.AuthenticationPubKeyInfoType().apply {
+                                    authenticationPubKeyInfo = 
EbicsTypes.AuthenticationPubKeyInfoType()
+                                        .apply {
                                         pubKeyValue = 
EbicsTypes.PubKeyValueType().apply {
                                             rsaKeyValue = 
RSAKeyValueType().apply {
                                                 exponent = 
authKey.publicExponent.toByteArray()
@@ -150,7 +151,8 @@ class EbicsUnsecuredRequest {
                                         }
                                         authenticationVersion = "X002"
                                     }
-                                    encryptionPubKeyInfo = 
EbicsTypes.EncryptionPubKeyInfoType().apply {
+                                    encryptionPubKeyInfo = 
EbicsTypes.EncryptionPubKeyInfoType()
+                                        .apply {
                                         pubKeyValue = 
EbicsTypes.PubKeyValueType().apply {
                                             rsaKeyValue = 
RSAKeyValueType().apply {
                                                 exponent = 
encKey.publicExponent.toByteArray()
@@ -180,10 +182,10 @@ class EbicsUnsecuredRequest {
             return EbicsUnsecuredRequest().apply {
                 version = "H004"
                 revision = 1
-                header = EbicsUnsecuredRequest.Header().apply {
+                header = Header().apply {
                     authenticate = true
-                    static = EbicsUnsecuredRequest.StaticHeaderType().apply {
-                        orderDetails = 
EbicsUnsecuredRequest.OrderDetails().apply {
+                    static = StaticHeaderType().apply {
+                        orderDetails = OrderDetails().apply {
                             orderAttribute = "DZNNN"
                             orderType = "INI"
                             securityMedium = "0000"
@@ -192,11 +194,11 @@ class EbicsUnsecuredRequest {
                             partnerID = partnerId
                         }
                     }
-                    mutable = EbicsUnsecuredRequest.Header.EmptyMutableHeader()
+                    mutable = Header.EmptyMutableHeader()
                 }
                 body = Body().apply {
-                    dataTransfer = 
EbicsUnsecuredRequest.UnsecuredDataTransfer().apply {
-                        orderData = EbicsUnsecuredRequest.OrderData().apply {
+                    dataTransfer = UnsecuredDataTransfer().apply {
+                        orderData = OrderData().apply {
                             value = EbicsOrderUtil.encodeOrderDataXml(
                                 
SignatureTypes.SignaturePubKeyOrderData().apply {
                                     signaturePubKeyInfo = 
SignatureTypes.SignaturePubKeyInfoType().apply {
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HIARequestOrderData.kt
 b/util/src/main/kotlin/schema/ebics_h004/HIARequestOrderData.kt
similarity index 96%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HIARequestOrderData.kt
rename to util/src/main/kotlin/schema/ebics_h004/HIARequestOrderData.kt
index 1164825..5457f21 100644
--- 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HIARequestOrderData.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/HIARequestOrderData.kt
@@ -1,4 +1,4 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import javax.xml.bind.annotation.*
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HKDResponseOrderData.kt
 b/util/src/main/kotlin/schema/ebics_h004/HKDResponseOrderData.kt
similarity index 91%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HKDResponseOrderData.kt
rename to util/src/main/kotlin/schema/ebics_h004/HKDResponseOrderData.kt
index 1eb161d..a141dde 100644
--- 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HKDResponseOrderData.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/HKDResponseOrderData.kt
@@ -1,4 +1,4 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import java.security.Permission
 import javax.xml.bind.annotation.*
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HPBResponseOrderData.kt
 b/util/src/main/kotlin/schema/ebics_h004/HPBResponseOrderData.kt
similarity index 94%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HPBResponseOrderData.kt
rename to util/src/main/kotlin/schema/ebics_h004/HPBResponseOrderData.kt
index 9efe51b..2dfaed8 100644
--- 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HPBResponseOrderData.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/HPBResponseOrderData.kt
@@ -1,4 +1,4 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import javax.xml.bind.annotation.*
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HTDResponseOrderData.kt
 b/util/src/main/kotlin/schema/ebics_h004/HTDResponseOrderData.kt
similarity index 91%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HTDResponseOrderData.kt
rename to util/src/main/kotlin/schema/ebics_h004/HTDResponseOrderData.kt
index 9031e58..afbbc50 100644
--- 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HTDResponseOrderData.kt
+++ b/util/src/main/kotlin/schema/ebics_h004/HTDResponseOrderData.kt
@@ -1,4 +1,4 @@
-package tech.libeufin.schema.ebics_h004
+package tech.libeufin.util.schema.ebics_h004
 
 import java.security.Permission
 import javax.xml.bind.annotation.*
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/package-info.java 
b/util/src/main/kotlin/schema/ebics_h004/package-info.java
similarity index 76%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/package-info.java
rename to util/src/main/kotlin/schema/ebics_h004/package-info.java
index 4dc9c42..0b54c66 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/package-info.java
+++ b/util/src/main/kotlin/schema/ebics_h004/package-info.java
@@ -7,7 +7,7 @@
         namespace = "urn:org:ebics:H004",
         elementFormDefault = XmlNsForm.QUALIFIED
 )
-package tech.libeufin.schema.ebics_h004;
+package schema.ebics_h004;
 
 import javax.xml.bind.annotation.XmlNsForm;
 import javax.xml.bind.annotation.XmlSchema;
\ No newline at end of file
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_hev/EbicsMessages.kt 
b/util/src/main/kotlin/schema/ebics_hev/EbicsMessages.kt
similarity index 98%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_hev/EbicsMessages.kt
rename to util/src/main/kotlin/schema/ebics_hev/EbicsMessages.kt
index d0939d5..527f314 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_hev/EbicsMessages.kt
+++ b/util/src/main/kotlin/schema/ebics_hev/EbicsMessages.kt
@@ -17,7 +17,7 @@
  * <http://www.gnu.org/licenses/>
  */
 
-package tech.libeufin.schema.ebics_hev
+package tech.libeufin.util.schema.ebics_hev
 
 import javax.xml.bind.annotation.*
 import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_hev/package-info.java 
b/util/src/main/kotlin/schema/ebics_hev/package-info.java
similarity index 88%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_hev/package-info.java
rename to util/src/main/kotlin/schema/ebics_hev/package-info.java
index ca84376..ada407c 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_hev/package-info.java
+++ b/util/src/main/kotlin/schema/ebics_hev/package-info.java
@@ -7,7 +7,7 @@
         namespace = "http://www.ebics.org/H000";,
         elementFormDefault = XmlNsForm.QUALIFIED
 )
-package tech.libeufin.schema.ebics_hev;
+package schema.ebics_hev;
 
 import javax.xml.bind.annotation.XmlNsForm;
 import javax.xml.bind.annotation.XmlSchema;
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/SignatureTypes.kt 
b/util/src/main/kotlin/schema/ebics_s001/SignatureTypes.kt
similarity index 98%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/SignatureTypes.kt
rename to util/src/main/kotlin/schema/ebics_s001/SignatureTypes.kt
index 4841dfb..0d0c84d 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/SignatureTypes.kt
+++ b/util/src/main/kotlin/schema/ebics_s001/SignatureTypes.kt
@@ -17,7 +17,7 @@
  * <http://www.gnu.org/licenses/>
  */
 
-package tech.libeufin.schema.ebics_s001
+package tech.libeufin.util.schema.ebics_s001
 
 import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
 import org.apache.xml.security.binding.xmldsig.X509DataType
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/UserSignatureData.kt 
b/util/src/main/kotlin/schema/ebics_s001/UserSignatureData.kt
similarity index 94%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/UserSignatureData.kt
rename to util/src/main/kotlin/schema/ebics_s001/UserSignatureData.kt
index 193979e..4575af8 100644
--- 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/UserSignatureData.kt
+++ b/util/src/main/kotlin/schema/ebics_s001/UserSignatureData.kt
@@ -1,4 +1,4 @@
-package tech.libeufin.schema.ebics_s001
+package tech.libeufin.util.schema.ebics_s001
 
 import javax.xml.bind.annotation.*
 
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/package-info.java 
b/util/src/main/kotlin/schema/ebics_s001/package-info.java
similarity index 76%
rename from 
sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/package-info.java
rename to util/src/main/kotlin/schema/ebics_s001/package-info.java
index 224ea72..6c5f18b 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_s001/package-info.java
+++ b/util/src/main/kotlin/schema/ebics_s001/package-info.java
@@ -7,7 +7,7 @@
         namespace = "http://www.ebics.org/S001";,
         elementFormDefault = XmlNsForm.QUALIFIED
 )
-package tech.libeufin.schema.ebics_s001;
+package schema.ebics_s001;
 
 import javax.xml.bind.annotation.XmlNsForm;
 import javax.xml.bind.annotation.XmlSchema;
\ No newline at end of file

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



reply via email to

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