在Eclipse中找不到ContextFactory

问题描述 投票:1回答:2

我有一个基于Eclipse的应用程序,它从Java 8移植到Java 11.由于javax.xml和朋友从JDK中删除,我不得不将它作为Import-Package添加到需要它们的每个插件中。

但是,现在运行此代码时

Marshaller marshaller = JAXBContext.newInstance(MyClass.class).createMarshaller();

我得到以下异常:

java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at org.eclipse.osgi.internal.framework.ContextFinder.loadClass(ContextFinder.java:135)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:480)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:184)

我可以添加com.sun.xml.bind,它应该具有依赖性,但没有任何反应。这是可以理解的,因为OSGi规则可以防止通过反射侵入另一个插件。

但是我不能将Require-Bundle和Import-Package添加到JDK或javax.xml.bind周围的包中。

There is a bug围绕这个问题,但我在评论中找不到我的应用程序的好解决方案。我仍然认为它可以为Eclipse应用程序修复,否则Eclipse本身不应该能够在Java 11上运行。

我该如何解决这个异常?

eclipse-plugin eclipse-rcp
2个回答
0
投票

我们发现了一种OSGi兼容方法来修复此异常:

  1. 将以下实现添加到目标平台 org.apache.servicemix.specs.jaxb-api-2.2(来自Maven中心) com.sun.xml.bind(来自Eclipse平台;这是包含ContextFactory的那个)
  2. 确保这些软件包是从您的应用程序启动的
  3. 确保Apache bundle在其他所有内容之前启动

所以在第谷,这看起来像这样:

                <bundleStartLevel>
                    <bundle>
                        <id>org.apache.servicemix.specs.jaxb-api-2.2</id>
                        <autoStart>true</autoStart>
                        <level>1</level>
                    </bundle>
                </bundleStartLevel>

                <dependencies>
                    <dependency>
                        <artifactId>org.eclipse.e4.rcp</artifactId>
                        <type>eclipse-feature</type>
                    </dependency>
                    <dependency>
                        <type>p2-installable-unit</type>
                        <artifactId>org.apache.servicemix.specs.jaxb-api-2.2</artifactId>
                    </dependency>
                    <dependency>
                        <type>p2-installable-unit</type>
                        <artifactId>com.sun.xml.bind</artifactId>
                    </dependency>
                </dependencies>

-1
投票

我在我的应用程序中使用jaxb(JMSToolBox)并且从Java 1.8迁移到Java 11并且没有遇到此问题 在我的插件中,我有一个带有"jaxb-ri"jar及其依赖项(来自maven)的“lib”目录:

  • JAXB的API-2.3.1.jar
  • JAXB运行时-2.3.2.jar
  • javax.activation中,API-1.2.0.jar
  • iStack技术,公共运行时-3.0.7.jar

然后插件引用那些jar(MANIFEST.MF + build.properties),我没有任何问题

插件is here

© www.soinside.com 2019 - 2024. All rights reserved.