0

我从 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 是应该添加到第一类的第二类。

我做错了什么?

4

1 回答 1

0

就这么简单...

JAXBContext contextObj = JAXBContext.newInstance(CAURequest.class, EuriscIVA.class);
于 2020-01-28T18:29:26.227 回答