首页 > 解决方案 > 修改gradle应用中wsdl和xsd生成的java类的包名

问题描述

我正在开发一个使用 的应用程序Gradle kotlin dsl,即build.gradle在 Kotlin 中。我有一个导入多个 XSD 的 WSDL 文件。编译时,Java 类会在默认位置(在 XSD 中提到)生成。我的要求是每个 XSD 的 Java 类都应该在自定义位置生成。

我指的是另一个 Maven 项目。以下插件用于实现我的要求。

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.1.5</version>
    <executions>
        <execution>
            <id>generate-sources-sample</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated-sources</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${basedir}/src/main/resources/wsdl_file_name.wsdl</wsdl>
                        <extraargs>
                            <extraarg>-client</extraarg>
                            <extraarg>-p</extraarg>
                            <extraarg>urn:namespace:of:xsd:one=com.first.xsd.from.wsdl</extraarg>
                            <extraarg>-p</extraarg>
                            <extraarg>urn:namespace:of:xsd:one=com.second.xsd.from.wsdl</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

我尝试使用 wsdl2Java 任务来分配自定义位置。我无法使用该任务,因为它需要 CXF。它可能会导致我的应用程序中的 jar 冲突。

extra["cxfVersion"] = "3.1.5"
project.wsdl2javaExt {
cxfVersion = "${property("cxfVersion")}"
}

tasks.getByName<no.nils.wsdl2java.Wsdl2JavaTask>("wsdl2java") {
wsdlDir = file("$projectDir/src/main/resources/xsd/trip") // wslds location
generatedWsdlDir = file("$projectDir/src/main/generated-sources/xjc/newpackage") // store generates java classes to
wsdlsToGenerate = arrayListOf(
        arrayListOf("$wsdlDir/wsdl_file_name.wsdl"),
        arrayListOf("-xjc", "-autoNameResolution",
                "$wsdlDir/wsdl_file_name.wsdl")
        )
}

请指导我在 Gradle 中获得相同的行为。

标签: gradlejaxbwsdlcxfwsdl2java

解决方案


我已经通过在我的应用程序的 binding.xjb 文件中添加自定义位置来解决它。以下更改对我有用。

    <jaxb:bindings xmlns:tns="urn:namespace:of:xsd:one" scd="x-schema::tns">
            <jaxb:schemaBindings>
                <jaxb:package name="com.first.xsd.from.wsdl"/>
            </jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings xmlns:tns="urn:namespace:of:xsd:two" scd="x-schema::tns">
            <jaxb:schemaBindings>
                <jaxb:package name="com.second.xsd.from.wsdl"/>
            </jaxb:schemaBindings>
</jaxb:bindings>

推荐阅读