Jaxb 生成的带有可为空字段的源
Jaxb generated sources with nullable fields
我有一个 kotlin 项目,我在其中使用来自 xsd 的 Jaxb 生成的 src 文件。这些生成源的问题是它们有 nullable
字段,但 IDEA 不知道。它可能导致 production
中的错误。要修复它,我们可以在生成的 srs-es 中的所有 getters 添加 @Nullable
注释。
怎样才能优雅地做到?
我做了这个解决方案,它对我有用,但也许有人知道更好的方法?
Gradle kt 任务
tasks.register("nullableForXsdFields") {
group = "code generation"
description = "Add Nullable annotation to generated jaxb files"
actions.add {
val xjcFiles = fileTree("$buildDir/generated-sources/main/xjc")
xjcFiles.forEach { xjcFile ->
var content = xjcFile.readText()
Regex("(public) (\w+|<|>|\*) (get)").findAll(content).distinct()
.forEach { match ->
content = content.replace(
match.groups[0]!!.value,
match.groups[0]!!.value.replace("public ", "public @Nullable ")
)
}.run {
content = content.replace(
"import javax.xml.bind.annotation.XmlType;",
"import javax.xml.bind.annotation.XmlType;\nimport org.jetbrains.annotations.Nullable;"
)
}
xjcFile.writeBytes(content.toByteArray())
}
}
}
tasks.getByName("xjcGeneration").finalizedBy("nullableForXsdFields")
tasks.getByName("compileKotlin").dependsOn("nullableForXsdFields")
tasks.getByName("compileJava").dependsOn("nullableForXsdFields")
xjcGeneration
- 是我从 xsd
生成 src 的插件
我遇到了同样的问题,所以我为 maven jaxb 插件创建了一个扩展
com.github.labai:labai-jsr305-jaxb-plugin
.
此扩展默认将所有生成的包标记为nullable,然后仅使用@NotNull标记那些必填的字段xsd 方案。
您可以在 github 中找到有关如何将其与 Maven 一起使用的更多详细信息
https://github.com/labai/labai-jsr305
我有一个 kotlin 项目,我在其中使用来自 xsd 的 Jaxb 生成的 src 文件。这些生成源的问题是它们有 nullable
字段,但 IDEA 不知道。它可能导致 production
中的错误。要修复它,我们可以在生成的 srs-es 中的所有 getters 添加 @Nullable
注释。
怎样才能优雅地做到?
我做了这个解决方案,它对我有用,但也许有人知道更好的方法?
Gradle kt 任务
tasks.register("nullableForXsdFields") {
group = "code generation"
description = "Add Nullable annotation to generated jaxb files"
actions.add {
val xjcFiles = fileTree("$buildDir/generated-sources/main/xjc")
xjcFiles.forEach { xjcFile ->
var content = xjcFile.readText()
Regex("(public) (\w+|<|>|\*) (get)").findAll(content).distinct()
.forEach { match ->
content = content.replace(
match.groups[0]!!.value,
match.groups[0]!!.value.replace("public ", "public @Nullable ")
)
}.run {
content = content.replace(
"import javax.xml.bind.annotation.XmlType;",
"import javax.xml.bind.annotation.XmlType;\nimport org.jetbrains.annotations.Nullable;"
)
}
xjcFile.writeBytes(content.toByteArray())
}
}
}
tasks.getByName("xjcGeneration").finalizedBy("nullableForXsdFields")
tasks.getByName("compileKotlin").dependsOn("nullableForXsdFields")
tasks.getByName("compileJava").dependsOn("nullableForXsdFields")
xjcGeneration
- 是我从 xsd
我遇到了同样的问题,所以我为 maven jaxb 插件创建了一个扩展
com.github.labai:labai-jsr305-jaxb-plugin
.
此扩展默认将所有生成的包标记为nullable,然后仅使用@NotNull标记那些必填的字段xsd 方案。
您可以在 github 中找到有关如何将其与 Maven 一起使用的更多详细信息 https://github.com/labai/labai-jsr305