Skip to content

Commit df96378

Browse files
JAXBElement<T> mapped to T (refs #175)
1 parent c024680 commit df96378

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/DefaultTypeProcessor.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.lang.reflect.*;
77
import java.math.*;
88
import java.util.*;
9+
import javax.xml.bind.JAXBElement;
910

1011

1112
public class DefaultTypeProcessor implements TypeProcessor {
@@ -19,6 +20,16 @@ public Result processType(Type javaType, Context context) {
1920
return new Result(TsType.Date);
2021
}
2122
}
23+
if (javaType instanceof ParameterizedType) {
24+
final ParameterizedType parameterizedType = (ParameterizedType) javaType;
25+
if (parameterizedType.getRawType() instanceof Class) {
26+
final Class<?> javaClass = (Class<?>) parameterizedType.getRawType();
27+
if (JAXBElement.class.isAssignableFrom(javaClass)) {
28+
final Result result = context.processType(parameterizedType.getActualTypeArguments()[0]);
29+
return new Result(result.getTsType(), result.getDiscoveredClasses());
30+
}
31+
}
32+
}
2233
// map JAX-RS standard types to `any`
2334
for (Class<?> cls : JaxrsApplicationParser.getStandardEntityClasses()) {
2435
final Class<?> rawClass = Utils.getRawClassOrNull(javaType);

typescript-generator-core/src/test/java/cz/habarta/typescript/generator/JaxbTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
package cz.habarta.typescript.generator;
33

4+
import javax.xml.bind.JAXBElement;
45
import javax.xml.bind.annotation.*;
56
import org.junit.Assert;
67
import org.junit.Test;
@@ -28,4 +29,36 @@ private static class MyJaxbBean {
2829

2930
}
3031

32+
@Test
33+
public void testJAXBElement() {
34+
final Settings settings = TestUtils.settings();
35+
settings.jsonLibrary = JsonLibrary.jaxb;
36+
final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(ClassWithJAXBElements.class));
37+
Assert.assertTrue(output.contains("ExternalReference: string"));
38+
Assert.assertTrue(output.contains("UserInformation: UserType"));
39+
Assert.assertTrue(output.contains("Source: EndPointType"));
40+
Assert.assertTrue(output.contains("AdditionalContextInfo: AdditionalContextType"));
41+
}
42+
43+
@XmlRootElement
44+
private static class ClassWithJAXBElements {
45+
@XmlElement(name = "ExternalReference")
46+
protected String externalReference;
47+
@XmlElementRef(name = "UserInformation", type = JAXBElement.class, required = false)
48+
protected JAXBElement<UserType> userInformation;
49+
@XmlElementRef(name = "Source", type = JAXBElement.class, required = false)
50+
protected JAXBElement<EndPointType> source;
51+
@XmlElementRef(name = "AdditionalContextInfo", type = JAXBElement.class, required = false)
52+
protected JAXBElement<AdditionalContextType> additionalContextInfo;
53+
}
54+
55+
private static class UserType {
56+
}
57+
58+
private static class EndPointType {
59+
}
60+
61+
private static class AdditionalContextType {
62+
}
63+
3164
}

0 commit comments

Comments
 (0)