Skip to content

Commit 8ef1343

Browse files
committed
use Jackson for serialization, continue to use GSON for users of this client
1 parent dda7ff6 commit 8ef1343

File tree

4 files changed

+24
-18
lines changed

4 files changed

+24
-18
lines changed

kotlin-jira-client/kotlin-jira-client-sdk/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,16 @@
2626
<!-- <version>defined by the platform dependency management </version> -->
2727
<scope>provided</scope>
2828
</dependency>
29+
<dependency>
30+
<groupId>com.fasterxml.jackson.core</groupId>
31+
<artifactId>jackson-databind</artifactId>
32+
<version>${fasterxml.jackson.version}</version>
33+
</dependency>
34+
<dependency>
35+
<groupId>com.fasterxml.jackson.module</groupId>
36+
<artifactId>jackson-module-kotlin</artifactId>
37+
<version>${fasterxml.jackson.version}</version>
38+
</dependency>
2939

3040
<dependency>
3141
<groupId>com.atlassian.jira</groupId>

kotlin-jira-client/kotlin-jira-client-sdk/src/main/kotlin/com/linkedplanet/kotlinjiraclient/sdk/util/IssueJsonConverter.kt

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,14 @@ import com.atlassian.jira.issue.fields.rest.json.beans.JiraBaseUrls
2929
import com.atlassian.jira.rest.v2.issue.IncludedFields
3030
import com.atlassian.jira.rest.v2.issue.IssueBean
3131
import com.atlassian.jira.rest.v2.issue.builder.BeanBuilderFactory
32-
import com.google.gson.*
32+
import com.fasterxml.jackson.databind.JsonNode
33+
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
34+
import com.google.gson.JsonObject
35+
import com.google.gson.JsonParser as GsonJsonParser
3336
import com.linkedplanet.kotlinjiraclient.api.model.IssueQueryParams
3437
import com.linkedplanet.kotlinjiraclient.sdk.field.FieldAccessorImpl
3538
import org.slf4j.LoggerFactory
3639
import javax.ws.rs.core.UriBuilder
37-
import javax.xml.bind.annotation.XmlTransient
3840

3941
/**
4042
* Converts a Jira Issue to Json.
@@ -65,8 +67,6 @@ class IssueJsonConverter {
6567
}
6668
private val jiraBaseUrls: JiraBaseUrls = ComponentAccessor.getComponent(JiraBaseUrls::class.java)
6769
private val uriBuilder: UriBuilder = UriBuilder.fromPath(jiraBaseUrls.restApi2BaseUrl())
68-
private val gson = setupGson()
69-
7070

7171
@Throws(FieldException::class)
7272
fun createJsonIssue(
@@ -80,7 +80,11 @@ class IssueJsonConverter {
8080
this.addOrderableFieldsToBean(issueBean, issue)
8181
this.addAvailableNavigableFieldsToBean(issueBean, issue)
8282

83-
return gson.toJsonTree(issueBean).asJsonObject
83+
// Jackson is the official way now to serialize Beans. GSON will fail due to infinite loops in the model.
84+
val jackson = jacksonObjectMapper()
85+
val jacksonJson: JsonNode = jackson.valueToTree(issueBean)
86+
87+
return GsonJsonParser.parseString(jacksonJson.toString()).asJsonObject // expose as GSON for API compatibility
8488
}
8589

8690
@Throws(FieldException::class)
@@ -111,17 +115,4 @@ class IssueJsonConverter {
111115
bean.addField(this, json, false)
112116
}
113117
}
114-
115-
private fun setupGson() =
116-
GsonBuilder()
117-
.setExclusionStrategies(object : ExclusionStrategy {
118-
override fun shouldSkipField(f: FieldAttributes?): Boolean {
119-
return f?.getAnnotation(XmlTransient::class.java) != null
120-
}
121-
122-
override fun shouldSkipClass(clazz: Class<*>?): Boolean {
123-
return false
124-
}
125-
})
126-
.create()
127118
}

kotlin-jira-client/kotlin-jira-client-test-sdk/pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,9 @@
204204
<configuration>
205205
<banningExcludes>
206206
<exclude>com.google.code.gson:gson</exclude>
207+
<exclude>com.fasterxml.jackson.core:jackson-core</exclude>
208+
<exclude>com.fasterxml.jackson.core:jackson-databind</exclude>
209+
<exclude>com.fasterxml.jackson.core:jackson-annotations</exclude>
207210
</banningExcludes>
208211
<productVersion>${jira.version}</productVersion>
209212
<productDataVersion>${jira.version}</productDataVersion>

pom.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
<insight.version>10.12.1-QR-0157</insight.version>
4242
<confluence.version>9.2.3</confluence.version>
4343
<atlassian-plugins-osgi-testrunner.version>2.0.9</atlassian-plugins-osgi-testrunner.version>
44+
<!-- fasterxml.jackson.version is defined inside platform 6.5 deps, but not exposed -->
45+
<fasterxml.jackson.version>2.16.2</fasterxml.jackson.version>
4446
</properties>
4547

4648
<dependencies>

0 commit comments

Comments
 (0)