# cxf: WSDL dynamisch erzeugen (zur Laufzeit)



## puddah (15. Dez 2010)

Hallo,

stehe zur Zeit vor der Aufgabe die WSDL für einen Webservice dynamisch mit CXF zu erzeugen, weiss aber nicht wie bzw. ob das mit cxf überhaupt geht. Das Problem ist, dass eine Reihe von Datenstrukturen (xsd's) zur Laufzeit eingelesen und der WSDL beschreibung hinzugefügt werden sollen (die reinen Service-Operationen bleiben also immer gleich). Der Webservice ist über Spring configuriert. Hab da bereits das Attribut wsdlLocation ausprobiert, aber dies erlaubt lediglich die definition einer statischen WSDL. Dann bin ich über die Klasse ServiceWSDLBuilder gestolpert, hab aber leider keinerlei Doku gefunden, wie ich das ganze einbinden kann. Hat jemand ne Idee wie sowas zu lösen wäre bzw. evtl. einen anderen Ansatz?

Danke und Gruß
Puddah


----------



## Noctarius (15. Dez 2010)

Normal macht CXF das doch automatisch wenn du die URL mit GET abrufst und "?wsdl" oder so anhängst, oder lieg ich da gerade falsch?

edit: knapp daneben, so haben wir es in der Firma gemacht
XsdBasedSoap11Wsdl4jDefinitionBuilder (Spring Web Services 1.5.9 API)


----------



## puddah (15. Dez 2010)

Ja das tut er, aber er generirert dir halt WSDL aus anhand der annotierten Bean, die als WebService in Spring konfiguriert ist. Was ich vor hab ist in diesen Prozess einzugreifen und ihm ein paar XSDs an die Hand geben, die er als wsdlTypes mit einbindet. Da is die Frage, wie geht das bzw. kriegt man das überhaupt hin?


----------



## Noctarius (15. Dez 2010)

siehe oben


----------



## puddah (15. Dez 2010)

ah ok danke, das sieht schon mal viel versprechend aus, aber was ich nicht ganz verstehe ist wie ich das ganze jetzt mit CXF verdrahte?


----------



## Noctarius (15. Dez 2010)

Brauchst du doch direkt gar nicht. Der wird einfach vom SpringServlet erzeugt und verteilt. Ist einfach nur ein Spring Bean.


----------



## puddah (15. Dez 2010)

Ah ok, dann benutze ich aber Spring-WS und kein CXF mehr oder? Ist das denn auch irgendwie mit CXF möglich?


----------



## Noctarius (15. Dez 2010)

Mit purem CXF weiß ich nicht, aber du nutzt doch eh schon Spring, du kannst doch das SpringServlet einfach auf eine feste Adresse packen und diese als Adresse für das WSDL rausgeben. CXF selber kann doch parallel laufen.

Beispiel:
CXF: /bla/webservice
Spring /bla/wsdl


----------

