JAXB XJC选项:com.sun.tools.xjc.Options的替代方法,它是Java9友好且OSGi友好的

时间:2016-07-14 09:53:36

标签: jaxb osgi xjc java-9

在我们的框架中,我们在公共API中有一个与此方法的接口:

JaxbConfiguration newJaxbConfiguration(Options xjcOpts);

在实施中,我们做了类似的事情:

import com.sun.tools.xjc.ModelLoader;
import com.sun.tools.xjc.Options;
import com.sun.tools.xjc.model.Model;
...

public JaxbConfiguration newJaxbConfiguration(Options xjcOpts) {
    Model model = ModelLoader.load(xjcOpts, ...);
    ...
}

然而,OSGi和Java 9的拼图都不喜欢我们使用com.sun.tools.xjc.Options,而不是我们的实现,特别是我们的公共API接口。

我们怎样摆脱它?

1 个答案:

答案 0 :(得分:2)

JDeps website列出了一些JDK内部API以及替换其用法的推荐方法。但是,未提及ModelLoader.load()的使用。我的猜测是这个用例还不足以引起JDeps团队的注意。

我的建议是重构这个方法,以便

  1. 传入用于构造Options参数的数据,而不是传入Options参数
  2. 使用该数据构建您的JaxbConfiguration对象,而不是从内部模型转换。
  3. 你没有提到JaxbConfiguration是什么或它是什么库所以我很难确切地说如何构建它。无论如何,这个答案是关于如何删除内部API的使用。如何构造JaxbConfiguration可能是一个不同的问题。