4.1 Überblick einer WSDL-Beschreibung Komponenten von WSDL (Version 1.x) <wsdl:definitions name= Account xmlns:wsdl= http://schemas.xmlsoap.org/wsdl/...> <wsdl:types>... </wsdl:types> <wsdl:message name= withdraw >... </wsdl:message>... <wsdl:porttype name= AccountPort >... </wsdl:porttype>... <wsdl:binding name= AccountSoapBinding >...</wsdl:binding>... <wsdl:service name= Account > <wsdl:port name= AccountPort binding= AccountSoapBinding >... </wsdl:port> </wsdl:service> </wsdl:definitions> E.41 4.2 Typdefinitionen Definition des SOAP-Rumpfs und -Kopfs Typisierung durch XML-Schema-Definitionen in der types-sektion der WSDL- Beschreibung <wsdl:types> <xsd:schema xmlns:xsd= http://www.w3.org/2001/xmlschema > <xsd:complextype name= withdrawdepositparm > <xsd:sequence> <xsd:element name= amount type= xsd:double > </xsd:sequence> </xsd:complextype> <xsd:element name= withdraw type= withdrawdepositparm /> <xsd:element name= deposit type= withdrawdepositparm />... </xsd:schema>... </wsdl:types> E.42
4.3 Nachrichtendefinition Definition der SOAP-Nachrichten Aufführen der einzelnen Nachrichtentypen <wsdl:message name= WithdrawRequest > <wsdl:part name= Withdraw element= withdraw /> </wsdl:message> <wsdl:message name= WithdrawReply > <wsdl:part name= WithdrawResponse element= withdrawresponse /> </wsdl:message>... Hinweis auf die in den Nachrichten enthaltenen Elementtypen E.43 4.4 Abstrakte Schnittstellen Definition der Schnittstellen (Port Types) Aufführen der einzelnen Operationen und der dazugehörigen Nachrichten <wsdl:porttype name= AccountPort > <wsdl:operation name= withdraw > <wsdl:input message= WithdrawRequest /> <wsdl:output message= WithdrawReply /> </wsdl:operation> <wsdl:operation name= deposit > <wsdl:input message= DepositRequest /> <wsdl:output message= DepositReply /> </wsdl:operation> </wsdl:porttype> E.44
4.5 Bindung an das Übertragungsprotokoll Beispiel: Bindung an SOAP über HTTP <wsdl:binding name= AccountSoapBinding type= AccountPort > <soap:binding style= document transport= http://schemas.xmlsoap.org/http / xmlns:soap= http://schemas.xmlsoap.org/wsdl/soap > <wsdl:operation> <wsdl:input><soap:body use= literal /> </wsdl:input> <wsdl:output><soap:body use= literal /> </wsdl:output> </wsdl:operation>... </wsdl:binding> E.45 4.5 Bindung an das Übertragungsprotokoll (2) Bedeutung des use-attributs Codierung gemäß XML-Schema bei literal eigene Codierung bei encoded Bedeutung des style-attributs Einfügen der Elemente gemäß XML-Schema bei document Nachricht wird als XML-Dokument zusammengesetzt Einfügen mit automatisch generiertem Element bei rpc Nachricht wird als Request-Reply-Interaktion codiert E.46
4.6 Dienstbeschreibung Beschreibung einer konkreten Dienstinstanz <wsdl:service name= Account > <wsdl:port name= AccountPort binding= AccountSoapBinding > <soap:address location= http://www.treasurebank.com/ws/account.jsp /> </wsdl:port> </wsdl:service> E.47 4.7 WSDL 2.0 Schnittstellenbeschreibung interface-element fasst message- und porttype-elemente zusammen Nachrichtenaustausch-Muster pro interface-element Attribut pattern Definition der Nachrichten pro Operation Rückgriff auf die Typen aus den types-elementen Definition der Fehlernachrichten E.48
5 UDDI Universal Service Description, Discovery and Integration Description Beschreibung von Geschäftseinheiten (Firmen, Organisationen etc.) Beschreibung von Web-Services inklusive Zugangsmöglichkeiten Beschreibung von Geschäftsverbindungen, Kategorien und Spezifikationen Discovery Abfragemöglichkeit nach allen gespeicherten Daten Integration Abfragemöglichkeit der Schnittstellenbeschreibung und -spezifikation zur Integration eines Service in eine Anwendung E.49 5 UDDI (2) Dienstleistung des UDDI-Services White Pages liefert Angaben zu Unternehmen (Adresse, Name etc.) Yellow Pages liefert Unternehmen und Services bestimmter Klassifikation (z.b. alle Klemptner in Ulm) Green Pages liefert technische Details zum Dienstzugang (z.b. WSDL-Beschreibungen zu Web-Services) E.50
5.1 UDDI-Datenmodell Beschreibung aller Daten in XML (bzw. XML-Schema) Geschäftseinheiten Element businessentity beschreibt Firmen, Organisationen etc. mögliche Daten Kontaktadressen, Telefonnummern Firmenbeschreibungen Kategorisierungen (Einteilungen bzgl. einer Taxonomie, z.b. für Yellow-Pages-Suche) Identifikatoren (Aufzählung eindeutiger Benennungen, z.b. USt.-ID, Steuernummer) E.51 5.1 UDDI-Datenmodell (2) Geschäftseinheiten (fortges.) businessentity name description contacts 0..1 0..1 identifierbag categorybag identifierbag nimmt Liste der Bezeichner auf categorybag nimmt Liste der Kategorisierungen auf E.52
5.1 UDDI-Datenmodell (3) Dienstgruppen Element businessservice mehrere Dienste beschreiben je eine Menge zusammengehöriger Web-Services direkt einer Geschäfteinheit zugeordnet weitere Kategorisierung Beispiel: Dienstgruppe Bezahldienste E.53 5.1 UDDI-Datenmodell (4) Dienstgruppen (fortges.) businessentity 0..n businessservice name description 0..1 categorybag E.54
5.1 UDDI-Datenmodell (5) Bindungsvorlagen Element bindingtemplate mehrere Vorlagen beschreiben den Zugang zu einem Web-Service (z.b. in WSDL) direkt einer Dienstgruppe zugeordnet businessservice 0..n bindingtemplate description E.55 5.2 Beschreibung von Semantik Identifikation (Identifier) generische Angabe von Identifikatoren Beispiele: Steuernummer und ähnliche eindeutige Identifikatoren zugeordnet z.b. an Geschäftseinheiten generische Implementierung enthält Verweis auf ein so genanntes tmodel über UUID (weltweit eindeutige ID) einen Identifikator, z.b. Steuernummer E.56
5.2 Beschreibung von Semantik (2) Ein tmodel ist Teil des Datenmodells und beschreibt eine Art Spezifikation (technisches Modell) Element tmodel Attribut tmodelkey enthält weltweit eindeutigen Namen (UUID) enthält Beschreibungstext enthält URIs zu Spezifikationen Beispiel: tmodel beschreibt deutsche Steuernummern enthält Identifier und Kategorisierungsdaten beziehen sich auf das tmodel bzw. seine Spezifikation E.57 5.2 Beschreibung von Semantik (3) tmodel (fortges.) tmodel name description overviewdoc 0..1 0..1 identifierbag categorybag overviewdoc enthält URIs zu Spezifikationsdokumenten E.58
5.2 Beschreibung von Semantik (4) Kategorien, Taxonomien generische Angaben zur Einordnung gemäß einer Menge von Kategorien bzw. einer Taxonomie Beispiel: Einordnung einer Geschäftseinheit nach Geschäftsbereich zugeordnet einer Geschäftseinheit, Dienstgruppe oder einem tmodel generische Implementierung enthält Verweis auf das beschreibende tmodel eine Angabe zur Einordnung in die Kategorie oder Taxonomie (Name-Wert-Paar) E.59 5.2 Beschreibung von Semantik (5) Verknüpfung von Identifikatoren und Kategorien mit tmodels tmodel 0..1 0..1 identifierbag categorybag 1..n 1..n keyedreference tmodelkey keyvalue keyname tmodelkey: Verweis auf eindeutige UUID des tmodels keyvalue: Bezeichner innerhalb der tmodel-spezifikation keyname: beschreibender Name E.60
5.2 Beschreibung von Semantik (6) Spezifikation von Bindungsvorlagen Angabe von Bindungsinformationen (URI des Web-Service) generische Spezifikation der Schnittstelle generische Spezifikation enthält Angaben zu einem tmodel pro Schnittstellenspezifikation muss ein tmodel existieren z.b. eines, das sich auf eine bestimmte WSDL-Beschreibung bezieht andere Beschreibungstechniken neben WSDL möglich E.61 5.3 Datenmodell im Überblick businessentity tmodel 0..1 0..n 0..1 0..1 0..1 businessservice identifierbag 0..n bindingtemplate 0..1 0..n categorybag 1..n 1..n keyedreference tmodelinstanceinfo E.62
5.4 Beschreibung in XML Beispiel: tmodel für bestimmte WSDL-Beschreibung <tmodel xmlns="urn:uddi-org:api" tmodelkey="uuid:12345-1234-234-234-234"> <name>treasurebank-com:creditcheck</name> <description xml:lang="en">check limit reporter </description> <overviewdoc> <overviewurl>http://treasurebank.com/creditcheck.wsdl </overviewurl> </overviewdoc>... tmodel wird mit eindeutiger ID versehen (Attribut tmodelkey) Name, Beschreibung, URL der Spezifikation E.63 5.4 Beschreibung in XML (2) Beispiel: tmodel für bestimmte WSDL-Beschreibung (fortges.) Kategorieeinordnung Kategorie als Typ... <categorybag> <keyedreference tmodelkey="uuid:cd153257-086a-4237-b336-6bdcbdcc6635" keyname="consumer credit gathering or reporting services" keyvalue="84.14.16.01.00"/> <keyedreference tmodelkey="uuid:c1acf26d-9672-4404-9d70-39b756e62ab4" keyname="types" keyvalue="wsdlspec"/> </categorybag> </tmodel> beachte: keyname-atribute spielen keine semantische Rolle, fungieren eher als Kommentar Bedeutung bereits durch tmodel festgelegt E.64
5.4 Beschreibung in XML (2) Beispiel: Definition einer Bindungsvorlage <bindingtemplate servicekey="cccccccc-cccc-cccc-cccc-cccccccccccc" bindingkey="dddddddd-dddd-dddd-dddd-dddddddddddd"> <accesspoint URLType="https"> https://treasurebank.com/creditcheck</accesspoint> <tmodelinstancedetails> <tmodelinstanceinfo tmodelkey="uuid:12345-1234-234-234-234"/> </tmodelinstancedetails> </bindingtemplate> Verweis auf das entsprechende tmodel, das die Schnittstelle beschreibt Referenzen generell als UUID-URIs mit eindeutigen IDs E.65 5.5 Beispiele für tmodels tmodel für Typen im vorherigen Beispiel: types=wsdlspec andere mögliche Typen: identifier: markiert ein tmodel als Spezifikation für Identifikatoren categorization: markiert ein tmodel als Spezifikation einer Taxonomie specification: markiert ein tmodel als Spezifikation für Web-Services- Interaktionen wsdlspec: markiert ein tmodel als Spezifikation für Web-Services- Interaktionen mit Hilfe von WSDL-Beschreibungen E.66
5.5 Beispiele für tmodels (2) tmodel für geografische Information Benutzung der zweibuchstabigen Länderangaben nach ISO 3155 Beispiel für Eintrag im Category-Bag <keyedreference keyname="iso-ch:3155-1999:california, USA" keyvalue="us-ca" tmodelkey="uuid:4e49a8d6-d5a2-4fc2-93a0-0411d8d19e88"/> tmodel für Geschäftsfelder United Nations Standard Products and Services Code (UNSPSC) eindeutiger Code zu Bezeichnung von Produkt- und Dienstleistungskategorien North American Industry Classification System (NAICS) E.67 5.5 Beispiele für tmodels (3) tmodel für generelle Kategorien festgelegtes tmodel um generelle Kategorien und Taxonomien zu erfassen keyname wird semantisch bedeutsam muss Taxonomie und Kategoriefeld eindeutig bestimmen keyvalue enthält Einteilung bzgl. dieser Kategorie Vorteil: alle Kategorien können erfasst werden (auch ohne, dass spezielles tmodel vorliegt) Nachteil: Klassifikation kann nicht von jedem ermittelt werden (keyname muss bekannt sein) E.68
5.6 UDDI-Architektur Mehrere Verzeichnisserver IBM, Microsoft... täglicher Datenaustausch Mehrere Abfragemöglichkeiten White pages Informationen über individuelle Geschäftseinheiten Suche im Namen, Beschreibungstext, Kontaktdaten, Identifier Yellow Pages Informationen über Geschäftseinheiten mit gleichen Eigenschaften Suche nach Kategorien (z.b. Tätigkeitsfeld, Ortskategorie etc.) Green Pages Informationen über Spezifikationen Suche in tmodels E.69 5.6 UDDI-Architektur (2) Zugang über Web-Services SOAP über HTTP bzw. HTTPS Abfrageschnittstellen (Inquire API) frei zugänglich alternativ zu Web-Service auch Web-Schnittstelle unter http://www.soapclient.com/uddisearch.html Durchsuchen der Verzeichnisse und Anzeige der Informationen als Webseiten Eintragungsschnittstellen (Publication API) Registrierung bei den Verzeichnisanbietern Zugangscodes müssen in SOAP-Nachricht integriert werden E.70
5.7 Abfrageschnittstelle Inquiry-API Suchmethoden find_xxx-methoden suchen von Geschäftseinheiten, Dienstgruppen, Bindungsvorlagen und tmodels Angabe von Parametern zur Eingrenzung der Suche (z.b. notwendige Kategorien, Identifikatoren oder tmodels) Menge der Antworten eingrenzbar findqualifiers bestimmen Suchmodus z.b. find_business suche nach Geschäftseinheiten E.71 5.7 Abfrageschnittstelle (2) FindQualifiers Parametrierung der Suche und Antwortrückgabe Überschreiben der Default-Kombinationsregel für Suchparameter AND für alle Parameter OR für alle Parameter exakte Suche oder Ähnlichkeitssuche Sortierung der Antworten nach Namen, Modifikationsdatum aufsteigend, absteigend E.72
5.7 Abfrageschnittstelle (3) Abfragemethoden get_xxx-methoden ermitteln von Daten, die per UUID bekannt sind z.b. get_businessdetail ermittelt alle Daten zu einer Geschäftseinheit E.73 5.8 Eintragungsschnittstelle Publisher-API Aktualisierungs- bzw. Eintragungsmethodenen save_xxx-methoden speichern der Daten von Geschäftseinheiten, Dienstgruppen, Bindungsvorlagen und tmodels z.b. save_business falls noch keine UUID angegeben ist, wird neue erzeugt Rückgabe ist eingetragenes Datum E.74
5.8 Eintragungsschnittstelle (2) Löschmethoden delete_xxx-methoden löscht Daten von Geschäftseinheiten, Dienstgruppen, Bindungsvorlagen und tmodels z.b. delete_business Daten einer Geschäftseinheit werden gelöscht E.75 5.9 Beziehungen zwischen Geschäftseinheiten Geschäftseinheiten können beliebige Beziehungen untereinander besitzen z.b. Tochterunternehmen, Handelspartner, Strategische Partnerschaft etc. Datenmodell Element publisherassertion Unterelemente fromkey, tokey: bezeichnen jeweils eine Geschäftseinheit keyedreference: referenzieren ein tmodel vom Typ relationship keyname und keyvalue werden beide genutzt businessentity tmodel businessentity publisherassertion publisherassertion E.76
5.9 Beziehungen zwischen Geschäftseinheiten (2) Anlegen der Beziehungen Methode add_publisherassertion beide Geschäftseinheiten legen Beziehungsstruktur an erst dann wird Beziehung für die Öffentlichkeit sichtbar zuständiger Administrator kann abfragen, welche offenen Beziehungsstrukturen von anderen angelegt wurden (Methode get_assertionstatusreport) E.77 5.10 Beispiel Geschäftseinheit (businessentity) eine Geschäftseinheit: Übungsbetrieb Vorlesung AvID eine Geschäftseinheit pro Studierendem Dienstgruppe (businessservice) eine Dienstgruppe pro Übungsaufgabe Bindungsvorlage (bindingtemplate) eine pro Web-Service in der Übungsaufgabe E.78
5.10 Beispiel (2) Identifikator Matrikelnummer der Studierenden im identifierbag der jeweiligen Geschäftseinheit <keyedreference tmodelkey="uuid:1" keyname="matrikelnummern Univ. Ulm" keyvalue="481234"/> Verweis auf ein tmodel, das Matrikelnummern definiert Wert (keyvalue) entspricht Matrikelnummer der Geschäftseinheit des Studierenden Kategorie Nummer der Übungsaufgabe bei Dienstgruppe im categorybag Verweis auf tmodel für Übungsaufgabeneinteilung Wert (keyvalue) entspricht Übungsaufgabennummer E.79 5.10 Beispiel (3) tmodel für Übungsaufgabeneinteilung categorybag des tmodels enthält Kategorien für das tmodel Einordnung als categorization vom tmodel für tmodel-typen Verweis auf tmodel für Typen Wert entspricht categorization Einordnung als unchecked tmodel (keine Validierung der Zuordnung) Verweis auf tmodel für Typen Wert entspricht unchecked tmodel für Typen categorybag enthält: Einordnung als categorization (zum tmodel für Typen) Einordnung als checked (zum tmodel für Typen) E.80
6 Zusammenschaltung von Web-Services Komposition von Web-Services zu neuen Web-Services abstrakte Beschreibung der internen Struktur Workflow-Konzept abstrakte Beschreibung der Zusammenhänge und Interaktionen Zwei Standards Web Service Choreography Interface vom W3C Business Process Execution Language for Web Services (BPEL4WS) von Microsoft, IBM, Siebel, SAP, BEA beide Standards noch nicht ausgereift E.81 6.1 Beispiel: BPEL4WS XML-Dokument zur Beschreibung eines neuen Web-Service Partner (Element <partner>) Web-Services zur Komposition des neuen Service Beschreibung und Verweis Variablen (Element <variable>) Deklaration von Variablen Verweis auf Nachrichtenformate aus WSDL Workflows (Element <sequence>) Beschreibung der Interaktion (Sequenz von Anweisungen) z.b. Aufrufe, Ergebnisextraktion, Rückgabe von Ergebnissen, Verzweigungen, Schleifen... E.82
7 Werkzeugunterstützung Modellierungs-Werkzeuge z.b. UML-Modellierer abstrakte Beschreibung des Anwendungsdesigns meist objektbasierte Modellierung Modellierungs-Werkzeuge und Web-Services Ableitung der WSDL-Schnittstelle aus abstrakten Anwendungsschnittstellen z.b. automatische Generierung von WSDL-Dokumenten Ableitung von (einfachen) Web-Service-Kompositionen z.b. automatische Generierung von BPEL4WS-Dokumenten E.83 7 Werkzeugunterstützung (2) Implementierungswerkzeuge Werkzeuge zur Generierung von Client-Software aus WSDL-Dokument wird entsprechende Client-Software generiert Werkzeuge zur Generierung von Server-Software aus WSDL-Dokument wird entsprechende Web-Service-Implementierung erzeugt Operationen des Web-Service müssen noch ausgefüllt werden (Skeleton- Ansatz) oder Implementierungsklasse muss eingehängt werden (Tie-Ansatz) Werkzeuge zur Generierung von WSDL-Dokumenten aus Server-Software wird automatisch WSDL-Dokument erzeugt E.84
8 Web-Services in Java 8.1 JWSDP JWSDP steht für Java Web-Services Developer Pack Sun Microsystems Java API für XML Message (JAXM) 1.1 Schnittstelle zum Versenden und Empfangen von SOAP-Nachrichten SOAP with Attachments API for Java (SAAJ) 1.1 Schnittstelle zur Erzeugung von SOAP-Nachrichten mit Anhängen Anhänge ähneln den Anhängen von E-Mails Dateien beliebigen Inhalts können angehängt werden E.85 8.1 JWSDP (2) Java API für XML RPC (JAXRPC) 2.0 Umsetzung von Java-Remote-Interfaces auf Web-Services-Schnittstellen Java/WSDL-Mapping Umsetzung von Web-Services-Schnittstellen auf Java WSDL/Java-Mapping Tools zum Umwandeln der Mappings Integration mit EJB, Servlets und JSP E.86
8.2 Apache Axis Apache-Projekt zur Implementierung von SOAP Implementierung in Java und C++ Typabbildung definierte Abbildung von XML-Schema-Typen in die Programmiersprache Werkzeuge automatische Generierung von Client-Software aus WSDL-Dokumenten und umgekehrt WSDD (Web Service Deployment Descriptor) Axis-eigene XML-Anwendung zur Beschreibung von Web-Service-Instanzen Zugangspunkte, Klassen, interne Architektur des Service E.87 8.2 Apache Axis (2) Dynamische SOAP-Aufrufe Schematischer Ablauf Erzeugung eines Call-Objekts Angabe der Ziel-URL Einlagern der Parameter mit Typangabe Aufruf einer invoke-funktion am Call-Objekt Ermitteln der Ergebnisse über Aufrufe am Call-Objekt E.88
8.2 Apache Axis (3) Interne Service-Architektur von Axis (Serverseite) Transport Global Service Provider Target Service Handler in der Transportkette Manipulationen von SOAP-Nachrichten Handler in der Global -Kette z.b. Anpassungen von SOAP-Header-Elementen Handler in der Service-Kette service-spezifische Anpassungen z.b. Decodierungen etc. E.89 8.3 EJB und Web-Services Adaptersoftware Umwandlung von SOAP-Nachrichten in EJB-Aufrufe (und zurück) Beispiel: Axis Transport Global Service EJB-Provider EJB- Bean spezielles Provider-Element für Containerzugang E.90
8.3 EJB und Web-Services (2) Beispiel: JBoss.Net JBoss: Open-Source EJB-Container Integration von Axis spezieller Provider Stateless SessionBeans Statefull Session Beans bei SSL-basierten SOAP-Verbindungen (mehrere Anfragen der Session über eine Verbindung) mit Cookies im HTTP-Transport automatische WSDL-Generierung spezielle Methode des Provider-Objekts Reflection über Home- und Bean-Interfaces E.91 8.3 EJB und Web-Services (3) Service Endpoint Neuerung im EJB-Standard Version 2.1 RMI-fähige Schnittstelle für Stateless Session Beans kein Home-Interface zum Zugriff notwendig z.b. Zugriff über Namensdienstanfrage direkt auf Endpoint wg. Zustandslosigkeit leicht realisierbar automatische Bean-Erzeugung bei Zugriff bzw. Pooling Implementierung Endpoint-Interface enthält RMI-fähige Beanmethoden Eintrag des Endpoint-Interface im Deployment-Descriptor z.b. <service-endpoint>example.accountws </service-endpoint> E.92
8.3 EJB und Web-Services (4) WSDL-Mapping für Endpoint-Interfaces Umsetzung des Java-Interface auf WSDL durch Werkzeugunterstützung Adaptersoftware im Container Umsetzung von SOAP-Nachrichten auf Endpoint-Aufrufe E.93 9 Zusammenfassung 9.1 Vorteile von Web-Services weitgehend akzeptierte Technologie zur Interaktion in heterogenen Systemen XML-Anwendungen viele andere Standards starkes Industrieengagement E.94
9.2 Nachteile von Web-Services Web-Services kennen Referenzen auf Web-Services jedoch noch keine transparente Kommunikation von Referenzen vgl. Parameterübergabe bei Java RMI Komplexes Programmiermodell viele beteiligte XML-Dokumente mit komplexer Struktur aber: Werkzeugunterstützung automatische Erzeugung Gefahr von Inkompatibilitäten Standards sind noch nicht ausgereift herstellerspezifische Feinheiten bei Implementierungen Standards sind offen für Alternativen z.b. CORBA-Abbildung nach WSDL, Nutzung einer Alternative zu SOAP, Nutzung einer WSDL-Alternative in UDDI Gefahr von Inkompatibilität durch partielle Implementierungen E.95 10 Literatur W3C / OASIS / WS-I http://www.w3c.org http://www.oasis.org http://www.ws-i.org SOAP SOAP Version 1.2 Part 0: Primer. W3C, 2003. SOAP Version 1.2 Part 1: Messaging Framework. W3C, 2003. SOAP Version 1.2 Part 2: Adjuncts. W3C, 2003. Web-basierter Zugriff http://www.mindreef.net WSDL WSDL Version 2.0 Part 1: Core Language. W3C, 2004. WSDL Version 2.0 Part 2: Message Exchange Patterns. W3C, 2004. WSDL Version 1.2 Part 3: Bindings. W3C, 2003. E.96
10 Literatur (2) UDDI UDDI Version 2.04 API. OASIS, 2002. UDDI Version 2.03, Data Structure Reference. OASIS, 2002. Web-basierter Zugriff http://www.soapclient.com/uddisearch.html JWSDP JAXM http://java.sun.com/xml/downloads/jaxm.html JAXR http://java.sun.com/xml/jaxrpc/index.jsp Apache Axis http://www.apache.org/axis/ E.97