2012-08-09 17 views
12

Próbuje użyć wsimport do wygenerowania klienta dla punktu końcowego SOAP. Pliki WSDL i wszystkie pliki XSD są kopiami lokalnymi.wsimport - Dwie deklaracje powodują kolizję, ta sama linia podana

To polecenie jest wykonywane:

wsimport ./bwWsdl.xml -p com.generated -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution 

Co daje ten błąd:

[ERROR] Two declarations cause a collision in the ObjectFactory class. 
    line 16 of file:/schemas/newSchema.xsd 

[ERROR] (Related to above error) This is the other declaration. 
    line 16 of file:/schemas/newSchema.xsd 

Uwaga numer linii jest taki sam dla zgłoszonych kolizji.

Oto schemat:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
    version="2.004" id="OTA2003A2009A"> 

    <xs:complexType name="TPA_ExtensionsType"> 
    <xs:annotation> 
     <xs:documentation xml:lang="en">Description here. 
     </xs:documentation> 
    </xs:annotation> 
    <xs:sequence> 
     <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" /> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:element name="TPA_Extensions" type="TPA_ExtensionsType"> 
    <xs:annotation> 
     <xs:documentation xml:lang="en">More description here.</xs:documentation> 
    </xs:annotation> 
    </xs:element> 
</xs:schema> 

Próbowałem usunięcie definicji typu, ale to odwołuje się mnóstwem innych miejscach.

Czy ktoś może zaoferować jakąkolwiek poradę, jak to uruchomić?

Dzięki

Edit:

Oto linie gdzie WSDL importuje tych schematów:

<definitions name='ResLookupGet' targetNamespace='http://org.jboss.ws/resLookupGet' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:http='http://schemas.xmlsoap.org/wsdl/http/' xmlns:mime='http://schemas.xmlsoap.org/wsdl/mime/' xmlns:ns='http://www.opentravel.org/OTA/2003/05/beta' xmlns:rq='http://www.opentravel.org/OTA/2003/05/betarq' xmlns:rs='http://www.opentravel.org/OTA/2003/05/betars' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://org.jboss.ws/resLookupGet' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> 
<types> 
    <xsd:schema targetNamespace='http://org.jboss.ws/resLookupGet' xmlns:tns='http://org.jboss.ws/resLookupGet' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> 
    <xsd:import namespace='http://www.opentravel.org/OTA/2003/05/betarq' schemaLocation='./schemas/FooAffiliateHeaderRQ.xsd'/> 
    <xsd:import namespace='http://www.opentravel.org/OTA/2003/05/betarq' schemaLocation='./schemas/FooResLookupGetRQ.xsd'/> 
    <xsd:import namespace='http://www.opentravel.org/OTA/2003/05/betars' schemaLocation='./schemas/FooResLookupGetRS.xsd'/> 
    </xsd:schema> 
</types> 
<message name='ResLookupGetRQ'> 
    <part element='rq:FooResLookupGetRQ' name='FooResLookupGetRQ'></part> 
</message> 
<message name='ResLookupGetRS'> 
    <part element='rs:FooResLookupGetRS' name='FooResLookupGetRS'></part> 
</message> 
+0

Czy masz szansę opublikować zestaw plików, które dadzą taką samą? Ten komunikat o błędzie jest zwykle spowodowany ładowaniem tej samej definicji dwa razy lub więcej w sposób, który wprowadza błąd w odniesieniu do podstawowego identyfikatora URI. –

+0

Nie sądzę, że istnieje 136 schematów odwołujących się do niego ... – Cuga

+0

Próbowałbym wizualizować/śledzić ścieżki do pliku XSD, który jest przyczyną problemu. Jeśli jest to oparte na Open Travel Alliance ... zakładam, że zbudowałeś WSDL; czy możesz wskazać strukturę wysokiego poziomu, np. czy importujesz OTA xsds z twojego WSDL, czy definiujesz zawartość XSD w WSDL, czy importujesz jeden zewnętrzny XSD, który z kolei odwołuje się do wszystkich innych? –

Odpowiedz

14

Dzięki pomocy @Petru Gardea udało mi się w końcu ominąć ten przez pominięcie specyfikacji pakietu -p com.generated dla wsimport. Więc to jest to, co było w końcu stanie uruchomić ominąć ten problem:

wsimport ./bwWsdl.xml -Xnocompile -d ../src -extension -keep -XadditionalHeaders -B-XautoNameResolution 

Rozumowanie albowiem wsimport próbuje wygenerować klas w tym samym opakowaniu o tej samej nazwie i/lub metod, które to oczywiście nie móc zrobić.

W ten sposób, pomijając deklarację wymuszonego pakietu, wsimport może umieścić klasy w dowolnie wybranym pakiecie, który okazuje się być 3 różnymi pakietami według definicji <xsd:schema> w WSDL.

Jeszcze raz dziękuję @Petru!

+1

W wersji JDK 1.8 przydaje się to również: 'wsimport wsdlName.xml -J-Djavax.xml.accessExternalDTD = all ... 'Jak również' wsimport wsdlName.xml -J-Djavax.xml.accessExternalSchema = all ... ' – Cuga