WSDL2JAVA erzeugt Arrays - anstatt Collections ???

Status
Nicht offen für weitere Antworten.

pocketom

Bekanntes Mitglied
Hi,

simples Problem. Generiere ich mit JAXB Klassen aus einem XSD Schema dann ist alles perfekt, aus einem
Code:
<xsd:element name="myName" type="myType" maxoccurs:unbounded">
wird
Java:
protected List<myType> myname;

Anschliessend habe ich mein XSD File in einem WSDL File importiert. Benutze ich zur Codegenerierung jetzt das WSDL2JAVA Tool von Axis2, dann kommt stattdessen ein hässliches
Java:
protected myType[] myName;[/Java] heraus...

Wie kann ich das verhindern? Er soll mir gefälligst anständige Collections generieren!
 

Noctarius

Top Contributor
Du mischt 2 verschiedene Techniken und diese haben Inkompatibilitäten.

Muss es Axis2 sein oder würde dir z.B. auch Apache CXF (das benutzt auch JAXB) weiterhelfen?
 

pocketom

Bekanntes Mitglied
Es ist unser erstes Axis Projekt, somit muss es nicht zwingend sein. Wir sind wohl einfach nur zuerst auf Axis gestossen. Die entscheidende Frage dabei ist ob CXF auch unter Delphi verwendet werden kann? Bzw. ob es für Delphi ein Tool gibt um Client-Code automatisch aus einer Definitionsdatei (so wie auch mit WSDL) zu erzeugen? Wir haben leider noch viele Altlasten in dem Bereich und müssen auch ältere Delphi Projekte an die Servicewelt anbinden.

[EDIT]
Grade nachgelesen, CFX unterstützt ja auch WSDL. Heisst das ein bestehender Client dessen Code aus einer WSDL Definition generiert wurde würde von einem Wechsel auf CXF garnichts mitbekommen (ausser einer anderen Service-URL)?

Dort gibts ja auch ein WSDLtoJava Tool, das hat aber hoffentlich nichts ausser dem Namen mit dem Axis2 WSDL2Java zu tun oder?
 
Zuletzt bearbeitet:

musiKk

Top Contributor
Kannst ja mal wsimport ausprobieren, das ist ab Java6 im JDK mitgeliefert (bei älteren Java-Installationen jaxws manuell von Sun beziehen). Ich bin mir nicht mehr sicher, ob WSDL2JAVA nicht nur ein Wrapper dafür ist, aber ich glaube nicht. Jedenfalls habe ich immer [c]List[/c]en in meinen Klassen erhalten.
 

Noctarius

Top Contributor
Grade nachgelesen, CFX unterstützt ja auch WSDL. Heisst das ein bestehender Client dessen Code aus einer WSDL Definition generiert wurde würde von einem Wechsel auf CXF garnichts mitbekommen (ausser einer anderen Service-URL)?

Selbst den Endpoint des Services bräuchtest du nicht mal ändern, außer: Ihr wollt den Alten natürlich weiterhin benutzen.

In Verbindung mit Spring WS (bzw Spring allgemein) kannst du dir sogar noch viel Arbeit sparen und das WSDL automatisch zur Laufzeit generieren lassen.
 

pocketom

Bekanntes Mitglied
Wie meinst du zur Laufzeit generieren? In Axis hatte man ja unter Server/Dienstname?wsdl auch immer eine "Live" Version des aktuellen WSDL, diese URL haben meine Client benutzt um Ihren Code zu updaten.
 

pocketom

Bekanntes Mitglied
So, mit CXF und dessen WSDL2JAVA funktionierts eigentlich ganz gut. Vorrausgesetzt man nimmt einen ComlexType der eine Sequence mit unbounded Elementen beinhaltet. Das gibt schöne Listen im generierten Code.

Nimmt man jedoch einen Simpletype, z.B. um eine Liste von Strings zu definieren:

[XML]
<xsd:simpleType name="stringList">
<xsd:list itemType="xsd:string"/>
</xsd:simpleType>
[/XML]

Kommt das dabei raus:

Java:
public java.lang.String[] sendMyTestRequest() {
...
...
...
}

<PERFECTION MODE="ON"/>
Ist jetzt wiklich nur noch die Frage wie man als Rückgabeparameter einer Funktion ein List<String> definiert...? Complex Type ist hier nicht so elegant, denn dann habe ich ja wieder eine neue Klasse erzeugt...

Hat dafür noch jemand nen Ansatz parat?
<PERFECTION MODE="OFF"/>

:-D
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben