我有created a Liferay Blade "rest" module以及该模板随附的示例代码。我试图在以下位置访问示例代码的/ greetings端点:http://localhost:8080/o/greetings
我收到的错误似乎很常见,well-documented是因为在Java 11中,JAX已完全从JDK中完全删除:
JAXBException发生:在模块路径或类路径上找不到JAXB-API的实现。org.apache.aries.jax无法找到com.sun.xml.internal.bind.v2.ContextFactory。 rs.whiteboard_1.0.4
该模块使用gradle构建并部署到Liferay 7.2中,没有任何错误,suggested solutions并没有解决错误(显然)。
完全公开,我不是Java开发人员,因此显然缺乏对Java的非常基本的了解,这可能是导致该问题的原因。
我尝试将建议的依赖项包括到我的gradle.build文件中:
dynamic_rnn
我还尝试过将上述依赖项的jar文件下载并部署到Liferay 7.2中。没有运气。
我的gradle.build文件:
compile('javax.xml.bind:jaxb-api:2.3.0')
compile('javax.activation:activation:1.1')
compile('org.glassfish.jaxb:jaxb-runtime:2.3.0')
示例类文件:
dependencies {
compileOnly group: "javax.ws.rs", name: "javax.ws.rs-api", version: "2.1"
compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations", version: "1.3.0"
compileOnly group: "org.osgi", name: "org.osgi.service.jaxrs", version: "1.0.0"
compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel", version: "4.4.0"
}
我追求的预期结果是在指定样本的端点接收样本消息。
任何来自这个美好社区的帮助将不胜感激!
更新
我在机器上切换到Java 9 JDK。我仍然遇到上述错误消息。
答案 0 :(得分:0)
Liferay社区的Jorge Diaz刚刚在Liferay论坛上回复说,这看起来像是一个正在解决的现有bug。
https://issues.liferay.com/browse/LPS-92576 https://issues.liferay.com/browse/LPS-97968
无论如何,我通过将Java降级到有效的Java 8来确认Liferay与Java 9和11的组合不能很好地与JAXB配合使用。
答案 1 :(得分:0)
Liferay在产品中附带了JAXB的实现。我们只需要配置JVM来寻找它,而不是尝试寻找默认的旧JVM。
只需设置属性javax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory
即可。您应该能够在启动Liferay的JVM的环境或可执行文件上进行设置。
如果Liferay的更高版本,则应默认设置。
答案 2 :(得分:0)
Carlos Sierra提供的解决方案有效。添加
-Djavax.xml.bind.JAXBContextFactory=com.sun.xml.bind.v2.ContextFactory
VM参数列表以指向Liferay提供的ContextFactory实现。
环境:带有Liferay DXP 7.2.10 GA1 SP 2(dxp-2-7210)的openjdk版本“ 11.0.5”于2019-10-15