Java JAR文件中的jaxb.properties
我使用的是JAXB版本2。我使用的是Sun版本,这样我就可以替换标准实现中不起作用的名称空间。当我的类位于应用程序的同一个包中并且jaxb.properties文件与模型类位于同一个包中时,这一切都可以正常工作 当我将这些都移动到一个单独的库(一个jar文件)时,名称空间替换失败,所有名称空间仍然是封送处理上的ns1。因此,在我看来,它似乎没有拾取jaxb.properties文件中定义的上下文工厂定义,并默认为标准Java版本 没有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未找到,引发异常 你知道会发生什
谢谢阅读。您是否尝试将其放入jar文件的
META-INF/services
目录中?您的设置
当我把这些都移到一个单独的
lib,一个jar文件,然后是名称空间
更换不起作用,所有
名称空间在网络上仍然是ns1
元帅
在这个设置中,模型类和jaxb.properties
在同一个jar文件中?您需要确保jaxb.properties仍然与模型类位于同一个包中:
- com\example\Foo.class
- com\example\Bar.class
- com\example\jaxb.properties
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确认设置的一些详细信息。