繁体   English   中英

我的 Eclipse 插件没有找到 JAXB-API 的实现

[英]Implementation of JAXB-API has not been found by my Eclipse plugin

我需要为我的 Eclipse RCP 插件添加 XML 解组功能。 我正在使用 JAXB 来处理 XML 文件。 如果我从 IDE 运行 RCP,这一切都很好。 然后我使用mvn clean package构建我的插件,并使用它的 UI 将它安装到我的 RCP。 一切顺利,直到我想要我的解组。 在我尝试创建 JAXB 上下文的代码中,我得到了这个异常:

javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory]
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:232)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:375)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:691)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:632)
at my.code -skip-

互联网告诉我,从 Java-11 开始,JDK 禁止了 JAXB 实现。 所以,我需要在我的构建中添加一个。 Maven 依赖项对我不起作用,因为我正在处理第谷。 我决定从这个位置com.sun.xml.bind工件。 我将工件的 ID 放入插件的MANIFEST.MF

-skip-
Bundle-RequiredExecutionEnvironment: JavaSE-11
Require-Bundle: org.eclipse.core.runtime;bundle-version="3.14.0",
 -skip-
 jakarta.xml.bind;bundle-version="2.3.3",
 com.sun.xml.bind;bundle-version="2.3.3"
-skip-

我还将它添加到目标定义中:

-skip-
  <unit id="com.sun.xml.bind" version="2.3.3.v20201118-1818"/>
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20201130205003/repository/"/>
-skip-

环境:

eclipse.buildId=unknown
java.version=11.0.10
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -data @noDefault

我试图jaxb.properties javax.xml.bind.context.factory=com.sun.xml.bind.v2.JAXBContextFactory 结果相同。 我尝试了org.eclipse.persistence (Moxy) 的另一个实现。 结果是一样的(找不到org.eclipse.persistence.jaxb.JAXBContextFactory )。

我可以在我的 RCP 应用程序的plugins文件夹中找到这些工件。 为什么我的插件看不到它们? 我究竟做错了什么?

所以,我的问题在于我想创建上下文的这一行:

JAXBContext ctx = JAXBContext.newInstance(nodeClass);

它抛出了JAXBException ,因为它找不到任何实现。 我还没有解决这个问题,但我发现我可以使用蛮力解决方法,这对我来说非常好。 我刚刚用这个替换了这条线:

JAXBContext ctx = ContextFactory.createContext(new Class[] { nodeClass }, Collections.<String, Object>emptyMap());

进口:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import com.sun.xml.bind.v2.ContextFactory;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM