diff --git a/component-runtime-beam/src/main/java/org/talend/sdk/component/runtime/beam/transformer/BeamIOTransformer.java b/component-runtime-beam/src/main/java/org/talend/sdk/component/runtime/beam/transformer/BeamIOTransformer.java index a0399e4356548..3d32940e7a19c 100644 --- a/component-runtime-beam/src/main/java/org/talend/sdk/component/runtime/beam/transformer/BeamIOTransformer.java +++ b/component-runtime-beam/src/main/java/org/talend/sdk/component/runtime/beam/transformer/BeamIOTransformer.java @@ -260,8 +260,6 @@ private static BiConsumer doCreateSerializer() { writeClass.invoke(oos, obj, false); } else if (obj instanceof ObjectStreamClass) { writeClassDesc.invoke(oos, obj, false); - } else if (obj instanceof String) { - writeClassDesc.invoke(oos, obj, false); } else if (obj instanceof String) { writeString.invoke(oos, obj, false); } else if (obj.getClass().isArray()) { diff --git a/component-runtime-beam/src/test/java/org/talend/sdk/component/runtime/beam/transformer/BeamIOTransformerTest.java b/component-runtime-beam/src/test/java/org/talend/sdk/component/runtime/beam/transformer/BeamIOTransformerTest.java index 8e3778f6ccf5d..0ad33be9dbce5 100644 --- a/component-runtime-beam/src/test/java/org/talend/sdk/component/runtime/beam/transformer/BeamIOTransformerTest.java +++ b/component-runtime-beam/src/test/java/org/talend/sdk/component/runtime/beam/transformer/BeamIOTransformerTest.java @@ -120,6 +120,18 @@ void coder() { }); } + @Test + void bypassReplaceSerializerHandlesString() { + // Ensures the custom serializer used by SerializationWrapper writes top-level String + // values via writeString instead of falling into the wrong writeClassDesc branch. + scenario((transformer, loader) -> { + final BeamIOTransformer.SerializationWrapper wrapper = + (BeamIOTransformer.SerializationWrapper) BeamIOTransformer.SerializationWrapper + .replace("hello", "test"); + assertEquals("hello", wrapper.readResolve()); + }); + } + @Test void coderSerialization() { scenario((transformer, loader) -> {