我有一个无法更改的客户提供的 xsd。我正在使用 jaxb 生成类。结果类具有如下注释:
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar expires;
我尝试使用 GSON 将其转换为 json,并得到 javax.xml.bind.XmlSchemaType 的 classnotfoundexception。我在 maven pom.xml 中添加了 javax.xml.bind 的依赖项:
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.xml.bind</artifactId>
<version>3.0-b54</version>
<scope>compile</scope>
</dependency>
然后我得到这个疯狂的错误:
尝试在非核心库中包含核心类(java.* 或 javax.*)。您可能试图在应用程序中包含来自桌面虚拟机的核心库(或其一部分)。这肯定是行不通的。至少,它会危及您的应用程序与平台未来版本的兼容性。它的合法性也经常受到质疑。
如果你真的打算构建一个核心库——它只适合作为创建完整虚拟机发行版的一部分,而不是编译应用程序——然后使用“--core-library”选项来抑制这个错误消息。
如果您继续使用“--core-library”但实际上是在构建应用程序,那么请预先警告您的应用程序在某些时候仍然无法构建或运行。请为愤怒的客户做好准备,他们会发现,例如,一旦他们升级他们的操作系统,您的应用程序就会停止运行。你会为这个问题负责。
如果您合法地使用了恰好位于核心包中的某些代码,那么您拥有的最简单安全的替代方法是重新打包该代码。也就是说,将有问题的类移动到您自己的包命名空间中。这意味着它们永远不会与核心系统类发生冲突。如果你发现你无法做到这一点,那么这表明你所走的道路最终会导致痛苦、痛苦、悲伤和悲叹。
!!!
我要么需要跳过注释,要么告诉 jaxb 不要生成 themor gson 以忽略它们,要么正确导入依赖项。