Google Code Prettify

2016年7月14日 星期四

Generate Swagger Specification

在網路上與官方網站的範例大多是在 Application Server 上產生 swagger.json

但這種方法會讓 Server 浪費資源,也有漏洞的風險

    Swagger高危漏洞,影響Html、PHP、Java和 Ruby等開發應用
    原文網址:https://read01.com/Lz7eJg.html

最近終於找到能獨立產出 swagger.json 的方式,程式碼如下

package test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.Path;
import org.reflections.Reflections;
import com.fasterxml.jackson.core.JsonProcessingException;
import io.swagger.jaxrs.Reader;
import io.swagger.jaxrs.config.DefaultReaderConfig;
import io.swagger.models.Contact;
import io.swagger.models.Info;
import io.swagger.models.License;
import io.swagger.models.Scheme;
import io.swagger.models.Swagger;
import io.swagger.util.Json;
import io.swagger.util.Yaml;
public class TestSwagger {
public static void main(String[] args) {
String RESOURCE_PACKAGE = "com.abc.api.rest";
Set<Class<?>> classes = new HashSet<Class<?>>();
new Reflections(RESOURCE_PACKAGE).getTypesAnnotatedWith(Path.class).forEach(classes::add);
classes.add(io.swagger.jaxrs.listing.ApiListingResource.class);
classes.add(io.swagger.jaxrs.listing.SwaggerSerializers.class);
DefaultReaderConfig config = new DefaultReaderConfig();
config.setScanAllResources(true);
Swagger baseSwagger = new Swagger();
baseSwagger.addScheme(Scheme.HTTPS);
baseSwagger.setHost("api.abc.com");
baseSwagger.setBasePath("/api");
Info api_info = new Info();
api_info.setTitle("Some API");
api_info.setDescription("Access Data");
api_info.setTermsOfService("None");
Contact contact = new Contact();
contact.setName("admin");
contact.setEmail("admin@xxx.com");
contact.setUrl("");
api_info.setContact(contact);
License license = new License();
license.name("None");
api_info.setLicense(license);
api_info.setVersion("1.0.0");
baseSwagger.setInfo(api_info);
try {
Swagger swagger = new Reader(baseSwagger, config).read(classes);
File json_file = new File("./build/doc/swagger.json");
File yaml_file = new File("./build/doc/swagger.yaml");
File file_dir = new File("./build/doc");
if(!file_dir.exists()){
file_dir.mkdirs();
}
Json.mapper().writeValue(new FileOutputStream(json_file), swagger);
Yaml.mapper().writeValue(new FileOutputStream(yaml_file), swagger);
/*
String json = Json.mapper().writeValueAsString(swagger);
String yaml = Yaml.mapper().writeValueAsString(swagger);
System.out.println(yaml);
*/
} catch (JsonProcessingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}