alibaba/spring-ai-alibaba · error · IllegalArgumentException
Unsupported message type: {}
Error message
Unsupported message type: {} What it means
MessageSerializer.write dispatches on the message's MessageType enum (USER, ASSISTANT, SYSTEM, TOOL). Any other or unknown enum constant has no registered writer, so an IllegalArgumentException is thrown. This guards against new/unknown Spring AI message types being written with a serializer that does not support them.
Source
Thrown at spring-ai-alibaba-graph-core/src/main/java/com/alibaba/cloud/ai/graph/serializer/std/MessageSerializer.java:50
final UserMessageSerializer user = new UserMessageSerializer();
final AssistantMessageSerializer assistant = new AssistantMessageSerializer();
final SystemMessageSerializer system = new SystemMessageSerializer();
final ToolResponseMessageSerializer tool = new ToolResponseMessageSerializer();
@Override
public void write(Message object, ObjectOutput out) throws IOException {
out.writeObject(object.getMessageType());
switch (object.getMessageType()) {
case USER -> user.write((UserMessage) object, out);
case ASSISTANT -> assistant.write((AssistantMessage) object, out);
case SYSTEM -> system.write((SystemMessage) object, out);
case TOOL -> tool.write((ToolResponseMessage) object, out);
default -> throw new IllegalArgumentException("Unsupported message type: " + object.getMessageType());
}
}
@Override
public Message read(ObjectInput in) throws IOException, ClassNotFoundException {
MessageType type = (MessageType) in.readObject();
return switch (type) {
case ASSISTANT -> assistant.read(in);
case USER -> user.read(in);
case SYSTEM -> system.read(in);
case TOOL -> tool.read(in);
};
}
}
View on GitHub (pinned to f82da0b50f)
Solutions
- Check the message type actually flowing into state; convert unsupported message types to a supported one (e.g. wrap content in an AssistantMessage) before serialization
- Align spring-ai and spring-ai-alibaba versions so the message enum matches what the serializer supports
- Upgrade spring-ai-alibaba to a version that handles the new message type
- Register/patch the serializer chain to add a writer for the custom message type
Example fix
// before: custom message type hits default branch
state.put("msg", new MyCustomMessage("hi"));
// after: normalize to a supported type
state.put("msg", new UserMessage("hi")); Defensive patterns
Strategy: type-guard
Validate before calling
Set<MessageType> supported = Set.of(MessageType.USER, MessageType.ASSISTANT, MessageType.SYSTEM, MessageType.TOOL);
if (msg != null && !supported.contains(msg.getMessageType())) throw new IllegalArgumentException("Unsupported message type: " + msg.getMessageType()); Type guard
boolean isSerializableMessageType(Message m) {
return m != null && EnumSet.of(MessageType.USER, MessageType.ASSISTANT, MessageType.SYSTEM, MessageType.TOOL).contains(m.getMessageType());
} Try / catch
try { serializer.write(msg, out); } catch (IllegalArgumentException e) { if (e.getMessage().startsWith("Unsupported message type")) { out.writeObject(new UserMessage(((Message) msg).getText())); } else throw e; } Prevention
- Normalize custom/unknown messages to UserMessage/AssistantMessage before storing in state
- Keep Spring AI and spring-ai-alibaba versions aligned
- Add a serialization smoke test covering all message types your app produces
When it happens
Trigger: Serializing a Message whose getMessageType() returns a value outside the four handled cases — e.g. a custom Message implementation, a newly added MessageType from a newer Spring AI version, or null/aliased message types.
Common situations: Upgrading Spring AI introduces a new message type the framework serializer does not yet handle; passing custom message subclasses through graph state serialization; mixing library versions between serializer and message classes.
Related errors
- UpdatePluginError
- TOOL_PARAMS_INVALID
- INVALID_PARAMS
- Unknown vector store type:
- Unknown agent status code:
AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09).
Data as JSON: /api/errors/2041a4cb0cfa16a6.
Report an issue: GitHub.