整理我的Java代码时:
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(um, new File("temp.xml"));
我得到了这个例外:
Exception in thread "main" javax.xml.bind.JAXBException: class com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl nor any of its super class is known to this context.
at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getBeanInfo(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(Unknown Source)
at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(Unknown Source)
at App.main(App.java:47)
有几件事可能会导致异常:
可能性#1
您的一个域对象持有UnmarshallerImpl
的实例。我建议不要这样做。如果您觉得必须这样做,那么应该使用@XmlTransient
对该字段/属性进行注释。
Possibilty#2
正如Ian Roberts的评论所建议的那样,您可能意外地编组了um
变量的UnmarshallerImpl
实例,而该实例包含了您的Unmarshaller
实例。
也许您导入了com.sun.xml.internal.bind的一些资源,而不是javax.xml.bind