2013-04-03 199 views
6

我有多個(讓我們說2,A和B)web服務,我需要生成一個客戶端使用它們togheter。 在Netbeans中,我使用嚮導「新的Web服務客戶端」傳遞兩個wsdl,看着輸出Netbeans只需調用每個人的wsimport。wsimport:多個wsdl覆蓋ObjectFactory

wsimport http:/mydomain/wsA.svc?wsdl 
wsimport http:/mydomain/wsB.svc?wsdl 

A和B,產生相同的包com.mydomain.myapp(I猜測它們在相同的命名空間定義),所以我得到的短線類別集合A和B在相同的包合併。

但是,wsimport也爲每個webservice創建一個ObjectFactory,所以如果我在A之後生成B的存根,我只獲得與B定義相關的ObjectFactory(因爲第一個A被覆蓋)。相反,如果我切換順序,A的ObjectFactory仍然存在。

的問題是,我需要同時ObjectFactories以創建類型既web服務A和B.

的JAXBElements包裝CLAS情況下,有沒有辦法爲一個命名空間映射Java包和B在另一個爲了獲得

com.mydomain.myapp.a 
com.mydomain.myapp.b 

所以保持這兩個ObjectFactories?

簡單的重構沒有幫助,因爲內部調用了getClass(),所以一旦重構了包,它就不再工作了。

回答

1

您可以通過JAXB綁定文件可能做到這一點 - 看看這個提問/回答:java wsimport rename/different ObjectFactory.java

從這個問題的答案,看看裝訂文件夾的東西在甲骨文:http://docs.oracle.com/javaee/5/tutorial/doc/bnbbf.html

+0

好的!我使用了這個XML綁定: \t \t \t alexroat

+1

只是有一個想法 - 你有沒有嘗試過「wsimport -p com.mydomain.myapp.a http:/mydomain/wsA.svc?wsdl」,然後是「wsimport -p com.mydomain.myapp.b http:/ mydomain/wsB .SVC?WSDL「?這將把所有生成的代碼放到指定的包中(按照「-p」開關),而不需要綁定文件。 (應該早點想到它......) – FOOM

+0

是的,我做到了。像「兩個聲明在ObjectFactory中引起衝突」類有很多錯誤。和「具有相同名稱的類/接口」com.anthesi.prova.ExecuteTransmDocModelResponse「已在使用中,請使用類定製來解決此衝突。 – alexroat

0

這個工作對我來說(使用的Spring Java配置)

@Bean 
public Jaxb2Marshaller marshaller() { 
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
    marshaller.setPackagesToScan("com.example.api"); 
    return marshaller; 
} 

使用setPackagesToScan代替setContextPath爲我做的工作(我假設它忽略了什麼是在ObjectFactory和掃描整個包)。