JAXB ЛЮБОЙ элемент добавляет ошибку маршалинга javax.xml.bind.JAXBException: class ***, ни один из его суперклассов не известен в этом контексте
У меня есть этот автоматически сгенерированный код из xsd (извлеченный из CAURequest.java):
@XmlRootElement(name = "CAURequest")
public class CAURequest {
@XmlElement(name = "PF")
protected CAURequest.PF pf;
@XmlElement(name = "DI")
protected CAURequest.DI di;
@XmlElement(name = "PG")
protected CAURequest.PG pg;
@XmlElement(name = "I", required = true)
protected List<CAURequest.I> i;
@XmlAnyElement(lax = true)
protected List<Object> any;
Теперь мне нужно использовать элемент "любой", добавленный из этого другого автоматически сгенерированного кода (извлеченного из EuriscIVA.java):
@XmlRootElement(name = "EuriscIVA")
public class EuriscIVA {
@XmlElement(name = "PF")
protected EuriscIVA.PF pf;
@XmlElement(name = "DI")
protected EuriscIVA.DI di;
@XmlElement(name = "PG")
protected EuriscIVA.PG pg;
@XmlAttribute(name = "ACE")
protected String ace;
@XmlAttribute(name = "DAA", required = true)
protected int daa;
@XmlAttribute(name = "DC", required = true)
protected int dc;
@XmlAttribute(name = "DS", required = true)
protected int ds;
@XmlAttribute(name = "DR", required = true)
protected int dr;
это фрагмент кода, в котором я объединяю эти вещи:
PF nodoPF = new PF(); //element of CAURequest
nodoPF.setN(...);
nodoPF.setC(...);
[...]
bM1.setPF(nodoPF); // bM1 is a CAURequest object
bM2.setPF(new EuriscIVA.PF()); // bM2 is a EuriscIVA object. it also has a "PF" element
bM2.getPF().setPCF("1"); // element of EuriscIVA
bM1.getAny().add(bM2);
До сих пор все работает нормально (вижу в окне отладочных переменных).
После этого я сделал:
// creo il document
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document swb = db.newDocument();
JAXBContext contextObj = JAXBContext.newInstance(CAURequest.class);
Marshaller marshallerObj = contextObj.createMarshaller();
marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// marshaling
marshallerObj.marshal(bM1, swb); // HERE GIVES THE ERROR
javax.xml.bind.JAXBException: class it.bccsi.sicra.pef.crif.generatedschema.eurisc.EuriscIVA nor any of its super class is known to this context.
EuriscIVA - это второй класс, который следует добавить к первому.
Что я делаю не так?
1 ответ
Это было так просто...
JAXBContext contextObj = JAXBContext.newInstance(CAURequest.class, EuriscIVA.class);