2016-01-25 2 views
2

Джерси обеспечивает динамический wadl в /application.wadl. В моем случае у меня есть как внутренние, так и внешние пути, выставленные в моем приложении. Я хочу исключить внутреннюю apis из динамического поколения wadl.Исключить пути ресурсов из приложения Jersey.wadl?

Есть ли какая-то конфигурация, чтобы сказать Джерси игнорировать определенные пути?

ответ

0

Я закончил тем, перекрывая сам это что-то вроде этого:

@Context 
protected UriInfo uriInfo; 

@Context 
protected WadlApplicationContext wadlContext; 

@GET 
@Path("/wadl") 
@Produces({"application/vnd.sun.wadl+xml", MediaType.APPLICATION_XML}) 
public Response wadl() { 

     // most of this is lifted from org.glassfish.jersey.server.wadl.internal.WadlResource 
     try { 
      boolean detailedWadl = WadlUtils.isDetailedWadlRequested(uriInfo); 
      String lastModified = new SimpleDateFormat(WadlResource.HTTPDATEFORMAT).format(new Date()); 
      ApplicationDescription applicationDescription = wadlContext.getApplication(uriInfo, detailedWadl); 
      Application application = applicationDescription.getApplication(); 
      application.getResources().stream().findFirst().get().getResource().removeIf(resource -> !resource.getPath().startsWith("/public_api")); 
      ByteArrayInputStream wadl = marshal(application); 
      return Response.ok(wadl).header("Last-modified", lastModified).build(); 
     } catch (Exception e) { 
      throw new ProcessingException("Error generating WADL", e); 
     } 
} 
2

Согласно Джерси документации: https://jersey.java.net/documentation/latest/wadl.html У вас есть три пути: 1. Установка в web.xml отключит весь WADL jersey.config.server.wadl.disableWadl = истинный 2. Использование @ExtendedResource аннотацию не будет отображать аннотированный метод/класс по умолчанию wadl, но только в расширенном. 3. Согласно 17.2, вы также можете переопределить стандартный wadl своим собственным использованием самой Джерси.

Смежные вопросы