JAXB 的 XML 注释适用于 JDK8,但抛出 MessageBodyWriter not found with JDK11
JAXB's XML annotations work with JDK8 but throw MessageBodyWriter not found with JDK11
在开发 JAX-RS(泽西岛)应用程序时,我使用 @XmlRootElement
和 @XmlElement
启用 XML 媒体类型作为响应主体。
异常:
21-Jan-2019 12:29:28.601 SEVERE [http-nio-8080-exec-4] org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter not found for media type=text/plain, type=class org.mypack.model.Message, genericType=class org.mypack.model.Message.
有什么建议吗?
解决方案
我听说很多人都有这个problem/question,所以我认为我找到的解决方案最好分享一下,我什至会详细解释一下:
我考虑的这个问题实际上有两个不同的点:
- jdk 构建(编译)项目的版本;
- jdk 版本 用于 Web 容器 (Tomcat) 你将要 运行 你的项目(在 IntelliJ 中,它是在 Run/Debug 配置下,您必须为您的服务器指定 jdk。
转向我们,没关系你是否会使用javacompiler/jdk8或11,它在两种情况下都有效,你已经用 jdk8 或 jdk11 构建了它(你只需要考虑,默认情况下 jaxb (package javax.xml.bind.annotation
) 已从 jdk11 中删除,因此您需要将其手动添加为 dependency/jar)。 真正重要的是版本Java 您正在为您的 Web 容器。
如果(例如)Tomcat 将在 jdk11 上 运行,即使您有它在类路径上,而不管你用来构建项目的 Java 是哪个版本。
另一方面,如果您将 jdk8 作为平台 用于您的服务器 (IntelliJ 中的 Edit/Debug 配置),那么 JAXB 将无视Java 您曾用于构建项目 (使用 jdk11 您将添加一个 dependency/jar,使用 jdk8 它在 rt.jar).
在开发 JAX-RS(泽西岛)应用程序时,我使用 @XmlRootElement
和 @XmlElement
启用 XML 媒体类型作为响应主体。
异常:
21-Jan-2019 12:29:28.601 SEVERE [http-nio-8080-exec-4] org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo MessageBodyWriter not found for media type=text/plain, type=class org.mypack.model.Message, genericType=class org.mypack.model.Message.
有什么建议吗?
解决方案
我听说很多人都有这个problem/question,所以我认为我找到的解决方案最好分享一下,我什至会详细解释一下:
我考虑的这个问题实际上有两个不同的点:
- jdk 构建(编译)项目的版本;
- jdk 版本 用于 Web 容器 (Tomcat) 你将要 运行 你的项目(在 IntelliJ 中,它是在 Run/Debug 配置下,您必须为您的服务器指定 jdk。
转向我们,没关系你是否会使用javacompiler/jdk8或11,它在两种情况下都有效,你已经用 jdk8 或 jdk11 构建了它(你只需要考虑,默认情况下 jaxb (package javax.xml.bind.annotation
) 已从 jdk11 中删除,因此您需要将其手动添加为 dependency/jar)。 真正重要的是版本Java 您正在为您的 Web 容器。
如果(例如)Tomcat 将在 jdk11 上 运行,即使您有它在类路径上,而不管你用来构建项目的 Java 是哪个版本。 另一方面,如果您将 jdk8 作为平台 用于您的服务器 (IntelliJ 中的 Edit/Debug 配置),那么 JAXB 将无视Java 您曾用于构建项目 (使用 jdk11 您将添加一个 dependency/jar,使用 jdk8 它在 rt.jar).