Java源码示例:io.swagger.v3.oas.models.servers.ServerVariables
示例1
private List<String> mapServersToEndpoint(List<Server> servers) {
List<String> endpoints = new ArrayList<>();
for (Server server : servers) {
ServerVariables serverVariables = server.getVariables();
String serverUrl = server.getUrl();
if (CollectionUtils.isEmpty(serverVariables)) {
endpoints.add(serverUrl);
} else {
List<String> evaluatedUrls = Collections.singletonList(serverUrl);
for (Map.Entry<String, ServerVariable> serverVar : serverVariables.entrySet()) {
evaluatedUrls = evaluateServerUrlsForOneVar(serverVar.getKey(), serverVar.getValue(),
evaluatedUrls);
}
endpoints.addAll(evaluatedUrls);
}
}
return endpoints;
}
示例2
private void appendServersSection(StructuralNode node, List<Server> servers) {
if (null == servers || servers.isEmpty()) return;
Section serversSection = new SectionImpl(node);
serversSection.setTitle(labels.getLabel(SECTION_TITLE_SERVERS));
servers.forEach(server -> {
Section serverSection = new SectionImpl(serversSection);
serverSection.setTitle(italicUnconstrained(labels.getLabel(LABEL_SERVER)) + ": " + server.getUrl());
appendDescription(serverSection, server.getDescription());
ServerVariables variables = server.getVariables();
appendVariables(serverSection, variables);
serversSection.append(serverSection);
});
node.append(serversSection);
}
示例3
private void appendVariables(Section serverSection, ServerVariables variables) {
if (null == variables || variables.isEmpty()) return;
TableImpl serverVariables = new TableImpl(serverSection, new HashMap<String, Object>() {{
put("header-option", "");
put("cols", ".^2a,.^9a,.^3a,.^4a");
}}, new ArrayList<>());
serverVariables.setTitle(labels.getLabel(TABLE_TITLE_SERVER_VARIABLES));
serverVariables.setHeaderRow(labels.getLabel(TABLE_HEADER_VARIABLE), labels.getLabel(TABLE_HEADER_DESCRIPTION),
labels.getLabel(TABLE_HEADER_POSSIBLE_VALUES), labels.getLabel(TABLE_HEADER_DEFAULT)
);
variables.forEach((name, variable) -> {
String possibleValues = String.join(", ", Optional.ofNullable(variable.getEnum()).orElse(Collections.singletonList("Any")));
serverVariables.addRow(name, Optional.ofNullable(variable.getDescription()).orElse(""), possibleValues, variable.getDefault());
});
serverSection.append(serverVariables);
}
示例4
public ServerVariables getServerVariables(ObjectNode obj, String location, ParseResult result){
ServerVariables serverVariables = new ServerVariables();
if (obj == null) {
return null;
}
Set<String> serverKeys = getKeys(obj);
for (String serverName : serverKeys) {
JsonNode serverValue = obj.get(serverName);
ObjectNode server = (ObjectNode) serverValue;
ServerVariable serverVariable = getServerVariable(server, String.format("%s.%s", location, serverName), result);
serverVariables.addServerVariable(serverName,serverVariable);
}
return serverVariables;
}
示例5
private static String extractUrl(Server server, String url, ServerVariables variables, Map<String, String> userVariables) {
Set<String> replacedVariables = new HashSet<>();
Matcher matcher = VARIABLE_PATTERN.matcher(url);
while (matcher.find()) {
if (!replacedVariables.contains(matcher.group())) {
String variableName = matcher.group(1);
ServerVariable variable = variables.get(variableName);
String replacement;
if (variable != null) {
String defaultValue = variable.getDefault();
List<String> enumValues = variable.getEnum() == null ? new ArrayList<>() : variable.getEnum();
if (defaultValue == null && !enumValues.isEmpty()) {
defaultValue = enumValues.get(0);
} else if (defaultValue == null) {
defaultValue = "";
}
replacement = userVariables.getOrDefault(variableName, defaultValue);
if (!enumValues.isEmpty() && !enumValues.contains(replacement)) {
LOGGER.warn("Variable override of '{}' is not listed in the enum of allowed values ({}).", replacement, StringUtils.join(enumValues, ","));
}
} else {
replacement = userVariables.getOrDefault(variableName, "");
}
if (StringUtils.isEmpty(replacement)) {
replacement = "";
LOGGER.warn("No value found for variable '{}' in server definition '{}' and no user override specified, default to empty string.", variableName, server.getUrl());
}
url = url.replace(matcher.group(), replacement);
replacedVariables.add(matcher.group());
matcher = VARIABLE_PATTERN.matcher(url);
}
}
return url;
}
示例6
@Test
public void testGetServerURLWithVariables() {
Server s1 = new Server().url("http://localhost:{port}/").variables(new ServerVariables().addServerVariable("port", new ServerVariable()._default("8080").description("the server port")));
Assert.assertEquals(URLPathUtils.getServerURL(s1, null).toString(), "http://localhost:8080/");
Server s2 = new Server().url("http://{version}.test.me/{version}").variables(new ServerVariables().addServerVariable("version", new ServerVariable()._default("v1")));
Assert.assertEquals(URLPathUtils.getServerURL(s2, null).toString(), "http://v1.test.me/v1");
Server s3 = new Server().url("http://localhost:{port}/{version}").variables(
new ServerVariables().addServerVariable("version", new ServerVariable()._default("v4"))
.addServerVariable("port", new ServerVariable()._default("8080"))
.addServerVariable("other", new ServerVariable()._default("something"))
);
Assert.assertEquals(URLPathUtils.getServerURL(s3, null).toString(), "http://localhost:8080/v4");
Server s4 = new Server().url("http://91.161.147.64/{targetEnv}").variables(new ServerVariables().addServerVariable("targetEnv", new ServerVariable().description("target environment")._enum(Arrays.asList("dev", "int", "prd"))._default("prd")));
Assert.assertEquals(URLPathUtils.getServerURL(s4, null).toString(), "http://91.161.147.64/prd");
Server s5 = new Server().url("https://api.stats.com/{country1}").variables(new ServerVariables().addServerVariable("country1", new ServerVariable()._enum(Arrays.asList("france", "germany", "italy"))));
Assert.assertEquals(URLPathUtils.getServerURL(s5, null).toString(), "https://api.stats.com/france");
Server s6 = new Server().url("https://api.example.com/{wrong}");
Assert.assertEquals(URLPathUtils.getServerURL(s6, null).toString(), "https://api.example.com/");
Server s7 = new Server().url("https://api.example.com/{wrong}").variables(new ServerVariables());
Assert.assertEquals(URLPathUtils.getServerURL(s7, null).toString(), "https://api.example.com/");
Server s8 = new Server().url("https://api.example.com/{wrong}").variables(new ServerVariables().addServerVariable("other", new ServerVariable()._default("something")));
Assert.assertEquals(URLPathUtils.getServerURL(s8, null).toString(), "https://api.example.com/");
Server s9 = new Server().url("https://{user}.example.com/{version}").variables(
new ServerVariables().addServerVariable("version", new ServerVariable()._default("v1"))
.addServerVariable("user", new ServerVariable()._default("{user}")));
Assert.assertEquals(URLPathUtils.getServerURL(s9, null).toString(), "https://{user}.example.com/v1");
}
示例7
private ServerVariables serverVariables(String... entries) {
ServerVariables variables = new ServerVariables();
for (int i = 0; i < entries.length; i+=2) {
String key = entries[i];
String value = "";
if (i+1 < entries.length) {
value = entries[i+1];
}
variables.addServerVariable(key, new ServerVariable()._default(value).description("variable for: " + key));
}
return variables;
}
示例8
@Test
public void shouldCreateUriBuildersFromServerWithVariables() {
// Given
Server server = server("{scheme}://example.com/");
ServerVariables variables = new ServerVariables();
variables.put("scheme", new ServerVariable()._default("http"));
server.setVariables(variables);
List<Server> servers = asList(server);
// When
List<UriBuilder> uriBuilders =
SwaggerConverter.createUriBuilders(servers, EMPTY_URI_BUILDER);
// Then
assertThat(uriBuilders, hasSize(1));
assertUriBuilder(uriBuilders.get(0), "http", "example.com", "/");
}
示例9
@Test
public void testGetServerURLWithVariablesAndUserOverrides() {
Server s1 = new Server().url("http://localhost:{port}/").variables(
serverVariables("port", "8080")
);
Assert.assertEquals(URLPathUtils.getServerURL(s1, new HashMap<String, String>() {{ put("port", "1234"); }}).toString(), "http://localhost:1234/");
Server s2 = new Server().url("http://{version}.test.me/{version}").variables(
serverVariables("version", "v1")
);
Assert.assertEquals(URLPathUtils.getServerURL(s2, new HashMap<String, String>() {{ put("version", "v2" ); }}).toString(), "http://v2.test.me/v2");
Server s3 = new Server().url("http://localhost:{port}/{version}").variables(
serverVariables(
"version", "v4",
"port", "8080",
"other", "something"
)
);
Assert.assertEquals(URLPathUtils.getServerURL(s3, new HashMap<String, String>() {{ put("port", "5678"); }}).toString(), "http://localhost:5678/v4");
Server s4 = new Server().url("http://91.161.147.64/{targetEnv}").variables(
new ServerVariables().addServerVariable("targetEnv", new ServerVariable().description("target environment")._enum(Arrays.asList("dev", "int", "prd"))._default("prd")));
Assert.assertEquals(URLPathUtils.getServerURL(s4, new HashMap<String, String>() {{ put("targetEnv", "int" ); }}).toString(), "http://91.161.147.64/int");
Server s5 = new Server().url("https://api.stats.com/{country1}").variables(
new ServerVariables().addServerVariable("country1", new ServerVariable()._enum(Arrays.asList("france", "germany", "italy")))
);
Assert.assertEquals(URLPathUtils.getServerURL(s5, new HashMap<String, String>() {{ put("country1", "italy" ); }}).toString(), "https://api.stats.com/italy");
Server s6 = new Server().url("https://api.example.com/{wrong}");
Assert.assertEquals(URLPathUtils.getServerURL(s6, new HashMap<String, String>() {{ put("port", "8080" ); }}).toString(), "https://api.example.com/");
Server s7 = new Server().url("https://api.example.com/{wrong}").variables(new ServerVariables());
Assert.assertEquals(URLPathUtils.getServerURL(s7, new HashMap<String, String>() {{ put("", "8080" ); }}).toString(), "https://api.example.com/");
Server s8 = new Server().url("https://api.example.com/{wrong}").variables(
serverVariables("other", "something")
);
Assert.assertEquals(URLPathUtils.getServerURL(s8, new HashMap<String, String>() {{ put("something", "other" ); }}).toString(), "https://api.example.com/");
Server s9 = new Server().url("https://{user}.example.com/{version}").variables(
serverVariables(
"version", "v1",
"user", "{user}"
)
);
Assert.assertEquals(URLPathUtils.getServerURL(s9, new HashMap<String, String>() {{
put("version", "v2" );
put("user", "jim");
}}).toString(), "https://jim.example.com/v2");
}
示例10
protected ServerVariables getServerVariables() {
ServerVariables serverVariables = new ServerVariables();
return serverVariables;
}
示例11
public Server getServer(ObjectNode obj, String location, ParseResult result, String path) {
if (obj == null) {
return null;
}
Server server = new Server();
String value = getString("url", obj, true, location, result);
if(StringUtils.isNotBlank(value)) {
if(!isValidURL(value) && path != null){
try {
final URI absURI = new URI(path);
if("http".equals(absURI.getScheme()) || "https".equals(absURI.getScheme())){
value = absURI.resolve(new URI(value)).toString();
}
} catch (URISyntaxException e) {
result.warning(location,"invalid url : "+value);
}
}
server.setUrl(value);
}
value = getString("description", obj, false, location, result);
if(StringUtils.isNotBlank(value)) {
server.setDescription(value);
}
if (obj.get("variables") != null) {
ObjectNode variables = getObject("variables", obj, false, location, result);
ServerVariables serverVariables = getServerVariables(variables, String.format("%s.%s", location, "variables"), result);
if (serverVariables != null && serverVariables.size() > 0) {
server.setVariables(serverVariables);
}
}
Map <String,Object> extensions = getExtensions(obj);
if(extensions != null && extensions.size() > 0) {
server.setExtensions(extensions);
}
Set<String> keys = getKeys(obj);
for(String key : keys) {
if(!SERVER_KEYS.contains(key) && !key.startsWith("x-")) {
result.extra(location, key, obj.get(key));
}
}
return server;
}