Merhabalar,
Java webservis client üretirken birçok zaman client üretmek bir kabus haline dönüşebiliyor. Farklı webservis implementasyonları farklı sonuçlar üretebiliyor, örneğin bir wsdl için axis ile üretilen client çalışırken diğeri için wsimport ile üretilen client başarılı olabilmektedir. Burada alınabilecek birçok çeşit hata vardır, authentication hatası, collision hatası, constructor hatası vs. Bu hataların çözümü için elbette hatanın kök nedenini iyi analiz etmek gerekiyor, bunun için tecrübe ile ya da google ile sonuç alınabiliyor :)
Benim bahsedeceğim hatayı almamın sebebi, bir sebeple client sınıflarını tek paket altında toplama ihtiyacım ve bu pakette farklı object factory'de olması gereken sınıfların aynı object factory'de çakışma yaşamasıdır. Hatanın kısaca açıklaması şu şekilde,
Two declarations cause a collision in the ObjectFactory class.
Bunu çözmek için, çakışan sınıflardan en az bir tanesi için binding tanımlayarak bunun object factory'deki metod ismine müdahale ediyoruz, pom'da binding tanımlanışı ve binding dosyasındaki tanımlamalar aşağıdaki gibidir.
pom.xml
...
..
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<target>2.1</target>
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/binding.xml</bindingFile>
</bindingFiles>
</configuration>
<phase>generate-sources</phase>
</execution>
</executions>
..
...
binding.xml
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0">
<jaxb:bindings schemaLocation="https://dene.me.com/DenemeWS/DenemeService?xsd=3">
<jaxb:bindings node="//xs:element[@name='Exception']">
<jaxb:factoryMethod name="Exception2"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
Herkese iyi çalışmalar dilerim ;)