2013-04-15 93 views
2

我想從使用Axis 1.4的WSDL文件(我沒有其他選擇,甚至不能使用Axis 2)創建客戶端項目並獲得關注錯誤。任何人都可以建議我如何解決它? WSDL文件由供應商提供。org.apache.axis.wsdl.toJava.DuplicateFileException:重複的文件名:

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) 
+0

您可能正在體驗[此錯誤](https://issues.apache.org/jira/browse/AXIS-2377)。 – Cebence

+0

感謝您的回覆!有什麼方法可以解決它嗎?我的意思是通過修改WSDL代碼?是否有可能通過使用Axis 2代碼修復Axis 1.4錯誤(我認爲他們修復了Axis 2中的這個錯誤)。請給我一些意見。我被困在這裏,我也沒有其他選擇。我應該使用Axis 1.4生成客戶端代碼。感謝您的友好合作。 –

+0

您應該檢查WSDL並查看問題是否可以指向特定行。將Axis 2代碼注入舊版本很可能不起作用。您可能想嘗試使用最新的1.x版本來生成代碼,它應該足夠兼容。 – Cebence

回答

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" /> 
    ... 

當你寫複雜類型的名稱爲「PascalCase」的一點是,它與另一個衝突!

3

軸心國1.4的bug描述(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類沒有錯誤。如有必要,您可以稍後重構它們。

0

當您嘗試使用具有相同元素名稱的wsdl生成java客戶端時,會發生此問題。請更改元素名稱並嘗試。否則,你可以使用eclipse工具來生成java客戶端。它會自動檢測相同的元素名稱併爲其創建單獨的包。 使用Eclipse生成Java客戶端:右鍵單擊wsdl文件> Web服務>生成客戶端。 這應該對你有所幫助。