wsdl在同一目标命名空间上具有重复的类型定义

时间:2014-07-23 12:16:58

标签: java web-services maven cxf wsdl2java

我在集成第三方Web服务时遇到问题。 我收到以下错误: [错误]无法在项目pcm_portal上执行目标org.apache.cxf:cxf-codegen-plugin:2.4.2:wsdl2java(generate-sources):由JAXB抛出:'string15'已在模式的第305行第2列定义... - > [帮助1]

实际上我理解错误,这个文件包含相同目标命名空间的几个模式,我们可以找到两个模式中定义的相同simpleType(string15)。

这是这样的:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="http://siebel.com/CustomUI" ...>
    <types>
        <!-- ... -->
        <xsd:schema elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            targetNamespace="http://myNs/"
            xmlns:xsdLocal3="http://myNs/">
            <!-- ... -->
            <xsd:simpleType name="string15">
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="15"></xsd:maxLength>
                </xsd:restriction>
            </xsd:simpleType>
            <!-- ... -->
        </xsd:schema>
        <!-- ... -->

        <xsd:schema elementFormDefault="qualified"
            attributeFormDefault="unqualified"
            targetNamespace="http://myNs/"
            xmlns:xsdLocal3="http://myNs/">
            <!-- ... -->
            <xsd:simpleType name="string15">
                <xsd:restriction base="xsd:string">
                    <xsd:maxLength value="15"></xsd:maxLength>
                </xsd:restriction>
            </xsd:simpleType>
            <!-- ... -->
        </xsd:schema>
        <!-- ... -->
    </types>
</definitions>

我的问题是

1)有没有办法让wsdl2java处理这样的文件?

今天我通过maven cxf-codegen-plugin使用它,并配置了这个:

<defaultOptions>
    <extraargs>
        <extraarg>-exsh</extraarg>
        <extraarg>true</extraarg>
        <extraarg>-xjc-npa</extraarg>
    </extraargs>
</defaultOptions>

2)如果没有人知道参考文件可能是我的争论,因为给我wsdl的团队说没有问题(事实上SoapUI对这个WSDL没有任何麻烦)?

1 个答案:

答案 0 :(得分:0)

我过去一直都是同样的问题。

我从&#34; cxf-codegen-plugin&#34;

中排除了模式的生成

e.g。

<extraarg>-nexclude</extraarg>
<extraarg>http://myNs/</extraarg>

我在另一个文件(XSD)中提取了架构,我使用了&#34; maven-plugin-jaxb2&#34;生成它们。

显然,您不能使用相同的命名空间声明两个相同的对象,因此必须将模式与相同的命名空间合并。

我希望这个解决方案有助于解决您的问题。