Listing 1 • XDS Mapping Document

<xdl:querysheet>

    <xdl:datasource ns="personDB"/>

    <xdl:statement ns="getPersons">
      <![CDATA[
      select person.firstname, person.lastname, passport.ppn
      from person, location, passport
      where person.id = passport.person and
            person.location = location.id and 
            ((location.x > {$upperLeftLon} and 
              location.x < {$lowerRightLon}) and 
             (location.y < {$upperLeftLat} and 
              location.y > {$lowerRightLat}))
      ]]>
    </xdl:statement>
    <xdl:element name="persons">
      <xdl:transaction datasource="%personDB" exception="stop">
        <xdl:session statement="%getPersons" mode="query">
          <xdl:for-each expr="*">
            <xdl:element name="person">
              <xdl:element name="firstName" expr="*1"/>
              <xdl:element name="lastName" expr="*2"/>
              <xdl:element name="passportNumber" expr="*3"/>
            </xdl:element>
          </xdl:for-each>
        </xdl:session>
      </xdl:transaction>
    </xdl:element>
</xdl:querysheet>

Listing 2 • RPC WSDL

<wsdl:definitions>
  <types>
    <xsd:schema>
    <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
    <xsd:complexType name="personResults">
    <xsd:sequence>
          <xsd:element name="persons" type="intf:personList"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="personList">
        <xsd:sequence>
          <xsd:element name="person" type="intf:personType" minOccurs="0"
		  maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="personType">
        <xsd:sequence>
            <xsd:element name="firstName" type="xsd:string"/>
            <xsd:element name="lastName" type="xsd:string"/>
            <xsd:element name="passportNumber" type="xsd:string"/>
        </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>
  </types>
  <wsdl:message name="requestPersonnelResponse">
    <wsdl:part name="requestPersonnelReturn" type=
      "impl:personResults"/>
  </wsdl:message>
  <wsdl:message name="requestPersonnelRequest">
    <wsdl:part name="upperLeftLat" type="xsd:float"/>
    <wsdl:part name="upperLeftLon" type="xsd:float"/>
    <wsdl:part name="lowerRightLat" type="xsd:float"/>
    <wsdl:part name="lowerRightLon" type="xsd:float"/>
  </wsdl:message>
.
.
</wsdl:definitions>

Listing 3•Axis Service Implementation

public Document requestPersonnel(float upperLeftLat, float 
 upperLeftLon, float lowerRightLat, float lowerRightLon) throws 
 XDSException {
    //Load a HashMap with parameters
    HashMap pMap = new HashMap();
    pMap.put ("upperLeftLat", String.valueOf(upperLeftLat));
    pMap.put ("upperLeftLon", String.valueOf(upperLeftLon));
    pMap.put ("lowerRightLat", String.valueOf(lowerRightLat));
    pMap.put ("lowerRightLon", String.valueOf(lowerRightLon));
    
    //Instantiate XDS, set mode to XML DOM, execute with 
       parameters
    XMLDataService xds = new XMLDataService("requestPersonnel.xds");
    xds.setMode (XDSProcessor.DOM);
    return (Document) xds.get(pMap);
}

Listing 4 JSP Service Implementation

<%-- Execute XDS mapping with HTTP parameters --%>
<xds:get map='requestPersonnel.xds' mode='DOM'>
  <xds:param name='upperLeftLat' value='<%=request.getParameter("upperLeftLat")%>'/>
  <xds:param name='upperLeftLon' value='<%=request.getParameter("upperLeftLon")%>'/>
  <xds:param name='lowerRightLat' value='<%=request.getParameter("lowerRightLat")%>'/>
  <xds:param name='lowerRightLon' value='<%=request.getParameter("lowerRightLon")%>'/>
</xds:get>

Listing 5 Self-Service SOAP Envelope

<ns1:Envelope>
  <ns2:Parameters>
    <ns2:Parameter name="upperLeftLat" value="value"/>
    <ns2:Parameter name="upperLeftLon" value="value"/>
    <ns2:Parameter name="lowerRightLat" value="value"/>
    <ns2:Parameter name="lowerRightLon" value="value"/>
  </ns2:Parameters>
  <ns2:Mapping>
    <xdl:querysheet>
      ...
    </xdl:querysheet>
  </ns2:Mapping>
</ns1:Envelope>

Listing 6 Self-Service Axis Implementation

public Document service(Document msg) {
        //Parse the Parameter Elements and load HashMap
        HashMap pMap = new HashMap();
        Element parameters = (Element) msg.getElementsByTagNameNS("ns2",
		"Parameters").item(0);
        NodeList params = parameters.getElementsByTagNameNS("ns2", "Parameter");
        for(int i=0; i < params.getLength(); i++) {
            Element param = (Element) params.item(i);
            pMap.put(param.getAttribute("name"), param. getAttribute("value"));
        }

        //Get the XDS mapping document from the SOAP Body
        Document map =
		DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
        Element mapping = (Element) msg.getElementsByTagNameNS("ns2",
		"Mapping").item(0);
        Node xdsroot = map.importNode(mapping.getFirstChild(), true);
        map.appendChild(xdsroot);

        //Instantiate XDS, set mode to XML DOM, execute with parameters
        XMLDataService xds = new XMLDataService(map);
        xds.setMode(com.saic.xds.XDSProcessor.DOM);
        return (Document) xds.get(pMap);
}

Listing 7 Self-Service JSP Implementation

<xds:get map='REQUEST' mode='DOM'>
  <%-- create an XDS parameter for each request parameter --%>
  <%
    Map paramMap = request.getParameterMap();
    Iterator paramIter = paramMap.keySet().iterator();
    while(paramIter.hasNext()) {
      String key = (String) paramIter.next();
      String value = ((String []) paramMap.get(key)) [0];
  %>
      <xds:param name='<%=key%>' value='<%=value%>'/>
  <%
    }
  %>

</xds:get>