WebServices
Unterpunkte dieser Seite
Apache Axis (unter Windows XP)
WSDL
Apache Axis (unter Windows XP)
Die Standard Distribution lässt sich unter http://ws.apache.org/axis2/download/1_4_1/download.cgi herunterladen.
Die Installation erfolgt über ein einfaches Entpacken des Archivs in einen eigenen Ordner. Sie sollten ein Verzeichnis wählen, dessen Pfad keine Leerstellen enthält, da ansonsten einige Aufrufe in der Kommandozeile scheitern.
Die Umgebungsvariable JAVA_HOME muss auf das Verzeichnis gesetzt werden, in das das JDK installiert worden ist und dann in diesem Verzeichnis auf eines der installierten JDKs. Ein Beispiel ist c:\program files\Java\jdk1.6.0_12. Start > Control Panel > System > Advanced > Environment Variables > System Variables > New. Starten Sie alle eventuel geöffneten Consolen neu, damit die Umgebungsvariable in den Konsolen bekannt wird.
Die Umgebungsvariable AXIS2_HOME sollte gesetzt werden und zwar auf das Verzeichnis, in das die Axis Distribution entpackt worden ist. Start > Control Panel > System > Advanced > Environment Variables > System Variables > New. Starten Sie alle eventuel geöffneten Consolen neu, damit die Umgebungsvariable in den Konsolen bekannt wird.
Öffnen Sie eine Konsole und testen Sie die Umgebungsvariable. Geben Sie dazu ein:
echo %AXIS2_HOME%
Erstellen Sie nun den Stub für die ADB Version eines BeispielWebServices aus der AXIS2 Standarddistribution. Der Code wird aus einer wsdl Datei generiert. Der Code und eine passende ant build.xml wird im aktuellen Verzeichnis abgelegt, in dem Sie den Befehl zur Generation eingetippt haben.
Navigieren Sie in ein Verzeichnis, in dem der Code abgelegt werden soll. Geben Sie folgendes ein:
"%AXIS2_HOME%\bin\WSDL2Java.bat" -uri "%AXIS2_HOME%/samples/wsdl/perf.wsdl" -d adb -s
Obiger Aufruf verwendet die perf.wsdl Datei, die mit der Axis2 Standarddistribution mitgeliefert wurde. Alternativ können Sie auch von http://ws.apache.org/axis2/1_4_1/userguide-codelisting5.html eine wsdl Datei herunterladen, die vom AXIS2 Userguide (http://ws.apache.org/axis2/1_4_1/contents.html) als Axis2UserGuide.wsdl bezeichnet wird.
Falls Sie die Axis2UserGuide.wsdl verwenden, lautet der Aufruf
"%AXIS2_HOME%\bin\WSDL2Java" -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d adb -s
wobei dann die Axis2UserGuide.wsdl in dem Verzeichnis abgelegt sein muss, in dem Sie den Befehl ausführen.
Der Code befindet sich nun in einem Verzeichnis namens src. Es wird ebenfalls eine build.xml im aktuellen Verzeichnis angelegt. Diese Datei wird von Apache ant verstanden und übersetzt den Stub.
WSDL2Java.bat ruft das Code Generation Tool (http://ws.apache.org/axis2/tools/1_0/CodegenToolReference.html) auf. Die Parameter sind auf der Reference aufgelistet. -uri zeigt auf die WSDL Datei, aus der Client Code erzeugt werden soll. -d gibt das DataBinding an. Die einfachste aber auch unflexibelste Art AXIS2 zu verwenden ist das ADB DataBinding. -s führt zu Code, der den Aufruf synchron ausführt, der also auf die Antwort des WebServices wartet bevor das Programm weiterarbeitet.
Um den Client zu programmieren können Sie ant verwenden. Laden Sie apache-ant-1.7.1-bin.zip von http://ant.apache.org/bindownload.cgi herunter. Entpacken Sie das Archiv in ein Verzeichnis und setzen Sie die ANT_HOME Umgebungsvariable darauf. Setzen Sie JAVA_HOME. Stellen Sie sicher, das CLASSPATH nicht gesetzt oder leer ist. Setzen Sie die PATH Variable auf %ANT_HOME%\bin
Speichern Sie den Java Code aus http://ws.apache.org/axis2/1_4_1/userguide-codelisting7.html im Ordner org/apache/axis2/axis2userguide in der Datei Client.java. Geben sie im Verzeichnis, in dem sich die generierte build.xml Datei befindet
ant jar.client
ein. Es entsteht ein Ordner namens build.
Öffnen Sie die jar. Editieren Sie MANIFEST.MF wie folgt:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 11.2-b01 (Sun Microsystems Inc.)
Main-Class: org.apache.axis2.axis2userguide.Client
<leerzeile>
<leerzeile>
Am Ende der Datei müssen zwei Leerzeilen stehen.
Editieren Sie C:\axis2-1.4.1\bin\axis2.bat wie folgt:
@echo off
REM Licensed to the Apache Software Foundation (ASF) under one
REM or more contributor license agreements. See the NOTICE file
REM distributed with this work for additional information
REM regarding copyright ownership. The ASF licenses this file
REM to you under the Apache License, Version 2.0 (the
REM "License"); you may not use this file except in compliance
REM with the License. You may obtain a copy of the License at
REM
REM http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing,
REM software distributed under the License is distributed on an
REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
REM KIND, either express or implied. See the License for the
REM specific language governing permissions and limitations
REM under the License.
rem ---------------------------------------------------------------------------
rem Axis2 Script
rem
rem Environment Variable Prequisites
rem
rem AXIS2_HOME Must point at your AXIS2 directory
rem
rem JAVA_HOME Must point at your Java Development Kit installation.
rem
rem JAVA_OPTS (Optional) Java runtime options
rem ---------------------------------------------------------------------------
set CURRENT_DIR=%cd%
rem Make sure prerequisite environment variables are set
if not "%JAVA_HOME%" == "" goto gotJavaHome
echo The JAVA_HOME environment variable is not defined
echo This environment variable is needed to run this program
goto end
:gotJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
goto okJavaHome
:noJavaHome
echo The JAVA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
echo NB: JAVA_HOME should point to a JDK/JRE
goto end
:okJavaHome
rem check the AXIS2_HOME environment variable
if not "%AXIS2_HOME%" == "" goto gotHome
set AXIS2_HOME=%CURRENT_DIR%
if exist "%AXIS2_HOME%\bin\java2wsdl.bat" goto okHome
rem guess the home. Jump one directory up to check if that is the home
cd ..
set AXIS2_HOME=%cd%
cd "%CURRENT_DIR%"
:gotHome
if EXIST "%AXIS2_HOME%\lib\axis2*.jar" goto okHome
echo The AXIS2_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome
rem set the classes
setlocal EnableDelayedExpansion
rem ----- Execute The Requested Command ---------------------------------------
echo Using AXIS2_HOME: %AXIS2_HOME%
echo Using JAVA_HOME: %JAVA_HOME%
set _RUNJAVA="%JAVA_HOME%\bin\java"
%_RUNJAVA% %JAVA_OPTS% -Djava.ext.dirs="%AXIS2_HOME%\lib\\" -Daxis2.repo="%AXIS2_HOME%\repository" -Daxis2.xml="%AXIS2_HOME%\conf\axis2.xml" %*
endlocal
:end
Diese Änderung geht auf einen Bug in einem BugTracker zurück (http://mail-archives.apache.org/mod_mbox/ws-axis-dev/200805.mbox/%3C2101156367.1210197116904.JavaMail.jira@brutus%3E). Unter Windows XP ist das Skript axis2.bat aus der Standarddistribution ohne diesen BugFix nicht ausführbar.
>line: 73
> -Djava.ext.dirs="%AXIS2_HOME%\lib\"
>
> \" should be \\"
>
> i.e.
> line: 73
> %_RUNJAVA% %JAVA_OPTS% -Djava.ext.dirs="%AXIS2_HOME%\lib\\"
> -Daxis2.repo="%AXIS2_HOME%\repository"
> -Daxis2.xml="%AXIS2_HOME%\conf\axis2.xml" %*
Im build Ordner können Sie nun folgendes Kommando ausführen:
c:\axis2-1.4.1\bin\axis2.bat -jar Axis2UserGuideService-test-client.jar
Beachten Sie bitte, das dieser Aufruf nicht funktioniert wenn sich ihre Axis installation in einem Pfad befindet, der Leerzeichen enthält.
WSDL
Eine WSDL Datei definiert abstrakte und konkrete Haupttypen. Die abstrakten Haupttypen lassen WSDL ähnlich wie die IDL von CORBA erscheinen. Eine Besonderheit der WSDL sind die konkreten Haupttypen, die technologische Bindungen einführen.
Konkret:
- WSDL Service
- WSDL Port/WSDL Endpoint
wird innerhalb des Service definiert.
- WSDL Binding
Abstrakt:
- WSDL PortType/WSDL Interface
Ein WSDL PortType besitzt eine Menge an WSDL OperationS. Eine WSDL Operation hat genau eine Ein- und optional auch maximal eine Ausgabe-WSDL Message. Innerhalb einer Operation werden die WSDL MessageS verwendet, die im WSDL-Dokument definiert sein müssen. Da eine WSDL Operation in der WSDL XML Datei durch hierarchische Schachtelung in einem WSDL PortType definiert ist, kann man eine WSDL Operation nicht für andere WSDL PortTypes wiederverwenden. Die Reihenfolge, in der die WSDL Messages innerhalb einer WSDL Operation notiert sind und auch das Vorhandensein oder das Abwesendsein einer Output Message, haben eine Bedeutung und geben das Message Exchange Pattern (MEP) dieser WSDL Operation vor. Es gibt folgende X Kombinationen wobei aber nur die folgenden speziell ausgewiesen und benannt sind und als MEPs bezeichnet werden.
- WSDL Message
Definition einer Nachricht. Eine Message transportiert Werte die von den Datentypen sind, die durch die WSDL Types definiert sind. WSDL MessageS werden in den WSDL OperationS eins WSDL PortType verwendet. Eine WSDL Operation eines WSDL PortType hat nur genau eine Input-WSDL Message und maximal eine Output-WSDL Message. Wenn die WSDL Operation also zwei Eingabeparameter und fünf Ausgabeparameter hat, dann müssen die Input und Output-WSDL Messages so gestaltet sein, dass sie zwei Eingabe- bzw fünf Ausgabe Datenfelder übertragen können. Da WSDL Messages im der WSDL XML Datei nicht durch hierarchische Schachtelung an eine WSDL-Operation zugewiesen werden sondern durch Referenz über den Namen verwendet werden, kann man WSDL-Messages einmal zentral definieren und sie dann für mehrere WSDL-Operations auch in mehreren WSDL Port Types wiederverwenden.
- WSDL Types
Definition der Datentypen. Eine WSDL Message verwendet die WSDL Datentypen um zu beschreiben, von welchem Typ die Daten sind, die sie überträgt. Die Typen werden durch XSD Typen definiert und können somit einfach oder komplex/zusammengesetzt sein.
Folgende Bestanddteile sind keine Hauptelemente:
- WSDL Operation
werden in WSDL PortTypeS/WSDL InterfaceS verwendet und beschreiben jeweils eine angebotene Methode.
- WSDL Definitions
???
Verwendung. Ein Benutzer möchte eine Kommunikation über REST RPC erhalten. Er möchte also Methoden auf einem Server aufrufen. Er könnte CORBA verwenden entscheidet sich aber für WebServices. Er schreibt eine WSDL Datei. Aus der Datei kann er den Client und den Server Stub erzeugen. Er implementiert die Stubs und hat seinen RPC.
zum Seitenanfang
zur Hauptseite
Letzte Änderung: 22.03.2009