gnunet-svn
[Top][All Lists]
Advanced

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

[libeufin] branch master updated: model ebics request and test


From: gnunet
Subject: [libeufin] branch master updated: model ebics request and test
Date: Wed, 06 Nov 2019 11:32:13 +0100

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

dold pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new 549d892  model ebics request and test
549d892 is described below

commit 549d892d5a65bfc87a2062c05ebe1f00468b8acd
Author: Florian Dold <address@hidden>
AuthorDate: Wed Nov 6 11:32:03 2019 +0100

    model ebics request and test
---
 .idea/codeStyles/Project.xml                       | 182 +++++++++++++++++++++
 .../src/main/kotlin/tech/libeufin/sandbox/Main.kt  |   2 +-
 .../libeufin/schema/ebics_h004/EbicsRequest.kt     |  78 ++++++++-
 .../libeufin/schema/ebics_h004/EbicsResponse.kt    |  14 +-
 .../tech/libeufin/schema/ebics_h004/EbicsTypes.kt  |  38 ++---
 sandbox/src/test/kotlin/EbicsMessagesTest.kt       |  57 +++++++
 6 files changed, 334 insertions(+), 37 deletions(-)

diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 1bec35e..d61ce4e 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -5,6 +5,188 @@
     </JetCodeStyleSettings>
     <codeStyleSettings language="kotlin">
       <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+      <option name="WRAP_ON_TYPING" value="1" />
+      <option name="arrangementSettings" />
+      <option name="forceArrangeMenuAvailable" value="false" />
+      <option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
+      <option name="RIGHT_MARGIN" value="-1" />
+      <option name="LINE_COMMENT_AT_FIRST_COLUMN" value="true" />
+      <option name="BLOCK_COMMENT_AT_FIRST_COLUMN" value="true" />
+      <option name="LINE_COMMENT_ADD_SPACE" value="false" />
+      <option name="KEEP_LINE_BREAKS" value="true" />
+      <option name="KEEP_FIRST_COLUMN_COMMENT" value="true" />
+      <option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="true" />
+      <option name="KEEP_BLANK_LINES_IN_DECLARATIONS" value="2" />
+      <option name="KEEP_BLANK_LINES_IN_CODE" value="2" />
+      <option name="KEEP_BLANK_LINES_BETWEEN_PACKAGE_DECLARATION_AND_HEADER" 
value="2" />
+      <option name="KEEP_BLANK_LINES_BEFORE_RBRACE" value="2" />
+      <option name="BLANK_LINES_BEFORE_PACKAGE" value="0" />
+      <option name="BLANK_LINES_AFTER_PACKAGE" value="1" />
+      <option name="BLANK_LINES_BEFORE_IMPORTS" value="1" />
+      <option name="BLANK_LINES_AFTER_IMPORTS" value="1" />
+      <option name="BLANK_LINES_AROUND_CLASS" value="1" />
+      <option name="BLANK_LINES_AROUND_FIELD" value="0" />
+      <option name="BLANK_LINES_AROUND_METHOD" value="1" />
+      <option name="BLANK_LINES_BEFORE_METHOD_BODY" value="0" />
+      <option name="BLANK_LINES_AROUND_FIELD_IN_INTERFACE" value="0" />
+      <option name="BLANK_LINES_AROUND_METHOD_IN_INTERFACE" value="1" />
+      <option name="BLANK_LINES_AFTER_CLASS_HEADER" value="0" />
+      <option name="BLANK_LINES_AFTER_ANONYMOUS_CLASS_HEADER" value="0" />
+      <option name="BLANK_LINES_BEFORE_CLASS_END" value="0" />
+      <option name="BRACE_STYLE" value="1" />
+      <option name="CLASS_BRACE_STYLE" value="1" />
+      <option name="METHOD_BRACE_STYLE" value="1" />
+      <option name="LAMBDA_BRACE_STYLE" value="1" />
+      <option name="USE_FLYING_GEESE_BRACES" value="false" />
+      <option name="DO_NOT_INDENT_TOP_LEVEL_CLASS_MEMBERS" value="false" />
+      <option name="ELSE_ON_NEW_LINE" value="false" />
+      <option name="WHILE_ON_NEW_LINE" value="false" />
+      <option name="CATCH_ON_NEW_LINE" value="false" />
+      <option name="FINALLY_ON_NEW_LINE" value="false" />
+      <option name="INDENT_CASE_FROM_SWITCH" value="true" />
+      <option name="CASE_STATEMENT_ON_NEW_LINE" value="true" />
+      <option name="INDENT_BREAK_FROM_CASE" value="true" />
+      <option name="SPECIAL_ELSE_IF_TREATMENT" value="true" />
+      <option name="ALIGN_MULTILINE_CHAINED_METHODS" value="false" />
+      <option name="ALIGN_MULTILINE_PARAMETERS" value="true" />
+      <option name="ALIGN_MULTILINE_PARAMETERS_IN_CALLS" value="false" />
+      <option name="ALIGN_MULTILINE_RESOURCES" value="true" />
+      <option name="ALIGN_MULTILINE_FOR" value="true" />
+      <option name="INDENT_WHEN_CASES" value="true" />
+      <option name="ALIGN_MULTILINE_BINARY_OPERATION" value="false" />
+      <option name="ALIGN_MULTILINE_ASSIGNMENT" value="false" />
+      <option name="ALIGN_MULTILINE_TERNARY_OPERATION" value="false" />
+      <option name="ALIGN_MULTILINE_THROWS_LIST" value="false" />
+      <option name="ALIGN_THROWS_KEYWORD" value="false" />
+      <option name="ALIGN_MULTILINE_EXTENDS_LIST" value="false" />
+      <option name="ALIGN_MULTILINE_METHOD_BRACKETS" value="false" />
+      <option name="ALIGN_MULTILINE_PARENTHESIZED_EXPRESSION" value="false" />
+      <option name="ALIGN_MULTILINE_ARRAY_INITIALIZER_EXPRESSION" 
value="false" />
+      <option name="ALIGN_GROUP_FIELD_DECLARATIONS" value="false" />
+      <option name="ALIGN_CONSECUTIVE_VARIABLE_DECLARATIONS" value="false" />
+      <option name="ALIGN_CONSECUTIVE_ASSIGNMENTS" value="false" />
+      <option name="ALIGN_SUBSEQUENT_SIMPLE_METHODS" value="false" />
+      <option name="SPACE_AROUND_ASSIGNMENT_OPERATORS" value="true" />
+      <option name="SPACE_AROUND_LOGICAL_OPERATORS" value="true" />
+      <option name="SPACE_AROUND_EQUALITY_OPERATORS" value="true" />
+      <option name="SPACE_AROUND_RELATIONAL_OPERATORS" value="true" />
+      <option name="SPACE_AROUND_BITWISE_OPERATORS" value="true" />
+      <option name="SPACE_AROUND_ADDITIVE_OPERATORS" value="true" />
+      <option name="SPACE_AROUND_MULTIPLICATIVE_OPERATORS" value="true" />
+      <option name="SPACE_AROUND_SHIFT_OPERATORS" value="true" />
+      <option name="SPACE_AROUND_UNARY_OPERATOR" value="false" />
+      <option name="SPACE_AROUND_LAMBDA_ARROW" value="true" />
+      <option name="SPACE_AROUND_METHOD_REF_DBL_COLON" value="false" />
+      <option name="SPACE_AFTER_COMMA" value="true" />
+      <option name="SPACE_AFTER_COMMA_IN_TYPE_ARGUMENTS" value="true" />
+      <option name="SPACE_BEFORE_COMMA" value="false" />
+      <option name="SPACE_AFTER_SEMICOLON" value="true" />
+      <option name="SPACE_BEFORE_SEMICOLON" value="false" />
+      <option name="SPACE_WITHIN_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_METHOD_CALL_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_EMPTY_METHOD_CALL_PARENTHESES" value="false" 
/>
+      <option name="SPACE_WITHIN_METHOD_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_EMPTY_METHOD_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_IF_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_WHILE_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_FOR_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_TRY_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_CATCH_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_SWITCH_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_SYNCHRONIZED_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_CAST_PARENTHESES" value="false" />
+      <option name="SPACE_WITHIN_BRACKETS" value="false" />
+      <option name="SPACE_WITHIN_BRACES" value="false" />
+      <option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="false" />
+      <option name="SPACE_WITHIN_EMPTY_ARRAY_INITIALIZER_BRACES" value="false" 
/>
+      <option name="SPACE_AFTER_TYPE_CAST" value="true" />
+      <option name="SPACE_BEFORE_METHOD_CALL_PARENTHESES" value="false" />
+      <option name="SPACE_BEFORE_METHOD_PARENTHESES" value="false" />
+      <option name="SPACE_BEFORE_IF_PARENTHESES" value="true" />
+      <option name="SPACE_BEFORE_WHILE_PARENTHESES" value="true" />
+      <option name="SPACE_BEFORE_FOR_PARENTHESES" value="true" />
+      <option name="SPACE_BEFORE_TRY_PARENTHESES" value="true" />
+      <option name="SPACE_BEFORE_CATCH_PARENTHESES" value="true" />
+      <option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="true" />
+      <option name="SPACE_BEFORE_SYNCHRONIZED_PARENTHESES" value="true" />
+      <option name="SPACE_BEFORE_CLASS_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_METHOD_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_IF_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_ELSE_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_WHILE_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_FOR_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_DO_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_SWITCH_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_TRY_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_CATCH_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_FINALLY_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_SYNCHRONIZED_LBRACE" value="true" />
+      <option name="SPACE_BEFORE_ARRAY_INITIALIZER_LBRACE" value="false" />
+      <option name="SPACE_BEFORE_ANNOTATION_ARRAY_INITIALIZER_LBRACE" 
value="false" />
+      <option name="SPACE_BEFORE_ELSE_KEYWORD" value="true" />
+      <option name="SPACE_BEFORE_WHILE_KEYWORD" value="true" />
+      <option name="SPACE_BEFORE_CATCH_KEYWORD" value="true" />
+      <option name="SPACE_BEFORE_FINALLY_KEYWORD" value="true" />
+      <option name="SPACE_BEFORE_QUEST" value="true" />
+      <option name="SPACE_AFTER_QUEST" value="true" />
+      <option name="SPACE_BEFORE_COLON" value="true" />
+      <option name="SPACE_AFTER_COLON" value="true" />
+      <option name="SPACE_BEFORE_TYPE_PARAMETER_LIST" value="false" />
+      <option name="CALL_PARAMETERS_WRAP" value="5" />
+      <option name="PREFER_PARAMETERS_WRAP" value="false" />
+      <option name="CALL_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
+      <option name="CALL_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
+      <option name="METHOD_PARAMETERS_WRAP" value="5" />
+      <option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
+      <option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
+      <option name="RESOURCE_LIST_WRAP" value="0" />
+      <option name="RESOURCE_LIST_LPAREN_ON_NEXT_LINE" value="false" />
+      <option name="RESOURCE_LIST_RPAREN_ON_NEXT_LINE" value="false" />
+      <option name="EXTENDS_LIST_WRAP" value="1" />
+      <option name="THROWS_LIST_WRAP" value="0" />
+      <option name="EXTENDS_KEYWORD_WRAP" value="0" />
+      <option name="THROWS_KEYWORD_WRAP" value="0" />
+      <option name="METHOD_CALL_CHAIN_WRAP" value="1" />
+      <option name="WRAP_FIRST_METHOD_IN_CALL_CHAIN" value="false" />
+      <option name="PARENTHESES_EXPRESSION_LPAREN_WRAP" value="false" />
+      <option name="PARENTHESES_EXPRESSION_RPAREN_WRAP" value="false" />
+      <option name="BINARY_OPERATION_WRAP" value="0" />
+      <option name="BINARY_OPERATION_SIGN_ON_NEXT_LINE" value="false" />
+      <option name="TERNARY_OPERATION_WRAP" value="0" />
+      <option name="TERNARY_OPERATION_SIGNS_ON_NEXT_LINE" value="false" />
+      <option name="MODIFIER_LIST_WRAP" value="false" />
+      <option name="KEEP_SIMPLE_BLOCKS_IN_ONE_LINE" value="false" />
+      <option name="KEEP_SIMPLE_METHODS_IN_ONE_LINE" value="false" />
+      <option name="KEEP_SIMPLE_LAMBDAS_IN_ONE_LINE" value="false" />
+      <option name="KEEP_SIMPLE_CLASSES_IN_ONE_LINE" value="false" />
+      <option name="KEEP_MULTIPLE_EXPRESSIONS_IN_ONE_LINE" value="false" />
+      <option name="FOR_STATEMENT_WRAP" value="0" />
+      <option name="FOR_STATEMENT_LPAREN_ON_NEXT_LINE" value="false" />
+      <option name="FOR_STATEMENT_RPAREN_ON_NEXT_LINE" value="false" />
+      <option name="ARRAY_INITIALIZER_WRAP" value="0" />
+      <option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="false" />
+      <option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="false" />
+      <option name="ASSIGNMENT_WRAP" value="1" />
+      <option name="PLACE_ASSIGNMENT_SIGN_ON_NEXT_LINE" value="false" />
+      <option name="LABELED_STATEMENT_WRAP" value="2" />
+      <option name="WRAP_COMMENTS" value="false" />
+      <option name="ASSERT_STATEMENT_WRAP" value="0" />
+      <option name="ASSERT_STATEMENT_COLON_ON_NEXT_LINE" value="false" />
+      <option name="IF_BRACE_FORCE" value="0" />
+      <option name="DOWHILE_BRACE_FORCE" value="0" />
+      <option name="WHILE_BRACE_FORCE" value="0" />
+      <option name="FOR_BRACE_FORCE" value="0" />
+      <option name="WRAP_LONG_LINES" value="false" />
+      <option name="METHOD_ANNOTATION_WRAP" value="2" />
+      <option name="CLASS_ANNOTATION_WRAP" value="2" />
+      <option name="FIELD_ANNOTATION_WRAP" value="2" />
+      <option name="PARAMETER_ANNOTATION_WRAP" value="0" />
+      <option name="VARIABLE_ANNOTATION_WRAP" value="0" />
+      <option name="SPACE_BEFORE_ANOTATION_PARAMETER_LIST" value="false" />
+      <option name="SPACE_WITHIN_ANNOTATION_PARENTHESES" value="false" />
+      <option name="ENUM_CONSTANTS_WRAP" value="0" />
+      <option name="FORCE_REARRANGE_MODE" value="0" />
+      <option name="WRAP_ON_TYPING" value="1" />
     </codeStyleSettings>
   </code_scheme>
 </component>
\ No newline at end of file
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
index 102bc58..7686401 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
@@ -93,7 +93,7 @@ private suspend fun ApplicationCall.respondEbicsKeyManagement(
                     this.dataEncryptionInfo = 
EbicsTypes.DataEncryptionInfo().apply {
                         this.authenticate = true
                         this.transactionKey = 
dataTransfer.encryptedTransactionKey
-                        this.encryptionPubKeyDigest = 
EbicsTypes.DataEncryptionInfo.EncryptionPubKeyDigest().apply {
+                        this.encryptionPubKeyDigest = 
EbicsTypes.PubKeyDigest().apply {
                             this.algorithm = 
"http://www.w3.org/2001/04/xmlenc#sha256";
                             this.version = "E002"
                             this.value = dataTransfer.pubKeyDigest
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt 
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt
index 0211948..ded67e2 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt
@@ -5,7 +5,6 @@ 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.XmlAdapter
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
 import javax.xml.datatype.XMLGregorianCalendar
 
@@ -13,6 +12,13 @@ import javax.xml.datatype.XMLGregorianCalendar
 @XmlType(name = "", propOrder = ["header", "authSignature", "body"])
 @XmlRootElement(name = "ebicsRequest")
 class EbicsRequest {
+    @get:XmlAttribute(name = "Version", required = true)
+    @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+    lateinit var version: String
+
+    @get:XmlAttribute(name = "Revision")
+    var revision: Int? = null
+
     @get:XmlElement(name = "header", required = true)
     lateinit var header: Header
 
@@ -35,7 +41,16 @@ class EbicsRequest {
         var authenticate: Boolean = false
     }
 
-    abstract class StaticHeaderType {
+    @XmlAccessorType(XmlAccessType.NONE)
+    @XmlType(
+        name = "",
+        propOrder = [
+            "hostID", "nonce", "timestamp", "partnerID", "userID", "systemID",
+            "product", "orderDetails", "bankPubKeyDigests", "securityMedium",
+            "numSegments", "transactionID"
+        ]
+    )
+    class StaticHeaderType {
         @get:XmlElement(name = "HostID", required = true)
         @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
         lateinit var hostID: String
@@ -80,7 +95,7 @@ class EbicsRequest {
          * Present only in the initialization phase.
          */
         @get:XmlElement(name = "Product")
-        val product: EbicsTypes.Product? = null
+        var product: EbicsTypes.Product? = null
 
         /**
          * Present only in the initialization phase.
@@ -88,6 +103,12 @@ class EbicsRequest {
         @get:XmlElement(name = "OrderDetails")
         var orderDetails: OrderDetails? = null
 
+        /**
+         * Present only in the initialization phase.
+         */
+        @get:XmlElement(name = "BankPubKeyDigests")
+        var bankPubKeyDigests: BankPubKeyDigests? = null
+
         /**
          * Present only in the initialization phase.
          */
@@ -112,9 +133,9 @@ class EbicsRequest {
     @XmlAccessorType(XmlAccessType.NONE)
     @XmlType(name = "", propOrder = ["transactionPhase", "segmentNumber"])
     class MutableHeader {
-        @get:XmlElement(name = "TransactionID")
-        @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
-        var transactionPhase: String? = null
+        @get:XmlElement(name = "TransactionPhase", required = true)
+        @get:XmlSchemaType(name = "token")
+        lateinit var transactionPhase: EbicsTypes.TransactionPhaseType
 
         /**
          * Number of the currently transmitted segment, if this message
@@ -126,7 +147,9 @@ class EbicsRequest {
     }
 
     @XmlAccessorType(XmlAccessType.NONE)
-    @XmlType(name = "", propOrder = ["orderType", "orderID", "orderAttribute"])
+    @XmlType(
+        name = "",
+        propOrder = ["orderType", "orderID", "orderAttribute", "orderParams"])
     class OrderDetails {
         @get:XmlElement(name = "OrderType", required = true)
         @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
@@ -136,13 +159,22 @@ class EbicsRequest {
          * Only present if this ebicsRequest is a upload order
          * relating to an already existing order.
          */
-        @get:XmlElement(name = "OrderId", required = true)
+        @get:XmlElement(name = "OrderID", required = true)
         @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
         var orderID: String? = null
 
         @get:XmlElement(name = "OrderAttribute", required = true)
         @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
         lateinit var orderAttribute: String
+
+        /**
+         * Present only in the initialization phase.
+         */
+        @get:XmlElements(
+            XmlElement(
+                name = "StandardOrderParams",
+                type = StandardOrderParams::class))
+        var orderParams: OrderParams? = null
     }
 
     @XmlAccessorType(XmlAccessType.NONE)
@@ -189,4 +221,34 @@ class EbicsRequest {
         @get:XmlElement(name = "ReceiptCode")
         var receiptCode: Int? = null
     }
+
+    @XmlAccessorType(XmlAccessType.NONE)
+    abstract class OrderParams
+
+    @XmlAccessorType(XmlAccessType.NONE)
+    @XmlType(name = "", propOrder = ["dateRange"])
+    class StandardOrderParams : OrderParams() {
+        @get:XmlElement(name = "DateRange")
+        var dateRange: DateRange? = null
+    }
+
+    @XmlAccessorType(XmlAccessType.NONE)
+    @XmlType(name = "", propOrder = ["start", "end"])
+    class DateRange {
+        @get:XmlElement(name = "Start")
+        lateinit var start: XMLGregorianCalendar
+
+        @get:XmlElement(name = "END")
+        lateinit var end: XMLGregorianCalendar
+    }
+
+    @XmlAccessorType(XmlAccessType.NONE)
+    @XmlType(name = "", propOrder = ["authentication", "encryption"])
+    class BankPubKeyDigests {
+        @get:XmlElement(name = "Authentication")
+        lateinit var authentication: EbicsTypes.PubKeyDigest
+
+        @get:XmlElement(name = "Encryption")
+        lateinit var encryption: EbicsTypes.PubKeyDigest
+    }
 }
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt 
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt
index b1d98a7..32ace05 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt
@@ -13,6 +13,13 @@ import javax.xml.namespace.QName
 @XmlType(name = "", propOrder = ["header", "authSignature", "body"])
 @XmlRootElement(name = "ebicsResponse")
 class EbicsResponse {
+    @get:XmlAttribute(name = "Version", required = true)
+    @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+    lateinit var version: String
+
+    @get:XmlAttribute(name = "Revision")
+    var revision: Int? = null
+
     @get:XmlElement(required = true)
     lateinit var header: EbicsResponse.Header
 
@@ -22,13 +29,6 @@ class EbicsResponse {
     @get:XmlElement(required = true)
     lateinit var body: Body
 
-    @get:XmlAttribute(name = "Version", required = true)
-    @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
-    lateinit var version: String
-
-    @get:XmlAttribute(name = "Revision")
-    var revision: Int? = null
-
     @get:XmlAnyAttribute
     var otherAttributes = HashMap<QName, String>()
 
diff --git 
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt 
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt
index 3c3ea9d..ce9f543 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt
@@ -21,10 +21,8 @@ package tech.libeufin.schema.ebics_h004
 
 import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
 import org.w3c.dom.Element
-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.datatype.XMLGregorianCalendar
@@ -60,32 +58,31 @@ class EbicsTypes private constructor() {
         var authenticate: Boolean = false
 
         @get:XmlElement(name = "EncryptionPubKeyDigest", required = true)
-        lateinit var encryptionPubKeyDigest: EncryptionPubKeyDigest
+        lateinit var encryptionPubKeyDigest: PubKeyDigest
 
         @get:XmlElement(name = "TransactionKey", required = true)
         lateinit var transactionKey: ByteArray
 
         @get:XmlAnyElement(lax = true)
         var any: List<Any>? = null
-
-        @XmlAccessorType(XmlAccessType.NONE)
-        class EncryptionPubKeyDigest {
-            /**
-             * Version of the *digest* of the public key.
-             */
-            @get:XmlAttribute(name = "Version", required = true)
-            @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
-            lateinit var version: String
-
-            @XmlAttribute(name = "Algorithm", required = true)
-            @XmlSchemaType(name = "anyURI")
-            lateinit var algorithm: String
-
-            @get:XmlValue
-            lateinit var value: ByteArray
-        }
     }
 
+    @XmlAccessorType(XmlAccessType.NONE)
+    class PubKeyDigest {
+        /**
+         * Version of the *digest* of the public key.
+         */
+        @get:XmlAttribute(name = "Version", required = true)
+        @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+        lateinit var version: String
+
+        @XmlAttribute(name = "Algorithm", required = true)
+        @XmlSchemaType(name = "anyURI")
+        lateinit var algorithm: String
+
+        @get:XmlValue
+        lateinit var value: ByteArray
+    }
 
     @Suppress("UNUSED_PARAMETER")
     enum class TransactionPhaseType(value: String) {
@@ -205,6 +202,5 @@ class EbicsTypes private constructor() {
 
         @get:XmlElement(name = "Value", required = true)
         lateinit var value: String
-
     }
 }
\ No newline at end of file
diff --git a/sandbox/src/test/kotlin/EbicsMessagesTest.kt 
b/sandbox/src/test/kotlin/EbicsMessagesTest.kt
index 2c28630..3ab7ce5 100644
--- a/sandbox/src/test/kotlin/EbicsMessagesTest.kt
+++ b/sandbox/src/test/kotlin/EbicsMessagesTest.kt
@@ -8,6 +8,7 @@ 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.SignaturePubKeyOrderData
+import javax.xml.datatype.DatatypeFactory
 import kotlin.test.assertNotNull
 import kotlin.test.assertTrue
 
@@ -230,4 +231,60 @@ class EbicsMessagesTest {
         println(str)
         assert(XMLUtil.validateFromString(str))
     }
+
+    @Test
+    fun testEbicsRequestInitializationPhase() {
+        val ebicsRequestObj = EbicsRequest().apply {
+            this.version = "H004"
+            this.revision = 1
+            this.authSignature = SignatureType()
+            this.header = EbicsRequest.Header().apply {
+                this.authenticate = true
+                this.mutable = EbicsRequest.MutableHeader().apply {
+                    this.transactionPhase = 
EbicsTypes.TransactionPhaseType.INITIALISATION
+                }
+                this.static = EbicsRequest.StaticHeaderType().apply {
+                    this.hostID = "myhost"
+                    this.nonce = ByteArray(16)
+                    this.timestamp =
+                        
DatatypeFactory.newDefaultInstance().newXMLGregorianCalendar(2019, 5, 5, 5, 5, 
5, 0, 0)
+                    this.partnerID = "mypid01"
+                    this.userID = "myusr01"
+                    this.product = EbicsTypes.Product().apply {
+                        this.instituteID = "test"
+                        this.language = "en"
+                        this.value = "test"
+                    }
+                    this.orderDetails = EbicsRequest.OrderDetails().apply {
+                        this.orderAttribute = "DZHNN"
+                        this.orderID = "OR01"
+                        this.orderType = "BLA"
+                        this.orderParams = EbicsRequest.StandardOrderParams()
+                    }
+                    this.bankPubKeyDigests = 
EbicsRequest.BankPubKeyDigests().apply {
+                        this.authentication = EbicsTypes.PubKeyDigest().apply {
+                            this.algorithm = "foo"
+                            this.value = ByteArray(32)
+                            this.version = "X002"
+                        }
+                        this.encryption = EbicsTypes.PubKeyDigest().apply {
+                            this.algorithm = "foo"
+                            this.value = ByteArray(32)
+                            this.version = "E002"
+                        }
+                    }
+                    this.securityMedium = "0000"
+                }
+            }
+            this.body = EbicsRequest.Body().apply {
+            }
+        }
+
+        val str = XMLUtil.convertJaxbToString(ebicsRequestObj)
+        val doc = XMLUtil.parseStringIntoDom(str)
+        val pair = CryptoUtil.generateRsaKeyPair(1024)
+        XMLUtil.signEbicsDocument(doc, pair.private)
+        val finalStr = XMLUtil.convertDomToString(doc)
+        assert(XMLUtil.validateFromString(finalStr))
+    }
 }
\ 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]