# devopsgym / codegen__fasterxml__jackson-databind-4360 - taskset: [devopsgym](https://harnessreport.com/tasks/devopsgym.md) - difficulty: hard - category: code-generation - language: - runnable from the site: no - agent timeout: 3000s ## Results by harness _none yet_ ## Instruction ``` This is a code generation task. You are expected to write working code that solves the described problem. <issue> ### Search before asking - [X] I searched in the [issues](https://github.com/FasterXML/jackson-databind/issues) and found nothing similar. ### Describe the bug After upgrading to 2.16.1, I cannot obtain `ObjectWriter` for enum classes, which some of the value returns `null` from `toString()`. This used to work in 2.15.3 ### Version Information 2.16.0, 2.16.1 ### Reproduction Following is the minimum JUnit 5 reproducer. This works fine on 2.15.3 but exceptionally fails at `assertDoesNotThrow(..)` on 2.16.0 or 2.16.1. ```java enum NullToStringEnum { ALPHA("A"), BETA("B"), UNDEFINED(null); private final String s; NullToStringEnum(String s) { this.s = s; } @Override public String toString() { return s; } } @Test void nullToStringEnum() { ObjectMapper mapper = new ObjectMapper(); assertDoesNotThrow(() -> mapper.writerFor(NullToStringEnum.class)); assertEquals("\"ALPHA\"", w.writeValueAsString(NullToStringEnum.ALPHA)); assertEquals("\"UNDEFINED\"", w.writeValueAsString(NullToStringEnum.UNDEFINED)); } ``` backtrace looks like: ``` Caused by: java.lang.IllegalStateException: Null String illegal for SerializedString at com.fasterxml.jackson.core.io.SerializedString.<init>(SerializedString.java:53) at com.fasterxml.jackson.databind.cfg.MapperConfig.compileString(MapperConfig.java:245) at com.fasterxml.jackson.databind.util.EnumValues.constructFromToString(EnumValues.java:136) at com.fasterxml.jackson.databind.ser.std.EnumSerializer.construct(EnumSerializer.java:125) at com.fasterxml.jackson.databind.ser.BasicSerializerFactory.buildEnumSerializer(BasicSerializerFactory.java:1218) at com.fasterxml.jackson.databind.ser.BasicSerializerFactory.findSerializerByPrimaryType(BasicSerializerFactory.java:428) at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:235) at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:174) at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1525) at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1493) at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:619) at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:901) at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.forRootType(ObjectWriter.java:1535) at com.fasterxml.jackson.databind.ObjectWriter.<init>(ObjectWriter.java:116) at com.fasterxml.jackson.databind.ObjectMapper._newWriter(ObjectMapper.java:838) at com.fasterxml.jackson.databind.ObjectMapper.writerFor(ObjectMapper.java:4135) at org.example.MainTest.lambda$nullToStringEnum$0(MainTest.java:31) at org.junit.jupiter.api.AssertDoesNotThrow.assertDoesNotThrow(AssertDoesNotThrow.java:71) ``` ### Expected behavior Be able to serialize Enums even though it's `#toString()` returns `null` ### Additional context Returning `null` from `toString()` is probably bad practice, but such Enums are out there in the wild. From the 2.16.1 backtrace, it seems to be related to the change #4039 Building `EnumValues valuesByToString` regardless of the `SerializationFeature.WRITE_ENUMS_USING_TO_STRING` config might be the issue? </issue> Focus on implementing the required functionality correctly and efficiently. Treat this as a programming challenge. You are not allowed to read git history. ``` --- Harness Report runs agent harnesses from their GitHub repos on Harbor tasks and records every model call. Every page is also `.md` and `.json`; index: https://harnessreport.com/llms.txt · MCP: https://harnessreport.com/mcp