19 jul 2008

Webservices Domino 8

Twee jaar geleden heb ik voor een klant een postcode webservice geschreven.

Deze doet hetvolgende:

 

Postcode architectuur

 

Het stuk wat ik geschreven heb zit in de middelste laag: de proxy. Deze functionaliteit had ik met behulp van Domino 7, het webservice design element, Stubby en java gerealiseerd. Stubby is een open source tool (link) die je op OpenNtf terug kan vinden. Het geeft je de mogelijkheid een Webservice consumer in Domino 7 te bouwen. Stubby maakt gebruik van het feit dat er in de Domino 7 distribitie een volledige Axis implementatie is meegeleverd. Niet alleen de server functionaliteit maar ook de client functionaliteit is daarbij inbegrepen.

In Domino 8 is de hele Axis implementatie echter veranderd.Het gevolg is dat Stubby niet meer werkt met Domino 8 en ook eerder gerealiseerde webservice consumers, gerealiseerd met behulp van Stubby, werken niet meer. Wel heeft Domino 8 een mogelijkheid gekregen om "out of the box" een webservice consumer te realiseren.(link) Toen ik dit echter probeerde kreeg ik allemaal foutmeldingen. Blijkbaar kan de functionaliteit alleen niet al te ingewikkelde WSDL bestanden aan.

Reden om te switchen naar een externe Axis approach(link). Voorgaande wil zeggen dat je de Axis jars download, stubs genereerd op basis van de te consumen webservice WSDL en deze stubs vervolgens gebruikt in je code. In mijn geval wilde ik de code gebruiken in een Webservice Design element van Domino 8. De Axis jars en Stub code had ik op het classpath gezet door de jars in het design element in te laden. In de domino designer werkt dat allemaal prima. Alles compileert en lijkt goed te werken. Bij het testen van de Webservice genereerd de webservice engine van Domino 8 echter een fout: "java.lang.reflect.InvocationTargetException" op basis van een "ClassNotFoundException".

Wat blijkt: externe jars die op het classpath gezet zijn door de jars in te laden in het webservice design element zijn tijdens runtime niet te vinden voor de webservice engine! 

Bovenstaande is een bug in Domino 8. Ik weet niet of deze ook in Domino 8.0.1 bestaat. Gelukkig is er een workaround voor:

Plaats de externe jars in de ext folder van de Domino 8 jvm.

Geen opmerkingen: