WSDL: Doppelte Typenames (Keine Verwendung möglich)

Diskutiere WSDL: Doppelte Typenames (Keine Verwendung möglich) im Allgemeine Java-Themen Bereich.
M

Maliko

Hoi,

ich verzweifle grad etwas an einer WSDL. Und zwar versuche ich gerade die SOAP-Schnittstelle des Cerberus-FTP-Servers anzusprechen und hab dafür in ein neues Java-Projekt aus der WSDL die WebService-Klassen via JAX:WS zu generieren. Allerdings habe ich das Problem, dass die Entwickler 2 mal den selben Namen für einen Komplexen Typen verwenden und wsimport daher immer direkt wieder abbricht. Hier einmal der Error-Log:

ant -f C:\\Entwicklung\\Java\\FTPAccessPoint wsimport-client-clean-Cerberus wsimport-client-generate
wsimport-client-clean-Cerberus:
Deleting directory C:\Entwicklung\Java\FTPAccessPoint\build\generated\jax-wsCache\Cerberus
init:
wsimport-init:
wsimport-client-Cerberus:
Created dir: C:\Entwicklung\Java\FTPAccessPoint\build\generated\jax-wsCache\Cerberus
command line: wsimport -d C:\Entwicklung\Java\FTPAccessPoint\build\generated\jax-wsCache\Cerberus -extension -Xnocompile -Xendorsed -keep -s C:\Entwicklung\Java\FTPAccessPoint\build\generated\jax-wsCache\Cerberus -encoding UTF-8 -catalog C:\Entwicklung\Java\FTPAccessPoint\catalog.xml -verbose C:\Entwicklung\Java\FTPAccessPoint\xml-resources\web-service-references\Cerberus\wsdl\Cerberus.wsdl -p ftpaccesspoint.Service -wsdllocation file:/C:/Program%20Files/Cerberus%20LLC/Cerberus%20FTP%20Server/webadmin/admin/wsdl/Cerberus.wsdl
WSDL wird geparst ...


[ERROR] Eine Klasse/Schnittstelle mit demselben Namen "ftpaccesspoint.Service.GroupList" wird bereits verwendet. Verwenden Sie eine Klassenanpassung, um diesen Konflikt zu lösen.
Zeile 458 von file:/C:/Entwicklung/Java/FTPAccessPoint/xml-resources/web-service-references/Cerberus/wsdl/ns1.xsd

[ERROR] eine weitere "GroupList" wird von hier generiert.
Zeile 361 von file:/C:/Entwicklung/Java/FTPAccessPoint/xml-resources/web-service-references/Cerberus/wsdl/ns1.xsd

[ERROR] Zwei Deklarationen verursachen eine Kollision in der ObjectFactory-Klasse.
Zeile 458 von file:/C:/Entwicklung/Java/FTPAccessPoint/xml-resources/web-service-references/Cerberus/wsdl/ns1.xsd

[ERROR] Dies ist die andere Deklaration.
Zeile 361 von file:/C:/Entwicklung/Java/FTPAccessPoint/xml-resources/web-service-references/Cerberus/wsdl/ns1.xsd

C:\Entwicklung\Java\FTPAccessPoint\nbproject\jaxws-build.xml:22: Error starting wsimport:
BUILD FAILED (total time: 1 second)
Ich kenne mich mit WSDL nicht wirklich aus, da ich diese bisher immer einfach nur importiert und dann einfach verwendet habe und sitz hier grad so ein wenig wie der Ochs vorm Berg. Hier die beiden Deklarationen:

XML:
<!-- Zeile 361 -->
<xsd:complexType name="groupList">
  <xsd:sequence>
    <xsd:element name="group" type="ns1:groupMember" minOccurs="0" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:complexType>

<!-- Zeile 458 -->
<xsd:complexType name="GroupList">
   <xsd:sequence>
     <xsd:element name="group" type="ns1:Group" minOccurs="0" maxOccurs="unbounded" nillable="false" />
   </xsd:sequence>
</xsd:complexType>
Die Frage die sich mir grad stellt ist ob ich da überhaupt was machen kann. Umbennen reicht auf jedem Fall nicht aus. Ich hab in der XSD die ComplexType-Names einfach durch 1 und 2 ergänzt, das scheint er aber einfach zu ignorieren. Hat jemand eine Idee was ich da machen kann? Die Originale WSDL die ich importiere liegt local im Programmverzeichnis von Cerberus, sprich ich importiere direkt eine Datei und nicht über einen Link. Ich bin da grad ein wenig überfragt.
 
J

JustNobody

WSDL ist nun einmal case sensitive und da ist groupList != GroupList. (Das ändert aber nichts daran, dass dies recht lausig ist. In einer Methode in Java würden wir ja auch nicht zwei Variablen goupList und GroupList deklarieren...)

Ich habe so einen Fall bisher nicht gehabt, aber evtl. brauchst Du dies:
https://gist.github.com/barbietunnie/69310de4366039411ad11e367542155e

Also in kurz: Dieses Auto Name Resolution scheint für solche Fälle eine valide Lösung zu sein.
 
M

Maliko

Danke dir schon mal. Muss mal schauen ob es das auch für Java-Ant gibt (mit Gradle und Maven bin ich ziemlich überfordert). Ich werd aber mal schauen ob ich das einsetzen kann.
 
M

Maliko

Ich hatte es mal versucht indem ich die WSDL einfach modifiziert habe, habe da dann aber Probleme mit der Kommunikation mit dem Server. Daher wollte ich das jetzt mal mit den Bindings ausprobieren. Nur irgendwie komme ich da grad auch nicht weiter:

Das ist mein Bindingsfile:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0"
              node="//xsd:complexType[@name='groupList']">
    <jaxb:class name="groupListUser" />
</jaxb:bindings>
Allerdings bekomme ich jetzt beim importen die folgende Fehlermeldung:
XPath-Auswertung von "//xsd:complexType[@name='groupList']" ergibt leeren Zielknoten
Allerdings befindet sich der Type auch nicht in der cerberus.wsdl, welche ich importiere, sondern in der ns1.xsd, welche von der WSDL geladen wird. Muss ich die ns1.xsd irgendwie dem System noch bekannt machen? Ich muss zugeben, dass ich da gerade etwas auf dem Schlauch stehe.
 
mihe7

mihe7

Probier mal folgendes:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
    <jxb:bindings schemaLocation="ns1.xsd" node="//xs:complexType[@name='groupList']">
        <jaxb:class name="groupListUser" />
    </jxb:bindings>
</jaxb:bindings>
 
Thema: 

WSDL: Doppelte Typenames (Keine Verwendung möglich)

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben