使用JiBX作为CXF数据库时,是否包括工作?

时间:2013-10-15 02:10:49

标签: wsdl cxf jibx

我试图让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标志吗?

1 个答案:

答案 0 :(得分:0)

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

将extraargs移出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>