我需要在Jersey ServletContainer中热部署和取消部署资源。
Set<Class<?>> classes = ...
ResourceConfig config = new ResourceConfig(classes);
container.reload(config);
如果我看一下源代码:
public void reload(final ResourceConfig configuration) {
try {
containerListener.onShutdown(this);
webComponent = new WebComponent(webComponent.webConfig, configuration);
containerListener = webComponent.appHandler;
containerListener.onReload(this);
containerListener.onStartup(this);
} catch (final ServletException ex) {
LOGGER.log(Level.SEVERE, "Reload failed", ex);
}
}
从WebComponent构造函数引发ModelValidationException。之后,任何重新加载的调用都会导致onShutdown方法发生异常,这是由ServiceLocatorImpl的preDestroy方法中的checkState引起的。
我可以通过忽略验证错误来避免异常
ResourceConfig config = new ResourceConfig(classes);
config.property(ServerProperties.RESOURCE_VALIDATION_IGNORE_ERRORS,
Boolean.TRUE);
container.reload(config);
@Override
public void reload(ResourceConfig configuration) {
try {
new WebComponent(new WebServletConfig(this), configuration);
} catch (ServletException e) {
LOGGER.log(Level.SEVERE, "Reload failed", e);
List<ResourceModelIssue> resources = Collections.emptyList();
throw new ModelValidationException(e.getMessage(), resources);
}
super.reload(configuration);
}
我认为如果不使用支持热部署的servlet容器,这是无法实现的。根据我的经验,这样做的一个好方法是使用支持OSGi的容器。你可以看看月食处女座或阿帕奇卡拉夫。
例如,在OSGi环境中,您可以创建模块(称为bundle),这些模块可以放在扫描文件夹中以在运行时启用功能,或者从文件夹中删除以禁用某些功能。这类似于插件在Eclipse IDE中的工作方式,在Eclipse IDE中,新插件的安装/卸载不一定需要重新启动。
我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?
我决定在这部分替换Web.XML: 我指向servlet容器Jersey,它将接受对REST-Controllers的请求,表明在启动时有必要扫描路径com . skillsimprover . REST examples . REST上的包REST,并表明资源的所有方法和类的基URI都填充了/api/* 从 JAX-RS 2.x 版本开始,可以使用应用程序类或资源配置类来注册包和资源。 我执行了
我有一个简单的项目Spring boot项目。它包含一个基于Jersey的控制器:@Path(“persons”)@products(MediaType.APPLICATION_JSON)公共类PersonsController{ 它返回预期的json响应(网址:http://localhost:PORT/人员): 我的目标是为这个控制器添加Spring云契约测试。我已经添加了所有必需的mvn配置
问题内容: 分析了整个互联网,但无法弄清楚为什么会发生这种情况。我有一个最简单的项目(使用jersey-quickstart- grizzly2原型),并且只有一个Jersey资源。我将Guice用作DI,因为CDI也不想与Jersey合作。问题在于,Guice在注入Jersey的资源时无法解析要使用的类。它在外面很好用,但不适用于泽西岛。这是泽西岛的资源: 传输接口: 它的实现: 遵循Googl
我正在Google应用引擎中部署一个使用Jersey的示例应用程序。然而,当我尝试对REST资源执行GET或POST时,我得到一个-404 NOT FOUND错误。看来我漏掉了什么。 REST资源代码: 我包括了以下几个罐子: Jar Jersey-Client-1.12.Jar Jersey-Core-1.12.Jar Jersey-JSON-1.12.Jar Jersey-Server-1.1