2010-03-29 57 views
2

我有一個遺留的使用class mypackage.Foo的Java應用程序。我希望該應用程序使用返回Foo實例的Web服務。要連接到這個Web服務,我使用WSDL上的wsimport來生成工件,並且它給了我另一個Foo.java文件。理想情況下,我想告訴wsimport生成使用原始Foo的工件,並且不生成任何其他Foo文件,但我還沒有找到辦法做到這一點。如何協調Java應用程序中的兩個Foo文件?看來我的選擇是:如何協調Java Web服務中原始文件和生成文件之間的衝突?

1)把生成的Foo文件放在另一個包中。但隨後將otherpackage.Foo分配給mypackage.Foo變量失敗

2)使用生成的Foo而不是原始Foo。在某些情況下,這似乎是最好的解決方案,但最初的Foo具有不在生成的Foo中的功能。此外,進行應用程序範圍的變更是不可行的。

3)使用第一個選項,並編寫一個方法手動將otherpackage.Foo的字段複製到mypackage.Foo中。如果一切都失敗了,這將是我所做的,但似乎非常不雅。

我確定我錯過了一個簡單的最佳實踐。感謝任何見解!

+0

想,如果你曾經得到一個滿意的答覆這個使用的wsimport?我有同樣的問題(http://stackoverflow.com/questions/2642583/correct-use-of-wsdl-generated-sources) – 2010-04-20 04:19:29

+0

一個同事遊戲我一個工作的解決方案,它使用綁定將複雜的WSDL類型映射到本地類,基本告訴wsimport不要爲這些類生成存根,並使用本地類。這個例子使用了maven,所以我不確定規範版本是什麼樣的,但關鍵是一個bindings.xml文件,其條目如 – RHH 2010-04-21 17:51:54

+0

jxb:bindings version =「1.0」xmlns:jxb =「http:/ /java.sun.com/xml/ns/jaxb「xmlns:xs =」http://www.w3.org/2001/XMLSchema「> - - 一旦我得到這個是如何工作的一個更好的主意,我打算髮佈一個答案 – RHH 2010-04-21 17:52:36

回答

1

當你從WSDL生成Java代碼,你可以使用Apache CXF和它的WSDL2Java工具(或使用maven-CXF-CODEGEN-插件),並指定下列選項:

-nexclude <schema-namespace>=<java-package> 

使用此選項將:

  • 告訴WSDL2Java工具,以不產生從給定的XML命名空間的類,
  • 告訴工具投入生成的代碼導入從給定的Java包。

當然,在編譯期間(在代碼生成過程中不需要),引用類必須存在於java-package中。

在你的榜樣使用:

wsdl2java -nexclude <some-schema-namespace-I-dont-know>=mypackage 
+1

這看起來不錯,但是當我做到這一點,我得到一個錯誤,因爲生成的WebService接口有一個'@XmlSeeAlso({mypackage.Obj ectFactory.class,...})',這個提到的類現在不存在。 – 2012-10-10 17:53:26