cxf-codegen-plugin 4.0.0 忽略 bindingFile

问题描述 投票:0回答:2

我基于

cxf-codegen-plugin
从 wsdl 创建代码。我使用额外的绑定来

  • 换包装
  • Date
    代替
    XmlGregorianCalender

这适用于版本 3.5.5

当我切换到 4.0.0 时,这不再起作用(使用默认包和

XmlGregorianCalender
)。我在迁移指南中找不到任何相关内容。

这是我的配置

pom.xml

<plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>4.0.0</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>https:url?wsdl</wsdl>
                                    <bindingFiles>
                                        <bindingFile>${basedir}/src/main/resources/bindings.xml</bindingFile>
                                    </bindingFiles>
                                    <extraargs>
                                        <extraarg>-verbose</extraarg>
                                        <extraarg>-p</extraarg>
                                        <extraarg>http://url/service=com.some.package</extraarg>
                                        <extraarg>-xjc-Xts:style:org.apache.commons.lang3.builder.ToStringStyle.DEFAULT_STYLE</extraarg>
                                    </extraargs>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.cxf.xjcplugins</groupId>
                        <artifactId>cxf-xjc-ts</artifactId>
                        <version>4.0.0</version>
                    </dependency>
                </dependencies>
            </plugin>

绑定

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<jaxb:bindings xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:jaxws="http://cxf.apache.org/jaxws"
               version="2.1">

    <jaxb:bindings schemaLocation="https://url.file.xsd"
                   node="/xsd:schema">
        <jaxb:schemaBindings>
            <jaxb:package name="com.some.package.dto" />
        </jaxb:schemaBindings>
        <jaxb:globalBindings>
            <jaxb:javaType name="java.util.Date"
                           xmlType="xsd:dateTime"
                           parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDateTime"
                           printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDateTime" />
            <jaxb:javaType name="java.util.Date"
                           xmlType="xsd:date"
                           parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate"
                           printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate"/>
            <jaxb:javaType name="java.util.Date"
                           xmlType="xsd:time"
                           parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseTime"
                           printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printTime"/>
        </jaxb:globalBindings>
    </jaxb:bindings>

</jaxb:bindings>
wsdl2java cxf-codegen-plugin
2个回答
0
投票

不幸的是,看起来 4.0.0 插件有问题。我遇到了同样的问题 - 绑定文件被忽略了。

我用单一设置测试过它:

总是得到相同的结果: [警告] 警告:文件:/C:/skr/src/main/resources/Service/language.xsd [3,3]:由于 EnumMemberSizeCap 限制,简单类型“LanguageCodeEnum”未映射到枚举。 Facets 计数:501,当前限制:256。您可以使用自定义属性“typesafeEnumMaxMembers”来扩展限制。

所以这个来源被忽略了,没有生成工件。

相同的绑定文件适用于以前 (3.5.5) 版本的插件。


0
投票

我在 4.0.0 版也遇到过同样的问题。似乎所有 javax.* 规范都被 jakarta.* 规范替换了。

所以我意识到我必须将绑定文件中的

xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:jaxws="http://cxf.apache.org/jaxws"
替换为雅加达的:

<jaxb:bindings xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
               xmlns:jaxws="https://jakarta.ee/xml/ns/jaxws"
               version="3.0">

....

</jaxb:bindings>

正如我所看到的官方 apache cxf 文档没有明确提及这一点。但是您可以在 here.

检查 Jakarta XML Web Services WSDL 自定义描述符的 XML Schema
© www.soinside.com 2019 - 2024. All rights reserved.