Netbeans模块中的JAXB

Netbeans模块中的JAXB,netbeans,module,jaxb,export,marshalling,Netbeans,Module,Jaxb,Export,Marshalling,当我试图在netbeans模块中运行JAXB marshaller时,它们似乎是一个问题。最初我认为这是节点的实现,所以我花了几天时间重新组织所有内容,但仍然收到奇怪的错误消息 javax.xml.bind.JAXBException: ClassCastException: attempting to cast jar:file:/C:/Program%20Files/jmonkeyplatform/ide/modules/ext/jaxb/api/jaxb-api.jar!/javax/xm

当我试图在netbeans模块中运行JAXB marshaller时,它们似乎是一个问题。最初我认为这是节点的实现,所以我花了几天时间重新组织所有内容,但仍然收到奇怪的错误消息

javax.xml.bind.JAXBException: ClassCastException: attempting to cast jar:file:/C:/Program%20Files/jmonkeyplatform/ide/modules/ext/jaxb/api/jaxb-api.jar!/javax/xml/bind/JAXBContext.class to jar:file:/C:/Program%20Files/Java/jdk1.6.0_21/jre/lib/rt.jar!/javax/xml/bind/JAXBContext.class.  Please make sure that you are specifying the proper ClassLoader.    
    at javax.xml.bind.ContextFinder.handleClassCastException(ContextFinder.java:96)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:205)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:363)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
    at com.spectre.util.JAXBImporterExporter.write(JAXBImporterExporter.java:63)
我不确定问题出在哪里导入器/导出器似乎在正常项目中工作,导入器在解析文件时似乎工作正常,但导出似乎会导致问题。我用于导出的方法是

 public static <T> void write(T savable, Class<T> type,Object path) {
        try {
            JAXBContext jc = JAXBContext.newInstance(type);
            Marshaller marshaller = jc.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            if(path instanceof File)
                marshaller.marshal(savable, (File)path);
            else if(path instanceof OutputStream){
                marshaller.marshal(savable, (OutputStream)path);
            }else throw new NoSuchMethodException("The Field Path must be of either type File or OutputStream");
        } catch (NoSuchMethodException ex) {
            Exceptions.printStackTrace(ex);
        } catch (JAXBException ex) {
            Exceptions.printStackTrace(ex);
        }
    }
publicstaticvoidwrite(T可保存、类类型、对象路径){
试一试{
JAXBContext jc=JAXBContext.newInstance(类型);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
if(文件的路径实例)
marshaller.marshall(可保存,(文件)路径);
else if(OutputStream的路径实例){
marshaller.marshall(savable,(OutputStream)路径);
}else抛出新的NoSuchMethodException(“字段路径必须是File或OutputStream类型”);
}catch(NoSuchMethodException-ex){
例外情况。printStackTrace(ex);
}捕获(JAXBEException-ex){
例外情况。printStackTrace(ex);
}
}

感谢您的帮助

我发现,如果您将JAXBContext的初始化改为JAXBContext.newInstane(String contextPath,ClassLoader loader),您在ie MyClass.class.getClassLoader()中从当前类接收到的类装入器。此外,您还可以使用jaxb.index来代替模式,它只是一个文本文件列表,其中包含您为使用同一目录中的jaxb而扩充的类名。他们应该是一个为每个目录,虽然对我来说,他们都在同一个目录。并在构造函数的上下文路径param中以相同字符串分隔:


一个简单的解决方案是在属于netbeans的
org.netbeans.modules.xml.jaxb.api
模块上添加模块依赖项。这将避免两个版本JAXB类(一个来自JDK,另一个来自运行时首选的模块)之间的冲突。

我发现在运行时使用2个不同的类装入器似乎是一个问题,但我似乎找不到合适的修复方法。我确实相信另一个构造函数可以帮助它,但是我似乎不知道应该包含什么作为第一个参数contextPath,并将其设置为null或空字符串似乎会导致并发出
JAXBContext jc=JAXBContext.newInstance(“,JAXBImporterExporter.class.getClassLoader()”请将答案作为答案发布,不要将其放在问题中。底部有一个
回答您的问题
按钮。也没有必要在标题或其他什么的时候喊“回答”。只要在时机成熟时标上接受的答案。听着,这是一个问答网站,不是一个讨论论坛或类似的原始网站:)好吧,我昨晚很早就想出来了,因为根本没有人回答或评论,我想发布一个解决方案是可以的,因为有人投票支持这个问题,这应该是首选的解决方案,伊姆霍。这似乎是一种更像NetBeans的解决问题的方法,可以避免你去摆弄类加载器。我也面临着同样的问题。但是,将org.netbeans.modules.xml.jaxb添加为依赖项会导致另一个错误“模块在org.netbeans.modules.xml.jaxb上具有朋友依赖项,但未作为朋友列出”。据了解,只有其他几个模块可以依赖它。