Skip to content

Commit 79c6802

Browse files
Support for JSON classes written using JAXB (closes #5)
1 parent 1daa88c commit 79c6802

File tree

5 files changed

+59
-7
lines changed

5 files changed

+59
-7
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@
33

44

55
public enum JsonLibrary {
6-
jackson1, jackson2
6+
jackson1, jackson2, jaxb
77
}

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

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,24 @@ public TypeProcessor getTypeProcessor() {
6868

6969
public ModelParser getModelParser() {
7070
if (modelParser == null) {
71-
if (settings.jsonLibrary == JsonLibrary.jackson2) {
72-
modelParser = new Jackson2Parser(settings, getTypeProcessor());
73-
} else {
74-
modelParser = new Jackson1Parser(settings, getTypeProcessor());
75-
}
71+
modelParser = createModelParser();
7672
}
7773
return modelParser;
7874
}
7975

76+
private ModelParser createModelParser() {
77+
switch (settings.jsonLibrary) {
78+
case jackson1:
79+
return new Jackson1Parser(settings, getTypeProcessor());
80+
case jackson2:
81+
return new Jackson2Parser(settings, getTypeProcessor());
82+
case jaxb:
83+
return new Jackson2Parser(settings, getTypeProcessor(), /*useJaxbAnnotations*/ true);
84+
default:
85+
throw new RuntimeException();
86+
}
87+
}
88+
8089
public ModelCompiler getModelCompiler() {
8190
if (modelCompiler == null) {
8291
modelCompiler = new ModelCompiler(settings, getTypeProcessor());

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/parser/Jackson2Parser.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.fasterxml.jackson.annotation.JsonTypeInfo;
66
import com.fasterxml.jackson.databind.*;
77
import com.fasterxml.jackson.databind.ser.*;
8+
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
89
import cz.habarta.typescript.generator.*;
910
import java.lang.annotation.Annotation;
1011
import java.lang.reflect.Member;
@@ -17,7 +18,15 @@ public class Jackson2Parser extends ModelParser {
1718
private final ObjectMapper objectMapper = new ObjectMapper();
1819

1920
public Jackson2Parser(Settings settings, TypeProcessor typeProcessor) {
21+
this(settings, typeProcessor, false);
22+
}
23+
24+
public Jackson2Parser(Settings settings, TypeProcessor typeProcessor, boolean useJaxbAnnotations) {
2025
super(settings, typeProcessor);
26+
if (useJaxbAnnotations) {
27+
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(objectMapper.getTypeFactory());
28+
objectMapper.setAnnotationIntrospector(introspector);
29+
}
2130
}
2231

2332
@Override
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
package cz.habarta.typescript.generator;
3+
4+
import javax.xml.bind.annotation.*;
5+
import org.junit.Assert;
6+
import org.junit.Test;
7+
8+
9+
public class JaxbTest {
10+
11+
@Test
12+
public void test() {
13+
final Settings settings = TestUtils.settings();
14+
settings.jsonLibrary = JsonLibrary.jaxb;
15+
final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(MyJaxbBean.class));
16+
Assert.assertTrue(output.contains("king"));
17+
Assert.assertFalse(output.contains("age"));
18+
}
19+
20+
@XmlRootElement
21+
private static class MyJaxbBean {
22+
23+
@XmlElement(name = "king")
24+
public String name;
25+
26+
@XmlTransient
27+
public int age;
28+
29+
}
30+
31+
}

typescript-generator-maven-plugin/src/main/java/cz/habarta/typescript/generator/maven/GenerateMojo.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@ public class GenerateMojo extends AbstractMojo {
103103

104104
/**
105105
* Library used in JSON classes.
106-
* Supported values are 'jackson1', 'jackson2'.
106+
* Supported values are
107+
* 'jackson1' (annotations from 'org.codehaus.jackson.annotate' package),
108+
* 'jackson2' (annotations from 'com.fasterxml.jackson.annotation' package),
109+
* `jaxb` (annotations from 'javax.xml.bind.annotation' package).
107110
* Required parameter, recommended value is 'jackson2'.
108111
*/
109112
@Parameter(required = true)

0 commit comments

Comments
 (0)