JAR文件中的jaxb.properties

时间:2011-06-06 11:35:31

标签: java java-ee jaxb

我正在使用JAXB版本2.我正在使用Sun版本,以便我可以使用替换不能与标准实现一起运行的命名空间。当我的类在应用程序的同一个包中并且jaxb.properties文件与模型类一起使用时,这一切都正常。

当我将这些全部移动到一个单独的lib,一个jar文件时,命名空间替换无法运行,并且所有命名空间在编组上仍然是ns1。所以对我而言,它似乎没有获取我的jaxb.properties文件中定义的上下文工厂定义并默认为标准Java版本。

没有找到引发异常的jaxb.properties。

知道可能会发生什么或如何修复它? 谢谢你的阅读。

3 个答案:

答案 0 :(得分:3)

您的设置

  

当我将这些全部移到另外一个时   lib,一个jar文件,然后是命名空间   替换无法正常运行   命名空间继续是ns1   编组。

在此设置中,您在同一个jar文件中有模型类和jaxb.properties吗?您需要确保jaxb.properties仍与模型类位于同一个包中:

  • COM \示例\让Foo.class
  • COM \示例\ Bar.class
  • COM \示例\ 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目录中?