Skip to content

Commit ab02b20

Browse files
authored
Merge pull request #2246 from packleader/master
Get namespace from package-info #2150
2 parents 883419f + e6fdeb1 commit ab02b20

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

modules/swagger-core/src/main/java/io/swagger/jackson/ModelResolver.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import javax.xml.bind.annotation.XmlAccessorType;
5757
import javax.xml.bind.annotation.XmlElement;
5858
import javax.xml.bind.annotation.XmlRootElement;
59+
import javax.xml.bind.annotation.XmlSchema;
5960
import java.lang.annotation.Annotation;
6061
import java.lang.reflect.Type;
6162
import java.math.BigDecimal;
@@ -273,6 +274,16 @@ public Model resolve(JavaType type, ModelConverterContext context, Iterator<Mode
273274
if (rootAnnotation.namespace() != null && !"".equals(rootAnnotation.namespace()) && !"##default".equals(rootAnnotation.namespace())) {
274275
xml.namespace(rootAnnotation.namespace());
275276
}
277+
else {
278+
// If namespace was not given in the annotation, look for it in package-info
279+
Package pkg = type.getRawClass().getPackage();
280+
if(pkg != null) {
281+
XmlSchema xmlSchma = pkg.getAnnotation(XmlSchema.class);
282+
if(xmlSchma != null) {
283+
xml.namespace(xmlSchma.namespace());
284+
}
285+
}
286+
}
276287
model.xml(xml);
277288
}
278289
final XmlAccessorType xmlAccessorTypeAnnotation = beanDesc.getClassAnnotations().get(XmlAccessorType.class);
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package io.swagger.jackson;
2+
3+
import com.fasterxml.jackson.databind.JavaType;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import io.swagger.converter.ModelConverterContextImpl;
6+
import io.swagger.models.Link;
7+
import io.swagger.models.Model;
8+
import io.swagger.models.ModelImpl;
9+
import io.swagger.models.Xml;
10+
import org.testng.annotations.DataProvider;
11+
import org.testng.annotations.Test;
12+
13+
import javax.xml.bind.annotation.XmlRootElement;
14+
15+
import static org.testng.Assert.*;
16+
17+
public class ModelResolverTest extends SwaggerTestBase {
18+
19+
@Test(dataProvider = "testXmlNamespaceData")
20+
public void testXmlNamespace(Class clazz, String name, String namespace) throws Exception {
21+
final ObjectMapper mapper = mapper();
22+
final ModelResolver modelResolver = new ModelResolver(mapper);
23+
final ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
24+
25+
final JavaType javaType = mapper.constructType(clazz);
26+
27+
final Model model = modelResolver.resolve(javaType, context, null);
28+
29+
assertTrue(model instanceof ModelImpl);
30+
31+
final Xml xml = ((ModelImpl) model).getXml();
32+
assertNotNull(xml);
33+
assertEquals(xml.getName(), name);
34+
assertEquals(xml.getNamespace(), namespace);
35+
}
36+
37+
@DataProvider
38+
private Object[][] testXmlNamespaceData() {
39+
return new Object[][]{
40+
{Link.class, "link", null},
41+
{TypeWithNamespace.class, "TypeWithNamespace", "http://io.swagger/jackson"},
42+
{TypeWithoutNamespace.class, "TypeWithOutNamespace", "http://io.swagger/jackson/package"}
43+
};
44+
}
45+
46+
@XmlRootElement(name = "TypeWithNamespace", namespace = "http://io.swagger/jackson")
47+
public static class TypeWithNamespace {
48+
}
49+
50+
@XmlRootElement(name = "TypeWithOutNamespace")
51+
public static class TypeWithoutNamespace {
52+
}
53+
54+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
@javax.xml.bind.annotation.XmlSchema(namespace = "http://io.swagger/jackson/package")
2+
package io.swagger.jackson;

0 commit comments

Comments
 (0)