Skip to content

Commit 9011f5b

Browse files
authored
Merge pull request #2078 from bosch-io/bugfix/js-mapper-missing-headers
fix missing headers from message after js mapper
2 parents f8e96f1 + f463564 commit 9011f5b

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

connectivity/service/src/main/java/org/eclipse/ditto/connectivity/service/mapping/javascript/ScriptedOutgoingMapping.java

+18-1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.eclipse.ditto.protocol.JsonifiableAdaptable;
4343
import org.eclipse.ditto.protocol.ProtocolFactory;
4444
import org.mozilla.javascript.Callable;
45+
import org.mozilla.javascript.ConsString;
4546
import org.mozilla.javascript.Context;
4647
import org.mozilla.javascript.ContextFactory;
4748
import org.mozilla.javascript.NativeArray;
@@ -51,6 +52,8 @@
5152
import org.mozilla.javascript.Scriptable;
5253
import org.mozilla.javascript.Undefined;
5354
import org.mozilla.javascript.typedarrays.NativeArrayBuffer;
55+
import org.slf4j.Logger;
56+
import org.slf4j.LoggerFactory;
5457

5558
/**
5659
* Mapping function for outgoing messages based on JavaScript.
@@ -63,6 +66,7 @@ public final class ScriptedOutgoingMapping implements MappingFunction<Adaptable,
6366
private static final String EXTERNAL_MESSAGE_BYTE_PAYLOAD = "bytePayload";
6467

6568
private static final String OUTGOING_FUNCTION_NAME = "mapFromDittoProtocolMsgWrapper";
69+
private static final Logger log = LoggerFactory.getLogger(ScriptedOutgoingMapping.class);
6670

6771
@Nullable private final ContextFactory contextFactory;
6872
@Nullable private final Scriptable scope;
@@ -159,11 +163,24 @@ private static JsonObject toJsonObject(final NativeObject nativeObject) {
159163
nativeObject.forEach((key, value) -> {
160164
try {
161165
if (value instanceof String) {
162-
objectBuilder.set(key.toString(), JsonFactory.readFrom(value.toString()));
166+
objectBuilder.set(key.toString(), JsonFactory.newValue(value.toString()));
167+
} else if (value instanceof ConsString consString) {
168+
objectBuilder.set(key.toString(), JsonFactory.newValue(consString.toString()));
163169
} else if (value instanceof NativeArray nativeArray) {
164170
objectBuilder.set(key.toString(), toJsonArray(nativeArray));
165171
} else if (value instanceof NativeObject nativeSubObject) {
166172
objectBuilder.set(key.toString(), toJsonObject(nativeSubObject));
173+
} else if (value instanceof Boolean boolValue) {
174+
objectBuilder.set(key.toString(), JsonFactory.newValue(boolValue));
175+
} else if (value instanceof Integer intValue) {
176+
objectBuilder.set(key.toString(), JsonFactory.newValue(intValue));
177+
} else if (value instanceof Double doubleValue) {
178+
objectBuilder.set(key.toString(), JsonFactory.newValue(doubleValue));
179+
} else {
180+
if (log.isDebugEnabled()){
181+
log.debug("Unsupported type: {}, adding as string: {}", value.getClass().getName(), value);
182+
}
183+
objectBuilder.set(key.toString(), value.toString());
167184
}
168185
} catch (final JsonParseException e) {
169186
objectBuilder.set(key.toString(), value.toString());

0 commit comments

Comments
 (0)