dubboのDubboSwaggerServiceについて

3672 ワード

シーケンス
本文は主にdubboのDubboSwaggerServiceを研究する
DubboSwaggerService
dubbo-2.7.2/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerService.java
@Path("dubbo")
@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})
@Produces({MediaType.APPLICATION_JSON + "; " + "charset=UTF-8", MediaType.TEXT_XML + "; " + "charset=UTF-8"})
public interface DubboSwaggerService {

    @GET
    @Path("swagger")
    public Response getListingJson(@Context Application app, @Context ServletConfig sc,
                                   @Context HttpHeaders headers, @Context UriInfo uriInfo) throws JsonProcessingException;
}
  • DubboSwaggerServiceはgetListingJsonメソッド
  • を定義する
    DubboSwaggerApiListingResource
    dubbo-2.7.2/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerApiListingResource.java
    @Service
    public class DubboSwaggerApiListingResource extends BaseApiListingResource implements DubboSwaggerService {
    
        @Context
        ServletContext context;
    
        @Override
        public Response getListingJson(Application app, ServletConfig sc,
                                       HttpHeaders headers, UriInfo uriInfo)  throws JsonProcessingException {
            Response response =  getListingJsonResponse(app, context, sc, headers, uriInfo);
            response.getHeaders().add("Access-Control-Allow-Origin", "*");
            response.getHeaders().add("Access-Control-Allow-Headers", "x-requested-with, ssi-token");
            response.getHeaders().add("Access-Control-Max-Age", "3600");
            response.getHeaders().add("Access-Control-Allow-Methods","GET,POST,PUT,DELETE,OPTIONS");
            return response;
        }
    }
  • DubboSwaggerApiListingResourceはswagger-jaxrsのBaseApiListingResourceを継承し、同時にDubboSwaggerServiceインタフェースを実現した.実装getListingJsonメソッドは、親クラスのgetListingJsonResponseを呼び出してresponseを取得し、ヘッダにドメイン間設定
  • を追加する.
    ≪インスタンス|Instance|emdw≫
    dubbo-2.7.2/dubbo-rpc/dubbo-rpc-rest/src/test/java/org/apache/dubbo/rpc/protocol/rest/integration/swagger/DubboSwaggerApiListingResourceTest.java
    public class DubboSwaggerApiListingResourceTest {
    
        private Application app;
        private ServletConfig sc;
    
        @Test
        public void test() throws Exception {
    
            DubboSwaggerApiListingResource resource = new  DubboSwaggerApiListingResource();
    
            app = mock(Application.class);
            sc = mock(ServletConfig.class);
            Set> sets = new HashSet>();
            sets.add(SwaggerService.class);
    
            when(sc.getServletContext()).thenReturn(mock(ServletContext.class));
            when(app.getClasses()).thenReturn(sets);
    
            Response response = resource.getListingJson(app, sc,
                    null, new ResteasyUriInfo(new URI("http://rest.test")));
    
            Assertions.assertNotNull(response);
            Swagger swagger = (Swagger)response.getEntity();
            Assertions.assertEquals("SwaggerService",swagger.getTags().get(0).getName());
            Assertions.assertEquals("/demoService/hello",swagger.getPaths().keySet().toArray()[0].toString());
        }
    
    }
  • ここでresourceを検証します.getListingJsonが返すentityのswaggerのpath
  • 小結
    DubboSwaggerServiceはgetListingJsonメソッドを定義した.DubboSwaggerApiListingResourceはswagger-jaxrsのBaseApiListingResourceを継承し、同時にDubboSwaggerServiceインタフェースを実現した.実装されるgetListingJsonメソッドは、まず親クラスのgetListingJsonResponseを呼び出してresponseを取得し、ヘッダにドメイン間設定を追加します.
    doc
  • DubboSwaggerService