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