Java tutorial
/* * Copyright 2017 Huawei Technologies Co., Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.servicecomb.swagger; import java.io.IOException; import java.net.URL; import java.util.Map.Entry; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.Response.Status.Family; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.util.StringUtils; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import io.servicecomb.foundation.common.exceptions.ServiceCombException; import io.swagger.models.Operation; import io.swagger.models.Path; import io.swagger.models.Response; import io.swagger.models.Swagger; import io.swagger.util.Yaml; public final class SwaggerUtils { private SwaggerUtils() { } public static String swaggerToString(Swagger swagger) { try { return Yaml.mapper().writeValueAsString(swagger); } catch (Throwable e) { throw new ServiceCombException("Convert swagger to string failed, ", e); } } public static Swagger parseSwagger(URL url) { try { String swaggerContent = IOUtils.toString(url); return internalParseSwagger(swaggerContent); } catch (Throwable e) { throw new ServiceCombException("Parse swagger from url failed, ", e); } } public static Swagger parseSwagger(String swaggerContent) { try { return internalParseSwagger(swaggerContent); } catch (Throwable e) { throw new ServiceCombException("Parse swagger from content failed, ", e); } } private static Swagger internalParseSwagger(String swaggerContent) throws JsonParseException, JsonMappingException, IOException { Swagger swagger = Yaml.mapper().readValue(swaggerContent, Swagger.class); correctResponses(swagger); return swagger; } public static void correctResponses(Operation operation) { int okCode = Status.OK.getStatusCode(); String strOkCode = String.valueOf(okCode); Response okResponse = null; for (Entry<String, Response> responseEntry : operation.getResponses().entrySet()) { Response response = responseEntry.getValue(); if (StringUtils.isEmpty(response.getDescription())) { response.setDescription("response of " + responseEntry.getKey()); } if (operation.getResponses().get(strOkCode) != null) { continue; } int statusCode = NumberUtils.toInt(responseEntry.getKey()); if ("default".equals(responseEntry.getKey())) { statusCode = okCode; } if (Family.SUCCESSFUL.equals(Family.familyOf(statusCode))) { okResponse = response; } } if (okResponse != null) { operation.addResponse(strOkCode, okResponse); } } public static void correctResponses(Swagger swagger) { if (swagger.getPaths() == null) { return; } for (Path path : swagger.getPaths().values()) { for (Operation operation : path.getOperations()) { correctResponses(operation); } } } }