Web Services

Kenneth M. Anderson <kena@cs.colorado.edu>

Lecture 11: Web Service Examples

Agenda

Data Binding

XML Beans Example

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="http://openuri.org/addressBook"
    targetNamespace="http://openuri.org/addressBook"
    elementFormDefault="qualified"
    attributeFormDefault="unqualified">

    <xs:complexType name="addressType">
        <xs:sequence>
            <xs:element name="streetInfo" type="xs:string" minOccurs="1" maxOccurs="3"/>
            <xs:element name="city"       type="xs:string" />
            <xs:element name="state"      type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="postalCode" type="xs:string" />
            <xs:element name="country"    type="xs:string" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="personType">
        <xs:sequence>
            <xs:element name="name"    type="xs:string" />
            <xs:element name="address" type="tns:addressType" />
            <xs:element name="phone"   type="xs:string" />
            <xs:element name="dateOfBirth" type="xs:date" />
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="entryType">
        <xs:sequence>
            <xs:element name="person" type="tns:personType" />
            <xs:element name="creationDate" type="xs:dateTime" />
            <xs:element name="modificationDate" type="xs:dateTime" />
        </xs:sequence>
        <xs:attribute name="id" type="xs:integer" use="required" />
    </xs:complexType>

    <xs:complexType name="addressBookType">
        <xs:sequence>
            <xs:element name="entry" type="tns:entryType" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>

    <xs:element name="addressBook" type="tns:addressBookType" />

</xs:schema>
            
import java.io.File;
import org.apache.xmlbeans.*;
import org.openuri.addressBook.*;


public class addressBook {

    public static void main(String[] args) throws Exception {

        File xmlFile = new File("addressBook.xml"); 

        // Bind the instance to the generated XMLBeans types.
        AddressBookDocument abDoc = AddressBookDocument.Factory.parse(xmlFile); 

        AddressBookType ab = abDoc.getAddressBook();

        EntryType[] entries = ab.getEntryArray();

        for (int i = 0; i < entries.length; i++) {
            EntryType  e    = entries[i];
            int        id   = e.getId().intValue();
            PersonType p    = e.getPerson();
            String     name = p.getName();
            System.out.println("Entry " + id + ": " + name);
        }
    }
}
            
<?xml version="1.0" encoding="UTF-8"?>
<addressBook
    xmlns="http://openuri.org/addressBook"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://openuri.org/addressBook addressBook.xsd">
    <entry id="0">
        <person>
            <name>Kenneth M. Anderson</name>
            <address>
                <streetInfo>Department of Computer Science</streetInfo>
                <streetInfo>University of Colorado</streetInfo>
                <streetInfo>430 UCB</streetInfo>
                <city>Boulder</city>
                <state>CO</state>
                <postalCode>80309-0430</postalCode>
                <country>USA</country>
            </address>
            <phone>+1 (303) 492-6003</phone>
            <dateOfBirth>1968-08-25</dateOfBirth>
        </person>
        <creationDate>2006-04-28T12:15:00</creationDate>
        <modificationDate>2006-04-28T12:15:00</modificationDate>
    </entry>
    <entry id="1">
        <person>
            <name>Leysia Palen</name>
            <address>
                <streetInfo>Department of Computer Science</streetInfo>
                <streetInfo>University of Aarhus</streetInfo>
                <streetInfo>IT-parken, Aabogade 34</streetInfo>
                <city>Aarhus N</city>
                <postalCode>DK-8200</postalCode>
                <country>Denmark</country>
            </address>
            <phone>+45 8942 5617</phone>
            <dateOfBirth>1968-05-21</dateOfBirth>
        </person>
        <creationDate>2006-04-28T13:04:00</creationDate>
        <modificationDate>2006-04-28T13:04:00</modificationDate>
    </entry>
</addressBook>
            
Entry 0: Kenneth M. Anderson
Entry 1: Leysia Palen
            

Axis 2: Web Services Infrastructure

Axis 2: Example

<?xml version="1.0" encoding="utf-8"?>
<service name="addressBook" scope="application">
    <description>
        This service provides operations over an address book. You can
        create, update, and retrieve entries.
    </description>
    <parameter name="ServiceClass"
               locked="false">addressBook.addressBook</parameter>
    <parameter name="addressBookDir" locked="false">
        /Users/kena/java/tomcat5/webapps/axis2/WEB-INF/addressBook
    </parameter>
    <operation name="addEntry">
        <messageReceiver
            class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
    </operation>
    <operation name="numEntries">
        <messageReceiver
            class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
    </operation>
    <operation name="getEntries">
        <messageReceiver
            class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
    </operation>
    <operation name="getEntry">
        <messageReceiver
            class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
    </operation>
    <operation name="removeEntry">
        <messageReceiver
            class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
    </operation>
    <operation name="updateEntry">
        <messageReceiver
            class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver" />
    </operation>
</service>
            

One step forward, one step back?

Tim Bray Discussion