2016-12-07 51 views
1

我得到一个奇怪的错误时,通过我的程序来执行我的代码恰好但不是当我运行它在一个独立的主要方法。Eclipse RCP的 - JAXB异常的程序,但不是在小例子:javax.xml.bind.JAXBElement或其任何超类是已知此背景下

的代码是:

public static void main(String[] args) throws Exception { 
    JAXBContext jaxbContext = 
      JAXBContext.newInstance(ObjectFactory.class); 
    Marshaller marshaller = jaxbContext.createMarshaller(); 
    JAXBElement<MyTestObject> marshallableSchedule = 
      new ObjectFactory() 
        .createMyTestObject(new MyTestObject()); 
    marshaller.marshal(marshallableSchedule, System.out); 
} 

的代码正好是在我的程序相同,但我却得到,当它被调用以下异常:

javax.xml.bind.JAXBException: class javax.xml.bind.JAXBElement nor any of its super class is known to this context.

我也注意到,如果我做jaxBContext.toString()那么这个工作示例将显示ObjectFactory所在的包中的所有类,而失败的示例仅显示package.ObjectFactory。

我发现了很多像这样的一个重复的问题,但它通常说MyTestObject不知道,不是JAXBElement的是不知道。

这是不是与我的项目设置的方式吗?如果这有什么不同,我正在使用带有功能和插件的eclipse RCP。我认为这可能是一个类加载器的问题,但我仍然不确定它是否或如何解决它。

任何帮助将不胜感激!

+0

Eclipse使用的类加载器的一个复杂的系统,以保持插件类路径分开。这可能会让JAXB很不高兴 - 我对此不甚了解。 –

+0

您是否在两个测试中使用相同版本的Java?也就是说,您的eclipse-rcp插件是否需要比您用于main()测试的版本更高或更低的Java版本? –

回答

0

什么是类由ObjectFactory().createMyTestObject(new MyTestObject())创建的对象? ObjectFactory
声明JAXBContext.newInstance(ObjectFactory.class)告诉JAXB要考虑这个类的实例只有..
我有feeeling,它应该是JAXBContext.newInstance(MyTestObject.class) ...
另外,AXBElement<MyTestObject>建设只需要如果类MyTestObject不适用于JAXB(添加`如果可以的话) 的代码可以@XmlRootElement注释

JAXBContext jaxbContext = JAXBContext.newInstance(MyTestObject.class); 
Marshaller marshaller = jaxbContext.createMarshaller(); 
MyTestObject marshallableSchedule = new MyTestObject(); 
marshaller.marshal(marshallableSchedule, System.out); 
相关问题