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 a5ef97656c32b..62b00345386ff 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 (ObjectStreamClass.class.isInstance(obj)) { writeClassDesc.invoke(oos, obj, false); - } else if (String.class.isInstance(obj)) { - 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 f0e238d6aa467..181f85678d62e 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) -> {