如何通过午睡在 Nexus2 (2.13.0-01) 插件中创建 REST 端点?
How can I create a REST endpoint in a Nexus2 (2.13.0-01) plugin via siesta?
我尝试使用以下 class:
为 Nexus2 的插件创建一个 REST 端点
@Path(NexusPlugin.URI)
@Named
@Singleton
public class NexusPlugin extends ComponentSupport implements Resource {
public static final String URI ="/nexusplugin";
@GET
@Produces(MediaType.TEXT_PLAIN)
public Response get(){
return Response.ok("Config Updated").build();
}
}
根据我的理解,实现 Resource 接口应该就足够了,Nexus/siesta 应该实例化 class 并创建 Resource。我不使用任何 web.xml,而且我目前不自己实例化 class。
该代码基于 Nexus2 logging plugin 的代码,它也提供了一个 REST 端点,我可能在那里遗漏了一些东西。
午睡 returns 总是出现这样的错误:
{
"id": "ae015d47-5968-4cb6-88c3-d5615c677c0c",
"message": "No resource available at 'nexusplugin'"
}
Nexus2 日志显示以下错误:
admin org.sonatype.sisu.siesta.server.internal.SiestaServlet - Processing: GET /nexus/service/siesta/nexusplugin (http://localhost:8081/nexus/service/siesta/nexusplugin)
2018-01-30 08:40:47,816+0100 DEBUG [esh-1-thread-5] admin org.sonatype.nexus.feeds.record.NexusAuthenticationEventInspector - Successfully authenticated user [admin] from IP address 127.0.0.1
2018-01-30 08:40:47,816+0100 DEBUG [qtp491414393-52] admin org.sonatype.sisu.siesta.server.internal.mappers.WebApplicationExceptionMapper - (ID e92c848c-d603-4541-bb0c-ddd60fddb5e4) Mapping exception: com.sun.jersey.api.NotFoundException: null for uri: http://localhost:8081/nexus/service/siesta/nexusplugin
2018-01-30 08:40:47,820+0100 WARN [qtp491414393-52] admin org.sonatype.sisu.siesta.server.internal.mappers.WebApplicationExceptionMapper - (ID e92c848c-d603-4541-bb0c-ddd60fddb5e4) Response: [404] ErrorXO{id='e92c848c-d603-4541-bb0c-ddd60fddb5e4', message='No resource available at 'nexusplugin''} mapped from com.sun.jersey.api.NotFoundException/null for uri: http://localhost:8081/nexus/service/siesta/nexusplugin
com.sun.jersey.api.NotFoundException: null for uri: http://localhost:8081/nexus/service/siesta/nexusplugin
这不是很有帮助,因为在任意 url.
上都会引发错误
问题终于解决了。 pom.xml中的siesta插件的依赖需要添加如下一行:
<type>${nexus-plugin.type}</type>
所以它看起来像这样:
<dependency>
<groupId>org.sonatype.nexus.plugins</groupId>
<artifactId>nexus-siesta-plugin</artifactId>
<version>2.13.0-01</version>
<type>${nexus-plugin.type}</type>
<scope>provided</scope>
</dependency>
我尝试使用以下 class:
为 Nexus2 的插件创建一个 REST 端点@Path(NexusPlugin.URI)
@Named
@Singleton
public class NexusPlugin extends ComponentSupport implements Resource {
public static final String URI ="/nexusplugin";
@GET
@Produces(MediaType.TEXT_PLAIN)
public Response get(){
return Response.ok("Config Updated").build();
}
}
根据我的理解,实现 Resource 接口应该就足够了,Nexus/siesta 应该实例化 class 并创建 Resource。我不使用任何 web.xml,而且我目前不自己实例化 class。
该代码基于 Nexus2 logging plugin 的代码,它也提供了一个 REST 端点,我可能在那里遗漏了一些东西。
午睡 returns 总是出现这样的错误:
{
"id": "ae015d47-5968-4cb6-88c3-d5615c677c0c",
"message": "No resource available at 'nexusplugin'"
}
Nexus2 日志显示以下错误:
admin org.sonatype.sisu.siesta.server.internal.SiestaServlet - Processing: GET /nexus/service/siesta/nexusplugin (http://localhost:8081/nexus/service/siesta/nexusplugin)
2018-01-30 08:40:47,816+0100 DEBUG [esh-1-thread-5] admin org.sonatype.nexus.feeds.record.NexusAuthenticationEventInspector - Successfully authenticated user [admin] from IP address 127.0.0.1
2018-01-30 08:40:47,816+0100 DEBUG [qtp491414393-52] admin org.sonatype.sisu.siesta.server.internal.mappers.WebApplicationExceptionMapper - (ID e92c848c-d603-4541-bb0c-ddd60fddb5e4) Mapping exception: com.sun.jersey.api.NotFoundException: null for uri: http://localhost:8081/nexus/service/siesta/nexusplugin
2018-01-30 08:40:47,820+0100 WARN [qtp491414393-52] admin org.sonatype.sisu.siesta.server.internal.mappers.WebApplicationExceptionMapper - (ID e92c848c-d603-4541-bb0c-ddd60fddb5e4) Response: [404] ErrorXO{id='e92c848c-d603-4541-bb0c-ddd60fddb5e4', message='No resource available at 'nexusplugin''} mapped from com.sun.jersey.api.NotFoundException/null for uri: http://localhost:8081/nexus/service/siesta/nexusplugin
com.sun.jersey.api.NotFoundException: null for uri: http://localhost:8081/nexus/service/siesta/nexusplugin
这不是很有帮助,因为在任意 url.
上都会引发错误问题终于解决了。 pom.xml中的siesta插件的依赖需要添加如下一行:
<type>${nexus-plugin.type}</type>
所以它看起来像这样:
<dependency>
<groupId>org.sonatype.nexus.plugins</groupId>
<artifactId>nexus-siesta-plugin</artifactId>
<version>2.13.0-01</version>
<type>${nexus-plugin.type}</type>
<scope>provided</scope>
</dependency>