2013-04-03 22 views
6

Birden fazla (yani 2, A ve B) web servislerim var ve bunları togheter kullanacak bir istemci oluşturmam gerekiyor. Netbeans'de Ben iki wsdl geçen sihirbaz "yeni Web Service Client" kullanın, çıkış Netbeans her biri için sadece wsimport çağrı arıyorum.wsimport: birden fazla wsdl üzerine yazılır ObjectFactory

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

İkisi A ve B, aynı paket com.mydomain.myapp (onlar aynı ad alanında tanımlanır tahmin) oluşturmak, bu yüzden A'nın saplama sınıf setini almak ve B aynı pakette birleşti . Bununla birlikte, wsimport, her bir web hizmeti için de bir ObjectFactory yaratır, bu yüzden, A'dan sonra B'nin stubunu üretirsem, sadece B tanımlarıyla ilgili ObjectFactory'yi alır (ilk, A, üzerine yazılır). Tersine, siparişi değiştirirsem A'nın ObjectFactory değeri geçer.

problem java paketinde A ad eşlemek için bir yol var mı ben hem webservices A tipleri ve B

için JAXBElements sarma clas örneklerini oluşturmak için her iki ObjectFactories ihtiyaç olduğunu ve sırayla diğerinde B

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

almak ve böylece hem ObjectFactories tutmak için?

Basit bir refactoring yardımcı olmuyor çünkü dahili olarak bir getClass() çağrılıyor, paket yeniden oluşturulduktan sonra artık çalışmıyor.

cevap

1

Muhtemelen JAXB bağlayıcı dosyaları üzerinden yapabilirsiniz - Bu soru/cevap bakabilirsiniz: Bu cevap itibaren java wsimport rename/different ObjectFactory.java

kahin de bağlayıcı dosya şeyler de bakabilirsiniz: Bu çalıştı http://docs.oracle.com/javaee/5/tutorial/doc/bnbbf.html

+0

Tamam! Bu XML bağlamayı kullandım: \t \t \t \t \t \t Ancak, bana XPath hata veriyor: boş. Xsd'm yok, önerilerin var mı? – alexroat

+1

Sadece bir düşünceniz vardı - "wsimport -p com.mydomain.myapp.a http: /mydomain/wsA.svc? Wsdl" ve daha sonra "wsimport -p com.mydomain.myapp.b http:/mydomain/wsB" yi denediniz mi? .Svc? wSDL "? Bu, oluşturulan tüm kodu, bağlayıcı bir dosyaya gerek duymadan, belirtilen pakete ("-p" anahtarına göre) koyacaktır. (Daha önce düşündüm ...) – FOOM

+0

Evet, yaptım. "ObjectFactory'de iki bildirimin çarpışmasına neden olan" gibi birçok hata var. ve "aynı ada sahip bir sınıf/arabirim" com.anthesi.prova.ExecuteTransmDocModelResponse "zaten kullanılıyor. Bu çakışmayı gidermek için bir sınıf özelleştirme kullanın." – alexroat

0

Benim için iş için beni (ı varsayalım o ObjectFactory ve taramada ne yok sayar setPackagesToScan yerine setContextPath kullanılması

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

vermedi (Bahar java yapılandırma kullanarak) tüm paket).