Edurep:Implementaties/Java

Uit Kennisnet Developers Documentatie
Ga naar: navigatie, zoeken

Deze pagina beschrijft de verschillende stappen die nodig zijn voor een succesvolle Java-implementatie van de Edurep SRW-interface. In dit voorbeeld implementeren we een webservice client in Java op basis van de Apache Axis 1.4 distributie met behulp van de Ant taak: axis-wsdl2java. Er is voor Axis 1.4 gekozen omdat de Axis 2.0 wsdl2java tool niet in staat is om succesvol java clients te genereren voor de SRW WSDL. Al deze stappen zijn overigens al gedaan en beschikbaar in de srwclient library.

WebService client genereren

Voor de generatie van een webservice client kan gebruik worden gemaakt van Apache Axis 1.4. De WSDL2Java tool kan Java code genereren waarmee de webservice kan worden benaderd. Het handigste is om daarvoor gebruik te maken van de Ant (de standaard build tool voor Java projecten) taak axis-wsdl2java. Een mogelijke configuratie van de Ant taak ziet er als volgt uit:

<target name="axis.wsdl2java">
  <mkdir dir="java"/>
  <taskdef resource="axis-tasks.properties" classpathref="module.classpath"/>
    <axis-wsdl2java
        output="java"
        deployScope="Application"
        verbose="true"
        serverSide="false"
        testcase="false"
        url="file: edurep.wsdl">
    <mapping namespace="https://wszoeken.edurep.kennisnet.nl/edurep/wsdl" package="nl.kennisnet.edurep.srwclient"/>
    <mapping namespace="http://www.loc.gov/zing/srw/diagnostic/" package="nl.kennisnet.edurep.srwclient"/>
  </axis-wsdl2java>
</target>

Als deze taak wordt uitgevoerd, is het noodzakelijk dat alle axis1.4 jar files in het module.classpath staan. Met het commando "ant axis.wsdl2java" zullen er Java sources worden gegenereerd naar de java directory. In de distributie is er een voorbeeld build.xml file opgenomen waarin ook deze taak aanwezig is.

De gegenereerde sources in het package nl.kennisnet.edurep.srwclient en nl.kennisnet.edurep.srwclient bevatten de zogenaamde webservice stubs. Met behulp van deze classes is het eenvoudig om een webservice te implementeren. In de distributie staat in de java-test directory als voorbeeld het SRWServiceTestCase.java bestand, waar met de volgende 3 stappen de webservice wordt aangeroepen:

  1. Een binding naar de webservice wordt verkregen door een instantie van de ServiceLocator te creëren en vervolgens de SRWSoapBindingStub binding op te vragen aan de SRWServiceLocator service locator.
  2. Een SearchRetrieveRequest worden gecreëerd waarin de zoekopdracht kan worden vastgelegd. Vervolgens worden daarin de verschillende zoektermen etc. gespecificeerd. Voor het versie nummer moet 1.1 worden ingevuld.
  3. Uiteindelijk kan de webservice worden aangeroepen op de binding met de searchRetrieveOperation methode en wordt een response verkregen waaruit de resultaten kunnen worden verkregen.

In Java code ziet dat er als volgt uit:

// Maak een binding met de webservice.         
String url = "https://wszoeken.edurep.kennisnet.nl/edurep/srw";
try {
  SRWServiceLocator locator = new SRWServiceLocator();
  binding = (SRWSoapBindingStub) locator.getSRW(new URL(url));
}
catch (javax.xml.rpc.ServiceException jre) {
  .....
}
SearchRetrieveResponseType value;
SearchRetrieveRequestType req;
req = new SearchRetrieveRequestType();
req.setQuery("\"water fiets\"");
req.setVersion("1.2");
value = binding.searchRetrieveOperation(req);

De Javabestanden zijn nu te compileren tot classes. Dit kan bijvoorbeeld door met het meegeleverde r.bat bestand waarmee eerst wordt gecompileerd en vervolgens de webservice wordt aangeroepen.

Foutafhandeling

Bij het benaderen van de webservice kunnen er systeemfouten ontstaan. Bij een webservice worden zulke fouten als een SOAP Fault naar de client gestuurd. Bij een Java-implementatie met Axis worden de SOAP Faults gemapped op een AxisFault. Bij het aanroepen van een webservice moet dan met een try/catch block eventuele AxisFault fouten worden opgevangen. In een AxisFault is in ieder geval altijd een foutcode en foutbericht aanwezig.

De structuur van de foutafhandeling ziet er dan als volgt uit:

try {
// … hier wordt de webservice aangeroepen.
}
catch (org.apache.axis.AxisFault soapFault) {
// Een SoapFault heeft 2 verplichte elementen:
// code en reason.
System.out.println("Er is een SOAP Fault opgetreden.");
System.out.println("Soap Fault Code: " + soapFault.getFaultCode().toString());
System.out.println("Soap Fault Message: " + soapFault.getFaultReason());
// .. Onderneem hier de benodigde acties om de fout af te handelen.
}

Proxy configuratie

Als de webservice via een proxy moet worden benaderd, dan moeten er in een javaomgeving een aantal properties worden geconfigureerd. Dit kan op 2 manieren:

  • Zet de Java system properties http.proxyHost en http.proxyPort in de java client code. Bijvoorbeeld:
System.setProperty("http.proxyHost", "proxy.domain.com");
System.setProperty("http.proxyPort", "3128");
  • Het is ook mogelijk de proxy instelling aan de JVM door te geven met de -D command line optie wanneer de java applicatie wordt gestart.
-Dhttp.proxyHost=proxy.domain.com -Dhttp.proxyPort=3128

De Javavoorbeelden gebruiken

In de srwclient library zijn de op deze pagina beschreven voorbeelden opgenomen in de java-test directory. Benodigde libraries in de lib directory. Het SRWServiceTestCase.java bestand kan een goed startpunt zijn voor een eigen Java implementatie van de Edurep SRW Webservice.