我有以下目录结构
Root
CommonSchema
1.xsd
2.xsd
Service1
XSD
3.xsd ( importing 1 and 2 xsd )
WSDL
A.wsdl ( importing 3.xsd )
Service2
XSD
4.xsd ( importing 1 and 2 xsd )
WSDL
B.wsdl ( importing 4.xsd )我正在尝试生成源代码,并使用XMLBeans+CXF将它们编译成一个jar。CommonSchema文件夹具有由Service1和2共享的架构。
当我试图生成源源时,1和2 xsd的源似乎存在命名冲突,如下所示:
第一次WSDL生成

第二代

对于如何编译这个通用模式,有什么想法吗?
下面是我的Ant脚本:
<target name="cxfWSDLToJava">
<java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
<arg value="-databinding"/>
<arg value="xmlbeans"/>
<arg value="-client"/>
<arg value="-d"/>
<arg value="cxfsrc"/>
<arg value="D:\Generation\Services\CBS-CustAccountInfo-I\WSDL\CBS-CustAccountInfo-I-Concrete.wsdl"/>
<classpath>
<path refid="cxf.classpath"/>
</classpath>
</java>
</target>
<target name="cxfWSDLTXNToJava">
<java classname="org.apache.cxf.tools.wsdlto.WSDLToJava" fork="true">
<arg value="-databinding"/>
<arg value="xmlbeans"/>
<arg value="-client"/>
<arg value="-d"/>
<arg value="cxfsrc"/>
<arg value="D:\Generation\Services\CBS-DirectDebCredTransfer-C\WSDL\CBS-DirectDebCredTransfer-C-Concrete.wsdl"/>
<classpath>
<path refid="cxf.classpath"/>
</classpath>
</java>
</target>我的项目位于:这里下的CXF-代.
整个模式+ WSDL可以在CXF-生成/生成下找到。
发布于 2012-07-26 03:02:33
使用xsdconfig解决我的问题。最后,我有重复的包裹,但它适合我的需要。
生成冲突包的Maven
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}\..\Generation\Services\CBS-DirectDebCredTransfer-C\WSDL\CBS-DirectDebCredTransfer-C-Concrete.wsdl</wsdl>
<extraargs>
<extraarg>-db</extraarg>
<extraarg>xmlbeans</extraarg>
<extraarg>-p</extraarg>
<extraarg>com.xxx.txnpos.ws</extraarg>
</extraargs>
<bindingFiles>
<bindingFile>${basedir}/txnpos.xsdconfig</bindingFile>
</bindingFiles>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>我的xsd配置:
<?xml version="1.0"?>
<xb:config xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config">
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/aggregates/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.aggregates</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/body/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.body</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/elements/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.elements</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/envelope/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.envelope</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/header/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.header</xb:package>
</xb:namespace>
<xb:namespace uri="http://schemas.xxx.com/soa/emf/common/monetaryErrorReponse/">
<xb:package>com.xxx.schemas.soa.emf.txnpost.monetaryErrorReponse</xb:package>
</xb:namespace>
</xb:config>发布于 2012-07-01 12:59:45
我不是蚂蚁专家,所以我不确定我是对的,但我认为问题是,一个目标会向另一个目标卵形。
当运行XmlBeans命令时,如果您像两个单独的命令一样运行它:
wsdl2java -uri my_service1.wsdl
wsdl2java -uri my_service2.wsdl第一个命令将生成一个jar,第二个命令将使用来自第二个wsdl的新代码来实现它。
我认为您正在像这样运行它,这就是为什么您只获得一个wsdl的代码。
您需要将它们合并为一个wsdl (可能是一个包装wsdl),然后从它生成代码。
或者你可以生成两个不同的罐子。
编辑:
稍作修正,显然是只有IBM支持从其他wsdl导入wsdl。。
所以包装器选项不在表中。IMHO,以下是您的选择:
https://stackoverflow.com/questions/11221809
复制相似问题