Java JAR文件中的jaxb.properties

Java JAR文件中的jaxb.properties,java,jakarta-ee,jaxb,Java,Jakarta Ee,Jaxb,我使用的是JAXB版本2。我使用的是Sun版本,这样我就可以替换标准实现中不起作用的名称空间。当我的类位于应用程序的同一个包中并且jaxb.properties文件与模型类位于同一个包中时,这一切都可以正常工作 当我将这些都移动到一个单独的库(一个jar文件)时,名称空间替换失败,所有名称空间仍然是封送处理上的ns1。因此,在我看来,它似乎没有拾取jaxb.properties文件中定义的上下文工厂定义,并默认为标准Java版本 没有jaxb.properties未找到,引发异常 你知道会发生什

我使用的是JAXB版本2。我使用的是Sun版本,这样我就可以替换标准实现中不起作用的名称空间。当我的类位于应用程序的同一个包中并且jaxb.properties文件与模型类位于同一个包中时,这一切都可以正常工作

当我将这些都移动到一个单独的库(一个jar文件)时,名称空间替换失败,所有名称空间仍然是封送处理上的ns1。因此,在我看来,它似乎没有拾取jaxb.properties文件中定义的上下文工厂定义,并默认为标准Java版本

没有jaxb.properties未找到,引发异常

你知道会发生什么事或者怎么解决吗?。
谢谢阅读。

您是否尝试将其放入jar文件的
META-INF/services
目录中?

您的设置

当我把这些都移到一个单独的 lib,一个jar文件,然后是名称空间 更换不起作用,所有 名称空间在网络上仍然是ns1 元帅

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

  • com\example\Foo.class
  • com\example\Bar.class
  • com\example\jaxb.properties
没有找到jaxb.properties 引发异常

是否找到您的jaxb.properties?

当jaxb.properties文件不存在时不会引发异常,因为jaxb运行时将默认为jaxb impl(可以是RI,也可以是通过
META-INF/services
机制定义的。您可以通过一个无效的JAXBContextFactory条目来测试它是否正在查找您的jaxb.properties文件,这将创建一个异常,如:

javax.xml.bind.context.factory=无效的\u条目

将导致以下异常:

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

就目前而言,我的JAR文件有问题。 我已经在构建中将package-info.java复制到我的JAR中,但没有复制已编译的package-info.class

包含package-info.java和.class解决了这个问题


感谢阅读,非常感谢回复。

尝试了这个,恐怕没有什么区别,不过建议不错,谢谢。很抱歉,它没有起作用。当我无法确定是否拾取了我的文件时,我使用的一种策略是故意损坏它,并查看是否抛出异常。有一件事需要注意META-INF/services方法将为使用该类路径的所有人而不仅仅是应用程序更改默认的JAXB impl。这比JAXB.properties的影响更大,它可以为单个模型更改JAXB提供程序。嘿!我想知道@Blaise何时会出现!那么答案是什么?我在这里添加了一个答案().我需要@Gurnard确认设置的一些详细信息。