I have the following:
<xs:element name="MainImageSequence" type="cpl:SequenceType"/>
<xs:element name="MainAudioSequence" type="cpl:SequenceType"/>
<xs:element name="SubtitlesSequence" type="cpl:SequenceType"/>
The three different elements have the same type
parameter, and XJC only generates one class for the base type.
I have some scenarios, where the three of them can coexist together in the XMLs, although all have the same fields, yet they have different meanings.
I want to differentiate between the objects that all of them would be of SequenceType
type.
I have been thinking about using JXB bindings to bind each one of them to different custom class, yet I see it’s generated with no annotations.
<jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" schemaLocation="./imp/xsds/cpl/imf-cpl-ST2067-2-2016.xsd" node="//xs:element[@name='MainImageSequence']">
<jaxb:class name="MainImageSequence"/>
</jaxb:bindings>
public class MainImageSequence
extends JAXBElement<SequenceType>
{
protected static final QName NAME = new QName("http://www.smpte-ra.org/schemas/2067-2/2016", "MainImageSequence");
public MainImageSequence(SequenceType value) {
super(NAME, ((Class<SequenceType> ) SequenceType.class), null, value);
}
public MainImageSequence() {
super(NAME, ((Class<SequenceType> ) SequenceType.class), null, null);
}
}
The unmarshaller on my machine converts the XML of this element to ElementNSimpl
.
Is there a way to make this binding work or another way to differentiate?
I needed to add the generated classes to the classToBound
when creating a JAXBContext
JAXBContext context = JAXBContextFactory.createContext(new Class[] {MainImageSequence.class, MainAudioSequence.class}, properties);
I get a different error right now.
Caused by: java.lang.NullPointerException: Cannot load from object array because "factoryMethodParamTypes" is null
at org.eclipse.persistence.jaxb.compiler.MappingsGenerator.generateDescriptorForJAXBElementSubclass(MappingsGenerator.java:555)
at org.eclipse.persistence.jaxb.compiler.MappingsGenerator.generateDescriptor(MappingsGenerator.java:426)
at org.eclipse.persistence.jaxb.compiler.MappingsGenerator.generateProject(MappingsGenerator.java:254)
at org.eclipse.persistence.jaxb.compiler.Generator.generateProject(Generator.java:182)
at org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:1178)
at org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:1170)
I use MoXy version 4.0.4, I have been debugging the Moxy itself and it seems for me the ObjectFactory class and method are not registered for the custom generated classes.