# WS XSD Beispiel



## Generic1 (28. Okt 2010)

Hallo,

kenn jemand ein "kleines" WS- Beispiel im Netz, wo man sich ansehen kann, wie das mit den XSD's funktioniert.
Mir ist nicht ganz klar, wozu ich die XSD's benötige, ich mache immer ein Code- first, vielleicht liegts an dem.
Mit den XSD's definiere ich ja Schemas, auf die dann in der WSDL referenziert wird.
Wäre super wenn das mit den XSD'd jemand erklären könnte.
Vielen Dank,
lg


----------



## gman (28. Okt 2010)

Hi,

über die Webservices werden ja nur XML-Nachrichten verschickt, also musst du deine Java-Objekt in XML-Dateien
umwandeln -> Jaxb. Damit jaxb weiß wie es die Objekte in XML-Dateien umwandeln (marshallen) kann, braucht es
ein XSD-Schema.
Das Schema kann man aber auch glaube ich direkt mit Annotationen in den entsprechenden Java-Klassen
beschreiben. Aber der einfachere Ansatz ist die Erstellung des XSD-Schemas und dann die Generierung der 
Java-Klassen (mit "xjc" aus dem JDK).

Ich hoffe ich konnte dir ein bischen weiter helfen.


----------



## Generic1 (28. Okt 2010)

Gibts irgendwo ein kleines Beispiel?
Ich weiß da nicht genau, wie ich da anfangen soll,
Ich schreib ja zuerst den Code und mach dann die WSDL.


----------



## gman (28. Okt 2010)

Hm, ich kenne jetzt grad auch kein Tutorial. Such doch mal nach "wsdl code first" oder sowas.


----------



## Generic1 (28. Okt 2010)

Also ganz versteh ichs immer noch nicht,
Wenn ich das in Code first mach, dann muss ich zuerst den code schreiben, dann die XSD's und dann die WSDL z.B.: von Eclipse erstellen lassen? Oder iwe macht man das?
lg


----------



## mvitz (28. Okt 2010)

Mit welchem WebService Provider arbeitest du? JAX-WS, Axis, Axis2, ...


----------



## Generic1 (29. Okt 2010)

Ich muss leider mit Axis arbeiten (Axis 2 funktioniert anscheinend nicht mit dem JBoss 4.2.3).


----------



## Niki (29. Okt 2010)

schau dir das spring-ws tutorial an, da wird soweit ich weiß ein contract first ws erstellt. generell wird dieser ansatz bevorzugt und auch empfohlen


----------



## Generic1 (29. Okt 2010)

Was ich noch immer nicht versteh is, schreibt man bei Contract First neben der WSDL die XSD auch selber. Das ist ja dann eine ziemliche Arbeit, oder?
Einfacher geht sicher mit Code- first, das sind 3 Klicks in Eclipse.
lg


----------



## mvitz (29. Okt 2010)

Eigentlich schreibt man bei Contract-First nur die WSDL selber (die enthält dann aber auch ne XSD).

Da das schreiben von WSDL so kompliziert ist, geht Spring-WS den Weg, direkt eine XSD schreiben zu lassen und aus dieser dann WSDL und Code zu generieren.

Natürlich ist das ein wenig mehr Aufwand als der Code-First Ansatz, dafür hat man mehr Kontrolle über die Schnittstelle. Änderst du etwas an der Java-Klasse, z.B. das ändern einer Methodensignatur, so ändert sich deine WSDL, also auch deine Schnittstelle, was dazu führen kann, dass Clients deiner Schnittstelle nicht mehr funktionieren.

Eine XSD zu schreiben ist allerdings, auch nicht so kompliziert.


----------



## Generic1 (29. Okt 2010)

OK, wenn man sich jetzt diese WSDL ansieht, da ist die XSD schon enthalten, 
da wird ein XSD- Element "area" und ein XSD- Element "parameters" erstellt und dann in "wsdlart" verwendet.
D.h. also, ich brauche für einen WebService bzw. eine WSDL immer ein Schema (XSD) - ich komm also ohne gar nicht aus und ich brauche die XSD's für wsdlart - kann man das  so stehenlassen?
lg


```
<wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/AreaService/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <xsd:element name="area" type="xsd:float"/>
      <xsd:element name="parameters" type="tns:dimensions"/>
      <xsd:complexType name="dimensions">
      	<xsd:sequence>
      		<xsd:element name="width" type="xsd:float"></xsd:element>
      		<xsd:element name="height" type="xsd:float"></xsd:element>
      	</xsd:sequence>
      </xsd:complexType>

    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="CalculateRectAreaResponse">
    <wsdl:part element="tns:area" name="area"/>
  </wsdl:message>
  <wsdl:message name="CalculateRectAreaRequest">
    <wsdl:part element="tns:parameters" name="parameters"/>
  </wsdl:message>
  <wsdl:portType 
...
```


----------



## mvitz (29. Okt 2010)

Ja, denn du musst über ein XML Schema spezifizieren, wie die Daten, die du sendest/empfängst eben aussehen und das macht man halt per XSD.


----------



## Sym (23. Mrz 2011)

mvitz hat gesagt.:


> Eigentlich schreibt man bei Contract-First nur die WSDL selber (die enthält dann aber auch ne XSD).
> 
> Da das schreiben von WSDL so kompliziert ist, geht Spring-WS den Weg, direkt eine XSD schreiben zu lassen und aus dieser dann WSDL und Code zu generieren.
> 
> ...


Ich suchte gerade nach einer Problemhilfe, als ich dies hier lesen konnte.

Natürlich ist das Definieren einer XSD synonym mit dem Definieren einer WSDL und beides entspricht dem Contract-First-Charakter. 

Oder kannst Du eine Literaturangabe machen, die bestätigt, dass Contract-First immer WSDL-First bedeutet?


----------

