From a910caa4ca7cfa3d1cf0dcd52634ae3a12262628 Mon Sep 17 00:00:00 2001 From: Martijn Dirkse Date: Mon, 23 Sep 2024 13:10:31 +0200 Subject: [PATCH] Encode Boolean values without XMLEncoder --- .../nl/nn/testtool/MessageEncoderImpl.java | 10 ++++- .../nl/nn/testtool/MessageEncoderTest.java | 43 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 src/test/java/nl/nn/testtool/MessageEncoderTest.java diff --git a/src/main/java/nl/nn/testtool/MessageEncoderImpl.java b/src/main/java/nl/nn/testtool/MessageEncoderImpl.java index 378ac053..c69de68e 100644 --- a/src/main/java/nl/nn/testtool/MessageEncoderImpl.java +++ b/src/main/java/nl/nn/testtool/MessageEncoderImpl.java @@ -69,7 +69,10 @@ public ToStringResult toString(Object message, String charset) { } else if (message instanceof String) { toStringResult = new ToStringResult((String)message, null); } else { - if (message instanceof byte[]) { + if (message instanceof Boolean) { + toStringResult = new ToStringResult(Boolean.toString((Boolean) message), null, Boolean.class.getName()); + } + else if (message instanceof byte[]) { String encoding; if (charset == null) { charset = "UTF-8"; @@ -147,6 +150,11 @@ public T toObject(Checkpoint originalCheckpoint, T messageToStub) { } else { String message = originalCheckpoint.getMessage(); String encoding = originalCheckpoint.getEncoding(); + String messageClassName = originalCheckpoint.getMessageClassName(); + if (messageClassName.equals(Boolean.class.getName())) { + Object rawResult = Boolean.valueOf(message); + return (T) rawResult; + } if (encoding == null) { if (originalCheckpoint.getStreaming() == null) { return (T)message; diff --git a/src/test/java/nl/nn/testtool/MessageEncoderTest.java b/src/test/java/nl/nn/testtool/MessageEncoderTest.java new file mode 100644 index 00000000..5680012e --- /dev/null +++ b/src/test/java/nl/nn/testtool/MessageEncoderTest.java @@ -0,0 +1,43 @@ +package nl.nn.testtool; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + +public class MessageEncoderTest { + @Test + public void encode_and_decode_boolean_true() { + MessageEncoder instance = new MessageEncoderImpl(); + MessageEncoder.ToStringResult encoded = instance.toString(true, null); + assertEquals("true", encoded.getString()); + assertEquals("java.lang.Boolean", encoded.getMessageClassName()); + Checkpoint checkpoint = new Checkpoint(); + checkpoint.setMessage(encoded.getString()); + checkpoint.setEncoding(encoded.getEncoding()); + checkpoint.setMessageClassName(encoded.getMessageClassName()); + Object back = instance.toObject(checkpoint); + if(! (back instanceof Boolean)) { + fail("Expected to get back Boolean"); + } + assertTrue((Boolean) back); + } + + @Test + public void encode_decode_boolean_false() { + MessageEncoder instance = new MessageEncoderImpl(); + MessageEncoder.ToStringResult encoded = instance.toString(false, null); + assertEquals("false", encoded.getString()); + assertEquals("java.lang.Boolean", encoded.getMessageClassName()); + Checkpoint checkpoint = new Checkpoint(); + checkpoint.setMessage(encoded.getString()); + checkpoint.setEncoding(encoded.getEncoding()); + checkpoint.setMessageClassName(encoded.getMessageClassName()); + Object back = instance.toObject(checkpoint); + if(! (back instanceof Boolean)) { + fail("Expected to get back Boolean"); + } + assertFalse((Boolean) back); + } +}