Skip to content
This repository was archived by the owner on Feb 12, 2022. It is now read-only.

Commit 44df0e4

Browse files
committed
Also enable model extensions in existing keys
Use a LinkedHashMap to ensure that fields from model sub-classes are preferred over fields from base classes.
1 parent e812601 commit 44df0e4

File tree

3 files changed

+58
-2
lines changed

3 files changed

+58
-2
lines changed

src/main/java/org/raml/parser/builder/TupleBuilderFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import java.lang.reflect.Field;
1919
import java.lang.reflect.ParameterizedType;
2020
import java.lang.reflect.Type;
21-
import java.util.HashMap;
21+
import java.util.LinkedHashMap;
2222
import java.util.List;
2323
import java.util.Map;
2424

@@ -38,7 +38,7 @@ public class TupleBuilderFactory extends AbstractFactory
3838
public void addBuildersTo(Class<?> pojoClass, TupleBuilder parent)
3939
{
4040
final List<Field> declaredFields = ReflectionUtils.getInheritedFields(pojoClass);
41-
final Map<String, TupleBuilder<?, ?>> innerBuilders = new HashMap<String, TupleBuilder<?, ?>>();
41+
final Map<String, TupleBuilder<?, ?>> innerBuilders = new LinkedHashMap<String, TupleBuilder<?, ?>>();
4242
for (Field declaredField : declaredFields)
4343
{
4444
Scalar scalar = declaredField.getAnnotation(Scalar.class);

src/test/java/org/raml/parser/visitor/RamlDocumentBuilderTestCase.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,19 @@
1616
package org.raml.parser.visitor;
1717

1818
import static org.hamcrest.CoreMatchers.is;
19+
import static org.hamcrest.CoreMatchers.notNullValue;
1920
import static org.junit.Assert.assertThat;
2021

22+
import java.util.ArrayList;
23+
import java.util.List;
24+
import java.util.Map;
25+
2126
import org.junit.Test;
2227
import org.raml.model.Raml;
28+
import org.raml.model.SecurityScheme;
29+
import org.raml.parser.annotation.Mapping;
2330
import org.raml.parser.annotation.Scalar;
31+
import org.raml.parser.annotation.Sequence;
2432
import org.raml.parser.builder.AbstractRamlTestCase;
2533

2634
public class RamlDocumentBuilderTestCase extends AbstractRamlTestCase
@@ -34,6 +42,15 @@ public void parseExtendedModel()
3442
assertThat(raml.getExtension(), is("additional data")); // non-standard property
3543
}
3644

45+
@Test
46+
public void parseModelWithExtensionInExistingKey()
47+
{
48+
RamlExt2 raml = (RamlExt2) new RamlDocumentBuilder(RamlExt2.class).build("org/raml/parser/visitor/extended.yaml");
49+
SecuritySchemeExt scheme = raml.getSecuritySchemesExt().get(0).get("extended");
50+
assertThat(scheme.getDescription(), is(notNullValue()));
51+
assertThat(scheme.getExtension().get("key1"), is("foo"));
52+
}
53+
3754
public static class RamlExt extends Raml
3855
{
3956
private static final long serialVersionUID = 533345138584973337L;
@@ -49,4 +66,36 @@ public void setExtension(String extension) {
4966
this.extension = extension;
5067
}
5168
}
69+
70+
public static class RamlExt2 extends Raml
71+
{
72+
private static final long serialVersionUID = 1451208177799874616L;
73+
74+
@Sequence(alias = "securitySchemes")
75+
private List<Map<String, SecuritySchemeExt>> securitySchemesExt = new ArrayList<Map<String, SecuritySchemeExt>>();
76+
77+
public List<Map<String, SecuritySchemeExt>> getSecuritySchemesExt() {
78+
return securitySchemesExt;
79+
}
80+
81+
public void setSecuritySchemesExt(List<Map<String, SecuritySchemeExt>> securitySchemesExt) {
82+
this.securitySchemesExt = securitySchemesExt;
83+
}
84+
}
85+
86+
public static class SecuritySchemeExt extends SecurityScheme
87+
{
88+
private static final long serialVersionUID = -7059558387326732177L;
89+
90+
@Mapping
91+
private Map<String,String> extension;
92+
93+
public Map<String, String> getExtension() {
94+
return extension;
95+
}
96+
97+
public void setExtension(Map<String, String> extension) {
98+
this.extension = extension;
99+
}
100+
}
52101
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
11
#%RAML 0.8
22
title: extended model
33
extension: additional data
4+
5+
securitySchemes:
6+
- extended:
7+
description: Security schema documentation
8+
extension:
9+
key1: foo
10+
key2: bar

0 commit comments

Comments
 (0)