JAXB的XML批注可与JDK8一起使用,但会抛出JDK11找不到的MessageBodyWriter

时间:2019-01-21 10:25:58

标签: java xml jaxb jax-rs

在开发JAX-RS(Jersey)应用程序时,我使用@XmlRootElement@XmlElement来启用XML Media类型作为响应主体。

例外:
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.

有什么提示吗?

1 个答案:

答案 0 :(得分:-1)

解决方案

我听说很多人有这个问题/问题,所以我认为我发现的解决方案会更好地共享,我什至会详细解释一下:

我正在考虑的这个问题实际上有两个不同的观点:

  1. jdk版本,用于构建(编译)项目;
  2. 您要在其上运行项目的Web容器(Tomcat)的
  3. jdk版本(在IntelliJ中,它位于“运行/调试配置”下,您必须为服务器指定jdk) 。

将我们变成 没关系 ,无论您使用的是Java编译器/ jdk 8还是11,在两种情况下都可以使用,并且已经使用jdk8或jdk11 (您只需要考虑,默认情况下 jaxb package javax.xml.bind.annotation)已从jdk11中删除,因此您将其手动添加为依赖项/ jar )。真正重要的是,您为 Web容器提供的Java版本。

如果(例如) Tomcat 将在jdk11上运行,即使将JAXB放在类路径上并且不考虑用于构建项目的Java版本,JAXB也将无法运行。 另一方面,如果要提供jdk8作为服务器的平台 (IntelliJ中的“编辑/调试配置”),那么JAXB可以不考虑您用来构建项目的Java (对于jdk11,您将添加一个依赖项/ jar,对于jdk8,它会在 rt.jar 中提供)