spring-projects/spring-framework
spring-oxm
Active contributors: Juergen Hoeller, Sam Brannen
Purpose
spring-oxm (Object/XML Marshalling) provides Spring's abstraction over different XML binding frameworks. It defines the Marshaller and Unmarshaller interfaces and ships a JAXB implementation. While XML is much less common in modern Spring apps than JSON, this module remains the integration point for SOAP, JAX-WS, and any subsystem that produces or consumes XML payloads.
Directory layout
spring-oxm/
├── spring-oxm.gradle # uses XJC plugin for test schema generation
└── src/main/java/org/springframework/oxm/
├── Marshaller.java
├── Unmarshaller.java
├── XmlMappingException.java
├── ValidationFailureException.java
├── jaxb/ # JAXB implementation
├── support/
└── …Key abstractions
| Type | File | Role |
|---|---|---|
Marshaller |
spring-oxm/src/main/java/org/springframework/oxm/Marshaller.java |
Object → XML |
Unmarshaller |
spring-oxm/src/main/java/org/springframework/oxm/Unmarshaller.java |
XML → object |
Jaxb2Marshaller |
spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java |
JAXB-based bidirectional marshaller |
XmlMappingException |
spring-oxm/src/main/java/org/springframework/oxm/XmlMappingException.java |
Top-level marshalling exception |
How it works
The two interfaces are dead simple:
public interface Marshaller {
void marshal(Object graph, Result result) throws IOException, XmlMappingException;
boolean supports(Class<?> clazz);
}Jaxb2Marshaller wraps JAXB. It supports class-list–driven contexts (no META-INF/jaxb.index needed) and handles validation, schema location, and namespace prefixes.
The marshaller is plugged into:
spring-web'sMarshallingHttpMessageConverterfor@RequestBody/@ResponseBodyXML in MVC.spring-webflux's reactive XML codecs (Jaxb2XmlEncoder/Jaxb2XmlDecoder).- Older RMI/JMS XML payload bridges.
Integration points
- Standalone — depends only on
spring-beansandspring-core. - Used by
spring-web(XML message converters), older remoting modules. - AOT — JAXB classes need reflection hints;
Jaxb2Marshallerregisters them viaRuntimeHintsRegistrar.
Entry points for modification
- New marshaller (e.g., XStream, Castor revival) — implement
MarshallerandUnmarshaller. - JAXB customization —
Jaxb2Marshallerexposes setters for almost every JAXB knob.
See also
- spring-web — XML message converters wire here
- spring-webflux — reactive XML codecs
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.