我正在使用JAXB版本2.我正在使用Sun版本,以便我可以使用替换不能与标准实现一起运行的命名空间。当我的类在应用程序的同一个包中并且jaxb.properties文件与模型类一起使用时,这一切都正常。
当我将这些全部移动到一个单独的lib,一个jar文件时,命名空间替换无法运行,并且所有命名空间在编组上仍然是ns1。所以对我而言,它似乎没有获取我的jaxb.properties文件中定义的上下文工厂定义并默认为标准Java版本。
没有找到引发异常的jaxb.properties。
知道可能会发生什么或如何修复它? 谢谢你的阅读。
答案 0 :(得分:3)
您的设置
当我将这些全部移到另外一个时 lib,一个jar文件,然后是命名空间 替换无法正常运行 命名空间继续是ns1 编组。
在此设置中,您在同一个jar文件中有模型类和jaxb.properties
吗?您需要确保jaxb.properties仍与模型类位于同一个包中:
找不到jaxb.properties 抛出异常。
是否找到了jaxb.properties?
当jaxb.properties文件不存在时,没有抛出异常,因为JAXB运行时将默认为JAXB impl(RI或通过META-INF/services
机制定义的一个。你可以测试是否它是通过一个无效的JAXBContextFactory条目找到你的jaxb.properties文件,这会产生如下的异常:
javax.xml.bind.context.factory的= INVALID_ENTRY
会导致以下异常:
Exception in thread "main" javax.xml.bind.JAXBException
- with linked exception:
[java.lang.ClassNotFoundException: INVALID_ENTRY]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:187)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:331)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
at forum22.Demo.main(Demo.java:10)
Caused by: java.lang.ClassNotFoundException: INVALID_ENTRY
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:481)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:185)
... 4 more
答案 1 :(得分:2)
因为它是我的JAR文件的问题。 我在构建中将package-info.java复制到了我的JAR,但没有复制已编译的package-info.class。
包括package-info.java和.class已经解决了这个问题。
感谢阅读并非常感谢回复。
答案 2 :(得分:1)
您是否尝试将其放入jar文件的META-INF/services
目录中?