0

我正在尝试让 CXF (2.7.7) 使用 JiBX (1.2.5) 进行数据绑定。文档有点粗略,但有报道称它成功了。一个问题是 CXF 不会将配置传递给 JiBX 代码生成器,因此如果您需要做一些需要自定义的事情,例如将 Joda DateTime 映射到 XML Schema 日期,您需要能够告诉 CXF 忽略特定的命名空间,然后通过单独调用 JiBX 来处理这些问题。

我看到的示例为此使用了 CXF -nexclude 标志,如

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            <id>generateSources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
            <configuration>
                <sourceRoot>${generated-sources.dir}/cxf</sourceRoot>
                <wsdlRoot>${wsdl.dir}</wsdlRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>${wsdl.dir}/GetCounters.wsdl</wsdl>
                        <dataBinding>jibx</dataBinding>
                        <extraargs>
                            <extraarg>-nexclude</extraarg>
                            <extraarg>http://www.example.com/counters/</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

我已经尝试过命名空间的内联和导入版本,但 -nexclude 标志似乎不适用于 JiBX。一种选择可能是让 JiBX 在不调用 CXF 插件的情况下执行整个 WSDL,但显然这会在生成的服务代码中产生问题。一个丑陋的解决方法可能是让 JiBX 只为这个命名空间中的类重新生成代码,覆盖由 CXF 创建的代码。

可以使 -nexclude 标志起作用吗?

4

1 回答 1

0

我在使用 jaxb 时遇到了类似的问题。这对我有用:

将额外参数从 wsdlOption 部分移到 defaultOptions 部分。

<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cfx.codegen.version}</version>
<executions>
    <execution>
        <id>generate-sources</id>
        <phase>generate-sources</phase>
        <configuration>
            <defaultOptions>
                <extraargs>
                    <extraarg>-nexclude</extraarg>
                    <extraarg>http://domain.company.org/v1/schema1</extraarg>
                    <extraarg>-nexclude</extraarg>
                    <extraarg>http://domain.company.org/v1/schema2</extraarg>
                </extraargs>
            </defaultOptions>
            <wsdlOptions>
                <wsdlOption>
                    <wsdlArtifact>
                        <groupId>org.company</groupId>
                        <artifactId>application-contract</artifactId>
                        <version>${contract.version}</version>
                        <type>wsdl</type>
                    </wsdlArtifact>
                </wsdlOption>
            </wsdlOptions>
            <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
        </configuration>
        <goals>
            <goal>wsdl2java</goal>
        </goals>
    </execution>
</executions>

于 2013-11-06T18:57:18.973 回答