我想从部署在Karaf4.3.7,OpenJDK 17上的包中使用JAXB来封送解编组,它在单元测试中工作,但在Karaf中不起作用。
我在Karaf收到了这个例外:
jakarta.xml.bind.JAXBException: jakarta.xml.bind.JAXBException的实现还没有在模块路径或类路径上找到。在jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:252) ~!/:4.0.0在jakarta.xml.bind.ContextFinder.newInstance(ContextFinder.java:240) ~!/:4.0.0在jakarta.xml.bind.ContextFinder.find(ContextFinder.java:381) ~!/:4.0.0在jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:605) ~!/:4.0.0在jakarta.xml.bind.JAXBContext.newInstance(JAXBContext.java:546) ~!/:4.0.0
我在Karaf上一个接一个地尝试了多个JAXB实现:
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>4.0.0-RC2</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>4.0.0</version>
</dependency>
我还为Moxy尝试了jaxb.properties:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory jakarta.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory jakarta.xml.bind.JAXBContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory
我还尝试使用已安装的Karaf功能:
jaxb cxf-jaxb
但是,在使用:
JAXBContext context =JAXBContext.newInstance(类);JAXBContext context =JAXBContext clazz.getClassLoader();
唯一起作用的,但不是所有情况下,例如@XmlEnum都失败的是:
org.eclipse.persistence.jaxb.JAXBContextFactory JAXBContext context =
.createContext(类,null);
我查看了各种帖子,但它们通常不写关于OSGI环境的文章。他们只需在Java 11或更高版本上添加JAXB实现,就可以工作了。
我遗漏了什么?
发布于 2022-09-19 18:28:56
最后,我让它与以下内容一起工作:
Maven:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.moxy</artifactId>
<version>4.0.0-RC2</version>
</dependency>
Karaf功能:
<bundle>mvn:org.eclipse.persistence/org.eclipse.persistence.asm/9.3.0</bundle>
<bundle>mvn:org.eclipse.persistence/org.eclipse.persistence.core/4.0.0-RC2</bundle>
<bundle>mvn:org.eclipse.persistence/org.eclipse.persistence.moxy/4.0.0-RC2</bundle>
<bundle>mvn:jakarta.xml.bind/jakarta.xml.bind-api/4.0.0</bundle>
在Java中:
JAXBContext context = org.eclipse.persistence.jaxb.JAXBContextFactory
.createContext(classes, null);
我缺少的部分是显式地将eclipse持久性包导入到使用JAXB的所有包中,bnd maven插件:
Import-Package: org.eclipse.persistence.internal.jaxb.json.schema.model, \
org.eclipse.persistence.internal.jaxb.json.schema, \
org.eclipse.persistence.internal.jaxb.many, \
org.eclipse.persistence.internal.jaxb, \
org.eclipse.persistence.jaxb.attachment, \
org.eclipse.persistence.jaxb.compiler.builder.helper, \
org.eclipse.persistence.jaxb.compiler.builder, \
org.eclipse.persistence.jaxb.compiler.facets, \
org.eclipse.persistence.jaxb.compiler, \
org.eclipse.persistence.jaxb.dynamic.metadata, \
org.eclipse.persistence.jaxb.dynamic, \
org.eclipse.persistence.jaxb.javamodel.oxm, \
org.eclipse.persistence.jaxb.javamodel.reflection, \
org.eclipse.persistence.jaxb.javamodel.xjc, \
org.eclipse.persistence.jaxb.javamodel, \
org.eclipse.persistence.jaxb.json, \
org.eclipse.persistence.jaxb.metadata, \
org.eclipse.persistence.jaxb.plugins, \
org.eclipse.persistence.jaxb.rs, \
org.eclipse.persistence.jaxb.xmlmodel, \
org.eclipse.persistence.jaxb,*
https://stackoverflow.com/questions/73776215
复制相似问题