org.apache.axis.wsdl.toJava.DuplicateFileException:重复的文件名:

时间:2013-04-15 21:30:39

标签: java web-services wsdl wsdl2java

我正在尝试使用Axis 1.4从WSDL文件创建客户端项目(我没有其他选择,甚至不能使用Axis 2)并且出现以下错误。任何人都可以建议我如何解决它? WSDL文件由供应商提供。

org.apache.axis.wsdl.toJava.DuplicateFileException: Duplicate file name: C:\Documents and Settings\My Documents\CalculateTax\com\NewProj\CompanyCodeType.java.  
Hint: you may have mapped two namespaces with elements of the same name to the same package name.
    at org.apache.axis.wsdl.toJava.JavaWriter.generate(JavaWriter.java:110)
    at org.apache.axis.wsdl.toJava.JavaBeanWriter.generate(JavaBeanWriter.java:1405)
    at org.apache.axis.wsdl.toJava.JavaTypeWriter.generate(JavaTypeWriter.java:113)
    at org.apache.axis.wsdl.toJava.JavaGeneratorFactory$Writers.generate(JavaGeneratorFactory.java:421)
    at org.apache.axis.wsdl.gen.Parser.generateTypes(Parser.java:547)
    at org.apache.axis.wsdl.gen.Parser.generate(Parser.java:432)
    at org.apache.axis.wsdl.gen.Parser.access$000(Parser.java:45)
    at org.apache.axis.wsdl.gen.Parser$WSDLRunnable.run(Parser.java:362)
    at java.lang.Thread.run(Unknown Source)

3 个答案:

答案 0 :(得分:3)

Axis 1.4错误描述是(https://issues.apache.org/jira/browse/AXIS-2606

Hint: you may have mapped two namespaces with elements of the same name to the same package name.

因此,你可以通过省略可选参数

来解决这个问题
-p, --package <argument>
    override all namespace to package mappings, use this package
     name instead

...它将生成您的WSDL类而不会出错。如有必要,您可以稍后重构它们。

答案 1 :(得分:2)

您不必使用Axis 2.

例如,如果你有像这样的wsdl的一部分:

  ...
  <xs:complexType name="Address">
    <xs:sequence>
      <xs:element name="Country" type="xs:string"/>
      <xs:element name="City" type="xs:string"/>
      <xs:element name="Town" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="address">
    <xs:sequence>
      <xs:element name="leftSideOfAt" type="xs:string"/>
      <xs:element name="domain" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="OwnerAddress" type="tns:Address" />
  <xs:element name="EmailAddress" type="tns:address" />
  <xs:element name="CompanyEmailAddress" type="tns:address" />
  ...

这是一个合法的WSDL定义,但Axis失败了。 您可以通过重命名complexTypes来解决此问题。对于上面的例子:

  ...
  <xs:complexType name="Address">
    <xs:sequence>
      <xs:element name="Country" type="xs:string"/>
      <xs:element name="City" type="xs:string"/>
      <xs:element name="Town" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Email">
    <xs:sequence>
      <xs:element name="leftSideOfAt" type="xs:string"/>
      <xs:element name="domain" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="OwnerAddress" type="tns:Address" />
  <xs:element name="EmailAddress" type="tns:Email" />
  <xs:element name="CompanyEmailAddress" type="tns:Email" />
  ...

关键是当你将complexType的名称写为“ PascalCase ”时,它会与另一个名称冲突!

答案 2 :(得分:0)

当您尝试使用具有相同元素名称的wsdl生成Java客户端时,会出现此问题。请更改元素名称并尝试。否则,您可以使用eclipse工具生成Java客户端。它将自动检测相同的元素名称并为其创建单独的包。 使用Eclipse生成Java客户端:右键单击wsdl文件&gt; Web服务&gt;生成客户端。 这应该对你有帮助。