2

我正在尝试使用 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)
4

3 回答 3

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 类而不会出错。如有必要,您可以稍后重构它们。

于 2014-09-27T08:05:14.493 回答
2

您不必使用轴 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 ”时,它会与另一个名称冲突!

于 2014-02-19T08:31:14.180 回答
0

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

于 2016-05-23T07:37:29.520 回答