【发布时间】:2019-08-06 19:57:18
【问题描述】:
我有created a Liferay Blade "rest" module 以及随该模板提供的示例代码。我正在尝试访问示例代码的 /greetings 端点:http://localhost:8080/o/greetings
我收到的错误似乎很常见,well-documented 因为在 Java 11 中,JAXB 已完全从 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 文件中:
compile('javax.xml.bind:jaxb-api:2.3.0')
compile('javax.activation:activation:1.1')
compile('org.glassfish.jaxb:jaxb-runtime:2.3.0')
我还尝试将上述依赖项的 jar 文件下载并部署到 Liferay 7.2 中。没有运气。
我的 gradle.build 文件:
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"
}
示例类文件:
package some.random.super.long.folder.path;
import java.util.Collections;
import java.util.Set;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.service.UserLocalServiceUtil;
import com.liferay.portal.kernel.util.PropsUtil;
import javax.net.ssl.HttpsURLConnection;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Application;
import javax.ws.rs.ServerErrorException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.SecurityContext;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants;
/**
* @author andrew
*/
@Component(
property = {
JaxrsWhiteboardConstants.JAX_RS_APPLICATION_BASE + "=/greetings",
JaxrsWhiteboardConstants.JAX_RS_NAME + "=Greetings.Rest"
},
service = Application.class
)
public class DiningRestServiceApplication extends Application {
public Set<Object> getSingletons() {
return Collections.<Object>singleton(this);
}
@GET
@Produces("text/plain")
public String working() {
return "It works!";
}
@GET
@Path("/morning")
@Produces("text/plain")
public String hello() {
return "Good morning!";
}
@GET
@Path("/morning/{name}")
@Produces("text/plain")
public String morning(
@PathParam("name") String name,
@QueryParam("drink") String drink) {
String greeting = "Good Morning " + name;
if (drink != null) {
greeting += ". Would you like some " + drink + "?";
}
return greeting;
}
}
我所追求的预期结果是在指定样本的端点接收样本消息。
非常感谢这个精彩社区的任何帮助!
更新
我在我的机器上切换到 Java 9 JDK。我仍然遇到上述错误消息。
【问题讨论】:
标签: jaxb jax-rs java-11 liferay-7