Skip to content

Commit

Permalink
Support for Jakarta JAXB 3 annotations, JAXB also updated internally
Browse files Browse the repository at this point in the history
dependencies versions specified using `<dependencyManagement>`
  • Loading branch information
vojtechhabarta committed Dec 1, 2021
1 parent 2c16098 commit 8b7ef48
Show file tree
Hide file tree
Showing 8 changed files with 166 additions and 52 deletions.
78 changes: 77 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,86 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<kotlin.version>1.5.31</kotlin.version>
<junit.version>5.8.1</junit.version>
<github.global.server>github</github.global.server>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-bom</artifactId>
<version>3.0.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>jakarta.activation</groupId>
<artifactId>jakarta.activation-api</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.8.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson</groupId>
<artifactId>jackson-bom</artifactId>
<version>2.13.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>3.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-bom</artifactId>
<version>${kotlin.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>

<plugins>
Expand Down
45 changes: 12 additions & 33 deletions typescript-generator-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,7 @@
<name>typescript-generator-core</name>

<properties>
<javax.activation.version>1.2.0</javax.activation.version>
<jaxb.version>2.3.2</jaxb.version>
<jackson1.version>1.9.13</jackson1.version>
<jackson2.version>2.13.0</jackson2.version>
<jersey.version>3.0.3</jersey.version>
<graalvm.version>21.3.0</graalvm.version>
<vavr.version>0.10.3</vavr.version>
</properties>
Expand All @@ -30,39 +26,32 @@
<version>${jackson1.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson2.version}</version>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>${jaxb.version}</version>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxb.version}</version>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>${jaxb.version}</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>${javax.activation.version}</version>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.github.classgraph</groupId>
Expand All @@ -77,12 +66,10 @@
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>jakarta.json.bind</groupId>
Expand All @@ -104,7 +91,6 @@
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
Expand All @@ -122,36 +108,31 @@
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${jackson2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jdk-http</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-binding</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>${jersey.version}</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -182,7 +163,6 @@
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-guava</artifactId>
<version>${jackson2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
Expand All @@ -194,7 +174,6 @@
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>${jackson2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down Expand Up @@ -227,9 +206,9 @@
</executions>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.14.0</version>
<groupId>com.evolvedbinary.maven.jvnet</groupId>
<artifactId>jaxb30-maven-plugin</artifactId>
<version>0.15.0</version>
<executions>
<execution>
<id>generate</id>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import java.util.OptionalLong;
import java.util.UUID;
import java.util.stream.Collectors;
import javax.xml.bind.JAXBElement;


public class DefaultTypeProcessor implements TypeProcessor {
Expand Down Expand Up @@ -235,7 +234,7 @@ private static LoadedDataLibraries getKnownClasses() {
Arrays.asList(Collection.class),
Arrays.asList(Map.class),
Arrays.asList(Optional.class),
Arrays.asList(JAXBElement.class),
Arrays.asList(jakarta.xml.bind.JAXBElement.class, javax.xml.bind.JAXBElement.class),
Arrays.asList(),
Arrays.asList()
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import com.fasterxml.jackson.databind.deser.DefaultDeserializationContext;
import com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap;
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair;
import com.fasterxml.jackson.databind.jsontype.NamedType;
import com.fasterxml.jackson.databind.jsontype.SubtypeResolver;
import com.fasterxml.jackson.databind.jsontype.TypeIdResolver;
Expand All @@ -45,6 +46,7 @@
import com.fasterxml.jackson.databind.ser.BeanSerializerFactory;
import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationIntrospector;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
import cz.habarta.typescript.generator.ExcludingTypeProcessor;
import cz.habarta.typescript.generator.Jackson2ConfigurationResolved;
Expand Down Expand Up @@ -132,8 +134,10 @@ public Jackson2Parser(Settings settings, TypeProcessor commonTypeProcessor, List
}
}
if (useJaxbAnnotations) {
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(objectMapper.getTypeFactory());
objectMapper.setAnnotationIntrospector(introspector);
final AnnotationIntrospector jakartaIntrospector = new JakartaXmlBindAnnotationIntrospector(objectMapper.getTypeFactory());
final AnnotationIntrospector javaxIntrospector = new JaxbAnnotationIntrospector(objectMapper.getTypeFactory());
final AnnotationIntrospectorPair pair = new AnnotationIntrospectorPair(jakartaIntrospector, javaxIntrospector);
objectMapper.setAnnotationIntrospector(pair);
}
final Jackson2ConfigurationResolved config = settings.jackson2Configuration;
if (config != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
import cz.habarta.typescript.generator.xmldoclet.Package;
import cz.habarta.typescript.generator.xmldoclet.Root;
import cz.habarta.typescript.generator.xmldoclet.TagInfo;
import jakarta.xml.bind.JAXB;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.xml.bind.JAXB;


public class Javadoc {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@ private static Map<Class<?>, TsType> getStandardEntityClassesMapping() {
map.put(java.io.File.class, TsType.Any);
map.put(javax.activation.DataSource.class, TsType.Any);
map.put(javax.xml.transform.Source.class, TsType.Any);
map.put(jakarta.xml.bind.JAXBElement.class, null);
map.put(javax.xml.bind.JAXBElement.class, null);
map.put(MultivaluedMap.class, TsType.Any);
map.put(javax(MultivaluedMap.class), TsType.Any);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@

package cz.habarta.typescript.generator;

import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElementRef;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlTransient;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;


public class JaxbV3Test {

@Test
public void test() {
final Settings settings = TestUtils.settings();
settings.jsonLibrary = JsonLibrary.jaxb;
final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(MyJaxbBean.class));
Assertions.assertTrue(output.contains("king"));
Assertions.assertFalse(output.contains("age"));
}

@XmlRootElement
private static class MyJaxbBean {

@XmlElement(name = "king")
public String name;

@XmlTransient
public int age;

}

@Test
public void testJAXBElement() {
final Settings settings = TestUtils.settings();
settings.jsonLibrary = JsonLibrary.jaxb;
final String output = new TypeScriptGenerator(settings).generateTypeScript(Input.from(ClassWithJAXBElements.class));
Assertions.assertTrue(output.contains("ExternalReference: string"));
Assertions.assertTrue(output.contains("UserInformation: UserType"));
Assertions.assertTrue(output.contains("Source: EndPointType"));
Assertions.assertTrue(output.contains("AdditionalContextInfo: AdditionalContextType"));
}

@XmlRootElement
private static class ClassWithJAXBElements {
@XmlElement(name = "ExternalReference")
protected String externalReference;
@XmlElementRef(name = "UserInformation", type = JAXBElement.class, required = false)
protected JAXBElement<UserType> userInformation;
@XmlElementRef(name = "Source", type = JAXBElement.class, required = false)
protected JAXBElement<EndPointType> source;
@XmlElementRef(name = "AdditionalContextInfo", type = JAXBElement.class, required = false)
protected JAXBElement<AdditionalContextType> additionalContextInfo;
}

private static class UserType {
}

private static class EndPointType {
}

private static class AdditionalContextType {
}

}
14 changes: 1 addition & 13 deletions typescript-generator-spring/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,6 @@
<properties>
</properties>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<!--compile dependencies-->
<dependency>
Expand Down Expand Up @@ -66,7 +54,7 @@
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit.version}</version>

<scope>test</scope>
</dependency>
<dependency>
Expand Down

0 comments on commit 8b7ef48

Please # to comment.