ws-wsif-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ow...@apache.org
Subject cvs commit: xml-axis-wsif/forrest-src/src/documentation/content todo2document.xsl changes2document.xsl
Date Fri, 31 Jan 2003 13:06:52 GMT
owenb       2003/01/31 05:06:51

  Added:       forrest-src/src/documentation/skins/wsif-skin/images
                        spacer.gif tab-left.gif singlepage.gif
                        built-with-cocoon.gif centipede-logo-small.gif
                        page.gif chapter.gif chapter_open.gif label.gif
                        tab-right.gif menu-left.gif printer.gif favicon.ico
                        tabSel-right.gif search-left.gif tabSel-left.gif
                        menu-right.gif search-right.gif current.gif
               forrest-src/src/documentation/content/xdocs/providers
                        ejb_provider.xml apacheaxis_provider.xml
                        apachesoap_provider.xml index.xml jca_provider.xml
                        java_provider.xml book.xml
               forrest-src/src/documentation/content/xdocs/providers/wsdl_extensions
                        ejb_extension.xml j2c_extension.xml
                        jms_extension.xml java_extension.xml book.xml
               forrest-src/src/documentation/skins/wsif-skin/xslt/fo
                        document2fo.xsl
               forrest-src/src/documentation/content/xdocs/developers
                        index.xml cvs.xml book.xml building.xml
                        customizing.xml tests.xml how_to_provider.xml
                        how_to_wsdl_extensions.xml trace.xml
                        mime_attachments.xml
               forrest-src/src/documentation/skins/wsif-skin/xslt/html
                        dotdots.xsl pathutils.xsl book2menu.xsl split.xsl
                        document2html.xsl site2xhtml.xsl tab2menu.xsl
               forrest-src/src/documentation/resources/images wsif_j2.gif
                        wsif.gif WSDLJ2EE.gif TextJ2C.gif wsif_j1.gif
                        group-logo.gif project-logo.gif WSDLConn.gif
                        icon.png WSIFForm.gif
               forrest-src/src/documentation skinconf.xml sitemap.xmap
                        README.txt
               forrest-src/src/documentation/content/xdocs book.xml
                        requirements.xml news.xml overview.xml bugs.xml
                        quickstart.xml faq.xml tabs.xml index.xml mail.xml
                        references.xml
               forrest-src/src/documentation/skins/wsif-skin/scripts
                        breadcrumbs-optimized.js breadcrumbs.js
               forrest-src/src/documentation/content/xdocs/wsif_samples
                        book.xml index.xml
               forrest-src/src/documentation/skins/wsif-skin/css page.css
               forrest-src/src/documentation/content todo2document.xsl
                        changes2document.xsl
  Log:
  Add the WSIF project Forrest source files
  
  Revision  Changes    Path
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/spacer.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/tab-left.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/singlepage.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/built-with-cocoon.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/centipede-logo-small.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/page.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/chapter.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/chapter_open.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/label.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/tab-right.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/menu-left.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/printer.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/favicon.ico
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/tabSel-right.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/search-left.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/tabSel-left.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/menu-right.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/search-right.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/images/current.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/ejb_provider.xml
  
  Index: ejb_provider.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSIF EJB Provider</title> 
          </header> 
          <body>
            <p>WORK IN PROGRESS</p>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/apacheaxis_provider.xml
  
  Index: apacheaxis_provider.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSIF Apache Axis Provider</title> 
          </header> 
          <body>
            <p>WORK IN PROGRESS</p>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/apachesoap_provider.xml
  
  Index: apachesoap_provider.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSIF Apache SOAP Provider</title> 
          </header> 
          <body>
            <p>WORK IN PROGRESS</p>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSIF Providers</title> 
          </header> 
          <body> 
            <p>Information on the differenent providers shipped with WSIF and also the WSDL extensions used by these providers</p>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/jca_provider.xml
  
  Index: jca_provider.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSIF JCA Provider</title> 
          </header> 
          <body>
            <p>WORK IN PROGRESS</p>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/java_provider.xml
  
  Index: java_provider.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSIF Java Provider</title> 
          </header> 
          <body>
            <p>WORK IN PROGRESS</p>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/book.xml
  
  Index: book.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "book-cocoon-v10.dtd">
  
  <book software="WSIF"
    title="WSIF"
    copyright="@year@ The Apache Software Foundation"
    xmlns:xlink="http://www.w3.org/1999/xlink">
  
    <menu label="WSIF Providers">
      <menu-item label="Introduction" href="index.html"/>
      <menu-item label="Java" href="java_provider.html"/>
      <menu-item label="EJB" href="ejb_provider.html"/>
      <menu-item label="Apache SOAP" href="apachesoap_provider.html"/>
      <menu-item label="Apache Axis" href="apacheaxis_provider.html"/>
      <menu-item label="JCA" href="jca_provider.html"/> 
    </menu>
    <menu label="WSDL Extensions">
      <menu-item label="Java" href="wsdl_extensions/java_extension.html"/>
      <menu-item label="EJB" href="wsdl_extensions/ejb_extension.html"/>
      <menu-item label="JMS" href="wsdl_extensions/jms_extension.html"/>
      <menu-item label="J2C" href="wsdl_extensions/j2c_extension.html"/>  
    </menu>
  </book>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/wsdl_extensions/ejb_extension.xml
  
  Index: ejb_extension.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSDL EJB Extension</title> 
          </header> 
          <body>
            <section><title>Details</title>
  <p>The EJB binding is a WSDL binding that allows abstract functionality in the abstract service description (messages, operations and port types) 
  to be mapped to functionality offered by an enterprise java bean directly. This means that an EJB can be described using WSDL, and can be accessed 
  as a WSDL-described service through WSIF.</p>
  
  <p>The EJB binding extends WSDL with the following extensibility elements:</p>
  
  <source>
  &lt;definitions .... &gt; 
  
      &lt;!-- EJB binding --&gt; 
      &lt;binding ... &gt; 
          &lt;ejb:binding/&gt; 
          &lt;format:typeMapping style="uri" encoding="..."/&gt;? 
              &lt;format:typeMap typeName="qname"|elementName="qname" formatType="nmtoken"/&gt;* 
          &lt;/format:typeMapping&gt; 
          &lt;operation&gt;* 
              &lt;ejb:operation 
                  methodName="nmtoken" 
                  parameterOrder="nmtoken"? 
  		returnPart="nmtoken"?
                  interface="home|remote"? /&gt;? 
              &lt;input name="nmtoken"? /&gt;? 
              &lt;output name="nmtoken"? /&gt;? 
              &lt;fault name="nmtoken"? /&gt;? 
          &lt;/operation&gt; 
      &lt;/binding&gt; 
  
      &lt;service ... &gt; 
          &lt;port&gt;* 
               &lt;ejb:address 
                   className="nmtoken" 
                   jndiName="nmtoken"? 
                   initialContextFactory="nmtoken"?
                   jndiProviderURL="url"?
                   archive="nmtoken"? /&gt; 
          &lt;/port&gt; 
      &lt;/service&gt; 
  &lt;/definitions&gt; 
  </source>
  
  <p>Each element is described in detail below.</p>
  
  <ul>
  <li><strong><code>ejb:binding</code></strong>
  This indicates that the binding is an EJB binding.</li>
  
  <li><strong><code>format:typemapping</code></strong>
  This element allows the specification of a mapping from abstract types used in WSDL message parts (within the abstract service description) 
  to java types that can represent the same information. The style attribute is used to say something about the target type system (i.e. the 
  native type system being used to represent the abstract information); in the case of the java type system the value here must be "Java". 
  This use of this attribute allows this extension to be reused for other kinds of bindings. The encoding attribute must be a URI which is 
  used to denote the specific way in which the native type corresponds to the abstract type. We define a special encoding, the "Java" encoding, 
  with the rules that tell us how to create a java class corresponding to an abstract schema type that can be used through the WSDL java binding. 
  Details on the "Java" encoding follow. Having the encoding attribute allows us to map abstract types to java types in other convenient ways 
  by using a customized encoding.
  <br /><br />
  <strong>Java encoding</strong><br />
  The java encoding used by WSIF is unspecified. The reason it does not need to be specified is that encoding information is useful only when 
  the information contained within the java object is transformed in some way - serialized to a SOAP message, or converted to a representation 
  in another type system for example. If all we do with a WSIF message containing parts belonging to the java type system is invoke the 
  corresponding java service, we don't need to do anything more than verify that each message part is is represented using a java object 
  of the correct type (as specified by the typemapping element in the java binding).<br /><br />
  Of course, we envisage the need for transforming messages from one representation to another, but we leave the complete specification of 
  the java encoding for a later release.
  </li>
  <li>
  <strong><code>format:typemap</code></strong>
  Each typemap element maps an abstract type to a type in some more convenient type system; in the case of the EJB binding this is the java 
  type system. The typeName attribute is a qualified name for the abstract type being mapped (this must be one of the predefined schema types 
  recognised in WSDL, or a type defined under the &lt;types&gt; section in the WSDL). The elementName attribute may be used to specify an element 
  instead of a type (since WSDL message parts can be described either way). The formatType attribute is the java type corresponding to that 
  abstract type or element. It values must be one of the primitive java types (char, byte, short, int, long, float, double) or the fully 
  qualified name of a java class.</li>
  
  <li><strong><code>ejb:operation</code></strong>
  This element maps an abstract WSDL operation to a method offered by an EJB interface. The <em>methodName</em> attribute specifies the name of 
  the java method corresponding to the abstract operation. The <em>parameterOrder</em> attribute is similar to and overrides the <em>parameterOrder</em> 
  specification in the abstract operation. It specifies the ordering of the input message parts for the invocation; in the EJB binding case it 
  identifies the method signature. Having a <em>parameterOrder</em> attribute here allows us to map an abstract operation to an EJB method even if 
  their signatures aren't compatible in the ordering of parts. The <em>returnPart</em> is that part of the abstract output message which corresponds 
  to the return value of the java method. The <em>ejbInterface</em> attribute specifies whether the method is offered through the home interface or the 
  remote interface of the EJB; by default the client will assume that it is a method on the remote interface.</li>
  
  <li><strong><code>ejb:address</code></strong>
  This element is an extension under the WSDL <em>port</em> element that allows specification of an EJB object as an endpoint for a service available via 
  the EJB binding. The port whose address is specified this way must be associated with an EJB binding only.<br /><br />
  The <em>className</em> attribute specifies the fully qualified name of the home interface class of the EJB. The optional <em>jndiName</em> attribute 
  specifies the name under which this EJB can be looked up in a JNDI context.  The <em>initialContextFactory</em> and <em>jndiProviderURL</em> attributes 
  complete the set if information required to perform a JNDI lookup for the EJB. The optional <em>classLoader</em> attribute specifies the class loader to 
  be used for loading the service class, and the optional <em>archive</em> attribute is the location of a jar file that the client would need. It is upto 
  the service provider to insure that all java methods used for mapping abstract operations must be publicly available through the specified interface in the EJB.
  </li>
  </ul>
  
  </section>
  <section>
  <title>Example</title>
  
  <source>
  &lt;?xml version="1.0" ?&gt;
  
  &lt;definitions targetNamespace="http://wsifservice.addressbook/"
               xmlns:tns="http://wsifservice.addressbook/"
               xmlns:typens="http://wsiftypes.addressbook/"
               xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
               xmlns:format="http://schemas.xmlsoap.org/wsdl/formatbinding/"
               xmlns:java="http://schemas.xmlsoap.org/wsdl/java/"
               xmlns="http://schemas.xmlsoap.org/wsdl/"&gt;
  
    &lt;!-- type defs --&gt;
    &lt;types&gt;
      &lt;xsd:schema
        targetNamespace="http://wsiftypes.addressbook/"
                  xmlns:xsd="http://www.w3.org/1999/XMLSchema"&gt;
        &lt;xsd:complexType name="phone"&gt;
          &lt;xsd:element name="areaCode" type="xsd:int"/&gt;
          &lt;xsd:element name="exchange" type="xsd:string"/&gt;
          &lt;xsd:element name="number" type="xsd:string"/&gt;
        &lt;/xsd:complexType&gt;
  
        &lt;xsd:complexType name="address"&gt;
          &lt;xsd:element name="streetNum" type="xsd:int"/&gt;
          &lt;xsd:element name="streetName" type="xsd:string"/&gt;
          &lt;xsd:element name="city" type="xsd:string"/&gt;
          &lt;xsd:element name="state" type="xsd:string"/&gt;
          &lt;xsd:element name="zip" type="xsd:int"/&gt;
          &lt;xsd:element name="phoneNumber" type="typens:phone"/&gt;
        &lt;/xsd:complexType&gt;
      &lt;/xsd:schema&gt;
    &lt;/types&gt;
  
    &lt;!-- message declns --&gt;
    &lt;message name="AddEntryWholeNameRequestMessage"&gt;
      &lt;part name="name" type="xsd:string"/&gt;
      &lt;part name="address" type="typens:address"/&gt;
    &lt;/message&gt;
  
    &lt;message name="AddEntryFirstAndLastNamesRequestMessage"&gt;
      &lt;part name="firstName" type="xsd:string"/&gt;
      &lt;part name="lastName" type="xsd:string"/&gt;
      &lt;part name="address" type="typens:address"/&gt;
    &lt;/message&gt;
  
    &lt;message name="GetAddressFromNameRequestMessage"&gt;
      &lt;part name="name" type="xsd:string"/&gt;
    &lt;/message&gt;
  
    &lt;message name="GetAddressFromNameResponseMessage"&gt;
      &lt;part name="address" type="typens:address"/&gt;
    &lt;/message&gt;
  
    &lt;!-- port type declns --&gt;
    &lt;portType name="AddressBook"&gt;
      &lt;operation name="addEntry"&gt;
        &lt;input name="AddEntryWholeNameRequest" message="tns:AddEntryWholeNameRequestMessage"/&gt;
      &lt;/operation&gt;
      &lt;operation name="addEntry"&gt;
        &lt;input name="AddEntryFirstAndLastNamesRequest" message="tns:AddEntryFirstAndLastNamesRequestMessage"/&gt;
      &lt;/operation&gt;
      &lt;operation name="getAddressFromName"&gt;
        &lt;input name="GetAddressFromNameRequest" message="tns:GetAddressFromNameRequestMessage"/&gt;
        &lt;output name="GetAddressFromNameResponse" message="tns:GetAddressFromNameResponseMessage"/&gt;
      &lt;/operation&gt;
    &lt;/portType&gt;
  
    &lt;!-- binding declns --&gt;
    &lt;binding name="EJBBinding" type="tns:AddressBook"&gt;
      &lt;ejb:binding/&gt;
      &lt;format:typeMapping encoding="Java" style="Java"&gt;
        &lt;format:typeMap typeName="typens:address" formatType="addressbook.wsiftypes.Address" /&gt;
        &lt;format:typeMap typeName="xsd:string" formatType="java.lang.String" /&gt;
      &lt;/format:typeMapping&gt;
      &lt;operation name="addEntry"&gt;
        &lt;ejb:operation
           methodName="addEntry"
           parameterOrder="name address"
           interface="remote" /&gt;
        &lt;input name="AddEntryWholeNameRequest"/&gt;
      &lt;/operation&gt;
      &lt;operation name="addEntry"&gt;
        &lt;ejb:operation
           methodName="addEntry"
           parameterOrder="firstName lastName address"
           interface="remote" /&gt;
        &lt;input name="AddEntryFirstAndLastNamesRequest"/&gt;
      &lt;/operation&gt;
      &lt;operation name="getAddressFromName"&gt;
        &lt;ejb:operation
           methodName="getAddressFromName"
           parameterOrder="name"
           interface="remote"
           returnPart="address" /&gt;
        &lt;input name="GetAddressFromNameRequest"/&gt;
        &lt;output name="GetAddressFromNameResponse"/&gt;
      &lt;/operation&gt;
    &lt;/binding&gt;
    
    &lt;!-- service decln --&gt;
    &lt;service name="AddressBookService"&gt;
      &lt;port name="EJBPort" binding="tns:EJBBinding"&gt;
        &lt;ejb:address className="addressbook.wsiftypes.AddressBookHome"
                         jndiName="/services/addressbook"
                         initialContextFactory="com.mycompany.server.MyappInitialContext"
                         jndiProviderURL="ormi://myserver.mycompany.com/ejbsample"/&gt;
      &lt;/port&gt;
    &lt;/service&gt;
  
  &lt;/definitions&gt;</source>
  <p>In the above example, an address book service is offered through an EJB. The EJB object is looked up through the specified 
  context factory using the provider URL and lookup name. The service offers two variants of the <code>addEntry</code> operation. 
  One takes an input message consisting of a full name and address and the other accepts an input message with a first name and 
  last name (as separate message parts) and an address. Both of these operations are mapped to a java method called <code>addEntry</code>, 
  but there are different parameter lists (this is an overloaded method in the implementing class). Finally, the abstract operation 
  <code>getAddressFromName</code> is mapped to a java method of the same name. All of these methods are offered through the remote interface 
  of the EJB. The types <code>typesns:address</code> and <code>xsd:string</code> used during method invocations are mapped to java types 
  <code>addressbook.wsiftypes.Address</code> and <code>java.lang.String</code> respectively. Note that the type <code>typesns:phone</code> 
  does not need to be mapped to a java type since it is contained within the address type which is represented by a known java 
  class. WSIF does not need to know how this class represents the information described in the schema type if that is being done 
  is service invocation. If we needed to inspect the information in the WSIF message and transform it in some way, we would need 
  details on how the java class represents the type information (see the above discussion on the java encoding).</p>
  </section>
  </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/wsdl_extensions/j2c_extension.xml
  
  Index: j2c_extension.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSDL J2C Extension</title> 
          </header> 
          <body>
   <section><title>WSIF Extensions for J2EE Connector Architecture</title>
   <p>The WSIF Extensions for J2EE Connector 
   Architecture (J2C) allow Enterprise Information Systems (EIS) to 
   provide the following:</p>
   <ul>
     <li>Modeling of interactions with the EIS as 
     services, using WSDL.</li>
     <li>Execution of interactions with the EIS using 
     WSIF.</li>
     <li>Implementation of the Import 
     Service that  exposes EIS metadata  in WSDL.</li>
   </ul>
   <p>J2EE Connector Architecture 1.0 (specification 
   available at: &quot;http://java.sun.com/j2ee/download.html#connectorspec&quot;)&nbsp; provides a 
   runtime architecture that allows EIS Resource Adapters to plug into a J2EE 
   Application Server environment. The WSIF Extensions for J2C extend it to bring 
   the Resource Adapters into the world of services and also make them pluggable 
   into tool environments. The extensions specify the format of metadata that an 
   EIS must provide and define how a tool environment interacts with an EIS to get this 
  information, i.e. define the Import Service with operations to 
   list and import the EIS metadata in the tool environment independent manner. 
   The extensions also show how the EIS 
   provides code generation contributions. To support the execution of 
   interactions, the extensions  provide a set of 
   classes and interfaces that allow EIS to easily, especially if Resource 
   Adapter supports CCI, implement its specific WSIF provider.</p>
   </section>
   <section><title>Modeling</title>
   <p>Metadata support is important from two perspectives. First, tools want to be 
   able to discover meta information about the functions offered by an EIS. The 
   tools then aid a developer in building components (for example, Java Beans, EJBs and others) that use these functions. 
   runtimes either drive a connector 
   through code generated by the tools from the metadata, or they are engines that 
   drive a connector by interpreting the metadata.</p>
      
   <section><title>WSDL</title>
   <p>The following picture shows the WSDL document architecture. Shown at the top 
   are the sections that allow you to describe a service interface in an abstract 
   way. WSDL prefers to use XML Schema as its canonical type system. The sections at the bottom  describe how and where to access the 
   concrete service that implements the abstract interface. Looking at the W in WSDL may cause you to think that the language is for 
   describing Web Services only, but this is not true. The inventors equipped the 
   language with a smart extensibility mechanism, which allows you to describe any 
   kind of service, be it a Web Service or some legacy EIS service 
   (function).</p>
   <p>
   &nbsp;<img src="images/WSDLJ2EE.gif" alt="WSDL document architecture" width="351" height="331"/></p>
   <p><strong>WSDL and J2EE Connector Architecture - A Natural Fit</strong></p>
   <p>WSDL provides a standard way for describing which services are offered by a 
   specific EIS instance, and how you access them. The J2EE Connector Architecture 
   provides a standard client programming model for accessing EIS services.</p>
   <p>If you look at the WSDL information that is relevant for the single 
   execution of an operation you end up with a very natural fit between the two:</p>
   <p>
   <img src="images/TextJ2C.gif" alt="Relationship between WSDL and J2EE terms" width="294" height="90"/></p>
          </section>   
   
   <section><title>Connector Binding</title>
   <p>To invoke an operation through a connector we have to be able to capture 
   meta information about the following aspects:</p>
   <ul>
     <li>The connection properties to be set on a ManagedConnectionFactory.</li>
     <li>The interaction properties to be set on an InteractionSpec.</li>
     <li>The Records, for example, their structure and the specific way that they 
     have to be formatted.</li>
     <li>The operation, which combines InteractionSpec, 
     input Record, and output Record (provided by WSDL).</li>
     <li>A specific endpoint that offers particular 
     operation (provided by WSDL).</li>
   </ul>
   <p>ManagedConnectionFactory describes location or providing endpoint of the operation. The requirement for the Connector Binding is to 
   provide a port extension to capture this information.</p>
   <p>The InteractionSpec specifies the operation in a way that is
   understood by the endpoint. The  Connector Binding is required to 
   provide an operation binding extension to capture this information.</p>
   <p>For Records you need to know their structure and the way that they have to 
   be formatted so that an endpoint is able to interpret them. The structure is 
   defined by XML Schema from which you can derive a Java 
   representation, as described later. It is the format aspect that imposes a requirement 
   on the Connector Binding. It has to provide a format binding extension to 
   capture the specific formatting information (see format binding section).</p>
      </section>
      <section><title>A Connector WSDL Sample</title>
   <p>
   <img src="images/WSDLConn.gif" alt="Sample of a connector in a WSDL document" width="550" height="560"/></p>
      </section>
      <section>
      <title>How the Connector Binding Extends WSDL</title>
   <source>  &lt;definitions .... &gt;
       &lt;binding ...&gt;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          &lt;<strong>connector:binding /</strong>&gt;   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
             <strong>format:typeMapping</strong> encoding=&quot;...&quot; style=&quot;...&quot;&gt;   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                &lt;<strong>format:typeMap  </strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                   typeName=&quot;...&quot;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                   formatType=&quot;...&quot; /&gt; *       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
             &lt;/format:typeMapping&gt;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          &lt;operation .... &gt;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
             &lt;<strong>connector:operation</strong> functionName=&quot;name&quot;...
                interaction attributes ... /&gt;   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              &lt;input&gt;    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 ...  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/input&gt;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              &lt;output&gt;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                 ...  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
              &lt;/output&gt;   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          &lt;/operation&gt;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
       &lt;/binding&gt;
  
        &lt;port .... &gt;
          &lt;<strong>connector:address</strong> hostName=&quot;uri&quot; portNumber=&quot;...&quot;
             ...connection attributes ... /&gt;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/port&gt;
  &nbsp;&nbsp;&lt;/definitions&gt;</source>
   <p><strong><code>connector:binding</code></strong></p>
   <p>The purpose of the connector binding is to signify that the binding is bound 
   to a J2C based Resource Adapter. A &quot;connector&quot; is the short name 
   for the namespace that identifies the particular connector, for example &lt;cics:binding 
   /&gt;</p>
   <p><strong><code>connector:operation</code></strong></p>
   <p>The connector operation contains the InteractionSpec attributes that are 
   necessary to execute the operation on the EIS side, for example 
   &lt;cics:operation 
   functionName=&quot;GETCUST&quot; /&gt;</p>
   <p><strong><code>connector:address</code></strong></p>
   <p>The connector address contains the attributes 
   of the ManagedConnectionFactory, necessary to configure the connection factory, for example 
   &lt;cics:address 
   connectionURL=&quot;...&quot; serverName=&quot;...&quot; /&gt;</p>
      </section>
   <section><title>Format Binding</title>
   <p><strong><code>format:typeMapping</code></strong></p>
   <p>The format typeMapping identifies the style and encoding of the native 
   types. The typeMapping contains format typeMaps which associate the logical 
   format (XML Schema) with the native format.</p>
   <p>The native format is identified by a format type identifier.</p>
   <p>Here a sample where the native format type is described by COBOL:
   <code>  &lt;format:typeMapping encoding=&quot;COBOL&quot; style=&quot;COBOL&quot; &gt;                &nbsp;&nbsp;&nbsp;&nbsp;
       &lt;format:typeMap typename=&quot;Customer&quot; formatType=&quot;CustomerInfo.ccp:CUSTINF&quot;/&gt;
    &lt;/format:typeMapping&gt;</code></p>
      </section>
          
      
   </section>
  
  
   <section><title>Runtime</title>
   <p>This standard way for describing the services that reside in an EIS 
   using WSDL simplifies the current client&nbsp; programming model (CCI) 
   by using Web Service Invocation Framework (WSIF), a WSDL based service invocation runtime.</p>
   <section><title>Architecture</title>
   <p>The first thing necessary to set up for a service invocation is a 
   port. Ports are factored from services (implementations of 
   the WSIFService interface). WSIF ships the base service factory (WSIFServiceFactory) 
   which is 
   configured using the WSDL document, the service name, and the portType name from 
   which you want to create a port to access an operation.</p>
   <p>Additionally, the WSIFService 
   is configured using a binding specific dynamic providers (implementations of the WSIFProvider interface). These  providers are the actual 
   factories of the binding specific ports (implementations of the WSIFPort interface)</p>
   <p>The actual port implementation is not visible 
   to the client.  
  The client uses the WSIFPort interface to create a specific 
   operation for driving an execution. </p>
   <p>
   <img src="images/wsif_j1.gif" width="666" height="495" alt=""/></p>
   </section>
   <section><title>WSIF and J2C</title>
   <p>Enabling a J2C connector for WSIF is very straightforward. The element that 
   a Resource Adapter must implement is the dynamic provider. Depending on 
   the native 
   format, a Resource Adapter may need to provide a specific message implementation. 
   In general the Resource Adapter does not have to provide a specific port and 
   operation implementation, since the WSIF Extensions for J2C provide a generic one that is based on 
   J2C CCI.</p>
   <p>
   <img src="images/wsif_j2.gif" width="575" height="467" alt=""/></p>
   <p>&nbsp;</p>
   <p>If the Resource Adapter's native format is stream based then 
   it can use the 
   provided WSIFMessage_JCAStreamable as it's message implementation. This class 
   extends a class named WSIFMessage_JCA. If a specific message 
   implementation is required, it should extend WSIFMessage_JCA.</p>
   <p>The J2C WSIF Provider runtime implementation 
   contains the following classes/interfaces in the package
   org.apache.wsif.providers.jca.</p>
     <ul>
     <li>WSIFMessage_JCA.java - Top level superclass for all J2C WSIF messages 
     which implements javax.resource.cci.Record interface and is extended by the 
     connector specific messages.</li>
     <li>WSIFMessage_JCAStreamable.java - Specialization of WSIFMessage_JCA for 
     connectors that use the Streamable interface.</li>
     <li>WSIFOperation_JCA.java - Implementation of the WSIFOperation interface, which 
     executes the interaction with the EIS.</li>
     <li>WSIFPort_JCA.java - JCA specific implementation of the WSIFPort, which is used to 
     create an operation.</li>
     <li>WSIFProviderJCAExtensions.java - Interface implemented by the specific 
     connector to provide creation of the Connection and InteractionSpec objects</li>
     <li>WSIFFormatHandler_JCA.java - Interface implemented by FormatHandlers for 
     connectors that use the Streamable record interface. </li>
     <li>WSIFBindingOperation_JCAProperty.java - Interface used to expose the 
     InteractionSpec properties as parts in the WSIF message.</li>
     <li>WSIFUtils_JCA.java - A utility class which contains methods to lookup ConnectionFactory in the JNDI context</li>
     <li>WSIFResource_JCA.java - Resource implementation for error messages</li>
     <li>WSIFResource_JCA.properties - Separated Error Messages</li>
     </ul>
   </section>
   
   
   <section><title>Format Handling</title>
   <p>Format handling is about marshalling the Java representation of a data 
   structure described by XML Schema to/from its binding dependent native format. 
   Separating the Java representation and format handling enables late binding, and 
   prevents the service client logic from using objects that are binding specific.</p>
   <p><strong>FormatHandler</strong></p>
   <p>On service invocation, messages (input, output, fault) get exchanged with the 
   provider of the service. Messages consist of typed parts. In order 
   for the provider to understand them the invocation runtime has to transform 
   them into the providers native format.</p>
   <p>Looking at the WSDL, it can be seen that a binding section defines type mappings 
   that map the XML Schema types to respective native types. Given the meta 
   information from the WSDL the user can generate&nbsp; two runtime elements. One is 
   a bean as the Java representation of the structure described by XML Schema. The 
   other is a FormatHandler which is generated based on the defined format 
   typeMapping.</p>
   <p>
   <img src="images/WSIFForm.gif" alt="Format handler" width="471" height="340" /></p>
   <p>In order for a message implementation to produce its native format it uses 
   the format handlers for its respective part types. The message is a generic 
   implementation for a particular provider. So how does the message know which 
   format handler to use for its parts? A runtime message knows about the meta 
   information of the concrete message it was factored for. So it knows what type 
   its parts have. These types have qualified names (namespace and localname).The rule for constructing the name of the format handler is:</p>
   <p><code>&lt;reversed xsd typenamespace&gt;.&lt;binding shortname&gt;.&lt;format encoding+style&gt;.&lt;xsd typelocalname&gt;&quot;FormatHandler&quot;</code></p>
   <p>The WSIFUtil class, in WSIF, provides a set of utility methods that 
   can be 
   used in the message implementation (for example to use the above formula) as well as in the implementation of the 
   format handler generator. Besides being able to handle a bean derived from the XSD Schema type, the 
   format handler can in addition also support instance of the XSD Schema type in form of a 
   DOMSource or SAXSource. This allows for direct usage of XML in your service 
   invocation if required.</p>
   <p><strong>FormatHandler Generator</strong></p>
   <p>To support EIS native formats the Resource 
   Adapter has to provide format handler generators with its WSIF J2C Extensions. Each format handler generator generates format handlers for 
   a specific encoding and style, possibly using the type mapping information from 
   the FormatBinding.&nbsp;The generator implements FormatHandlerGenerator interface described later.</p>
   </section>
   </section>
   <section><title>Import Service</title>
   <p>Many EIS's have very rich metadata support describing the services they 
   offer. EIS's provide programmatic access to this meta information. This poses a problem for tools in that  
   the form of the metadata and the access to it is proprietary
   for each EIS. The EIS import service solves this problem by providing a 
   standard interface for accessing the meta information, and it delivers the meta information in the standard
   form of WSDL. The EIS implements (i.e. provides bindings and service of the 
   import service) the import service with its EIS Resource Adapter.</p>
      <section><title>Interface</title>
   <p>The Import interface consists of three operations getPortTypes, getDefinition 
   and getRawEISMetaData.</p>
   <p>The getPortTypes operation allows you to get an overview about the 
   interfaces and operations the EIS offers. The operation returns an array of 
   portTypes, the number of portTypes returned can be controlled through the 
   queryString input argument (supporting the queryString is optional).</p>
   <p>Note, if your EIS does not have the notion of interfaces you can just 
   return one portType containing all the operations your EIS offers.</p>
   <p>The getDefinition operation allows you to retrieve the complete service 
   definition for a chosen portType selection. Besides selecting the portType, the 
   portType selection allows a subset of the portType by identifying the operations 
   that you are interested in. The operation returns the WSDL definition, and an 
   array of XML Schema sources for the case when the portType uses XML Schema complex 
   types.</p>
   <p>The optional operation, getRawEISMetaData returns a binary data that may be used by the Resource 
   Adapter to cache the EIS metadata repository.</p>
      </section>
  
      <section><title>Import.wsdl file</title>
   <source>
   &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
   &lt;definitions name=&quot;ImportRemoteInterface&quot;
   &nbsp;&nbsp; targetNamespace=&quot;http://importservice.jca.providers.wsif.apache.org/&quot;
   &nbsp;&nbsp; xmlns=&quot;http://schemas.xmlsoap.org/wsdl/&quot;
   &nbsp;&nbsp; xmlns:tns=&quot;http://importservice.jca.providers.wsif.apache.org/&quot; 
   &nbsp;&nbsp; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
  
   &nbsp;&nbsp; &lt;import location=&quot;Import.xsd&quot; namespace=&quot;http://importservice.jca.providers.wsif.apache.org/&quot;/&gt;
  
   &nbsp;&nbsp; &lt;message name=&quot;getDefinitionRequest&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp; &lt;part name=&quot;portTypeSelection&quot; type=&quot;tns:PortTypeSelection&quot;/&gt;
   &nbsp;&nbsp; &lt;/message&gt;
   &nbsp;&nbsp; &lt;message name=&quot;getDefinitionResponse&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp; &lt;part name=&quot;result&quot; type=&quot;tns:ImportDefinition&quot;/&gt;
   &nbsp;&nbsp; &lt;/message&gt;
   &nbsp;&nbsp; &lt;message name=&quot;getPortTypesRequest&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp; &lt;part name=&quot;queryString&quot; type=&quot;xsd:string&quot;/&gt;
   &nbsp;&nbsp; &lt;/message&gt;
   &nbsp;&nbsp; &lt;message name=&quot;getPortTypesResponse&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp; &lt;part name=&quot;result&quot; type=&quot;tns:PortTypeArray&quot;/&gt;
   &nbsp;&nbsp; &lt;/message&gt;
   &nbsp;&nbsp; &lt;message name=&quot;getRawEISMetaDataRequest&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp; &lt;part name=&quot;queryString&quot; type=&quot;xsd:string&quot;/&gt;
   &nbsp;&nbsp; &lt;/message&gt;
   &nbsp;&nbsp; &lt;message name=&quot;getRawEISMetaDataResponse&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp; &lt;part name=&quot;result&quot; type=&quot;xsd:base64&quot;/&gt;
   &nbsp;&nbsp; &lt;/message&gt;
  
   &nbsp;&nbsp; &lt;portType name=&quot;Import&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&lt;operation name=&quot;getDefinition&quot; parameterOrder=&quot;portTypeSelection&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input message=&quot;tns:getDefinitionRequest&quot; name=&quot;getDefinitionRequest&quot;/&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;output message=&quot;tns:getDefinitionResponse&quot; name=&quot;getDefinitionResponse&quot;/&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&lt;/operation&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&lt;operation name=&quot;getPortTypes&quot; parameterOrder=&quot;queryString&quot;&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input message=&quot;tns:getPortTypesRequest&quot; name=&quot;getPortTypesRequest&quot;/&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;output message=&quot;tns:getPortTypesResponse&quot; name=&quot;getPortTypesResponse&quot;/&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&lt;/operation&gt;
   &nbsp;&nbsp;&nbsp;&nbsp;&lt;operation name=&quot;getRawEISMetaData&quot; parameterOrder=&quot;queryString&quot;&gt; 
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;input message=&quot;tns:getRawEISMetaDataRequest&quot; name=&quot;getRawEISMetaDataRequest&quot;/&gt; 
   &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;output message=&quot;tns:getRawEISMetaDataResponse&quot; name=&quot;getRawEISMetaDataResponse&quot;/&gt; 
   &nbsp;&nbsp;&nbsp;&nbsp;&lt;/operation&gt;
   &nbsp;&nbsp;&lt;/portType&gt;
   &lt;/definitions&gt;
   </source>
      </section>
      <section><title>Import Service support classes</title>
   <p>To simplify the implementation of the Import 
   service, the WSIF Extensions for J2C include a set of convenience classes in 
   the org.apache.wsif.providers.jca.toolplugin package. These classes provide Java representation of the XSD types used in the 
   import service and simplify the development of the Import Service. </p>
  <ul>
       <li>ImportDefinition.java</li>
       <li>ImportResource.java</li>
       <li>ImportXSD.java</li>
       <li>OperationSelection.java</li>
       <li>PortTypeArray.java</li>
       <li>PortTypeSelection.java</li>
     </ul>
      </section>
  
   </section>
   <section><title>Deployment Descriptor</title>
   <p>To allow an arbitrary tools environment to 
   detect this additional capability a connector implementation has to provide the 
   following deployment descriptor xml file (j2c_plugin.xml) in its rar file. It describes 
   details of the implementation, for example the names of classes implementing extensibility 
   elements or the name of the WSDL file providing bindings for the Import service 
   interface. A sample of the xml file is shown below:</p>
   <source>
  &lt;j2c_plugin tns=&quot;http://schemas.xmlsoap.org/wsdl/myeis/&quot; name=&quot;MyEIS&quot;&gt;
       &lt;Description&gt;MyEIS&lt;/Description&gt;
       &lt;version&gt;1.0&lt;/version&gt;
       	&lt;wsdl_extensions&gt;
       		&lt;address classname=&quot;com.myeis.wsdl.extensions.j2c.myeis.MyEISAddress&quot;/&gt;
  &lt;binding classname=&quot;com.myeis.wsdl.extensions.j2c.myeis.MyEISBinding&quot;/&gt;
       &lt;operation classname=&quot;com.myeis.wsdl.extensions.j2c.myeis.MyEISOperation&quot;/&gt;
       &lt;extension_registry classname=&quot;com.myeis.wsdl.extensions.j2c.myeis.MyEISExtensionRegistry&quot; /&gt;
       &lt;/wsdl_extensions&gt;
       &lt;wsif_extensions classname=&quot;com.myeis.wsif.providers.j2c.myeis.WSIFProvider_MyEIS&quot; /&gt;
       &lt;import&gt;
       &lt;service wsdlfile=&quot;com/myeis/j2c/importservice/myeis/ImportMyEIS.wsdl&quot; servicename=&quot;ImportService&quot; &gt;
       &lt;/service&gt;
  &lt;/import&gt;
  &lt;formathandler
  &lt;generator encoding=&quot;myeis&quot; classname=&quot;com.myeis.j2c.myeis.formathandler.MyEISFormatHandlerGenerator&quot; /&gt;
  &lt;/formathandler&gt;
  &lt;/j2c_plugin&gt;
   </source>
   </section>
   <section><title>Sample Resource Adapter</title>
   <p>The distribution of the WSIF Extensions for Connector 
   Architecture includes a sample Resource Adapter, MyEIS, illustrating how to 
   extend the Connector to enable it for pluggability into tool environments, 
   implement model and runtime extensions and the Import Service.</p>
   </section>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/wsdl_extensions/jms_extension.xml
  
  Index: jms_extension.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSDL JMS Extension</title> 
          </header> 
          <body>
  <section><title>Overview</title>
  <p>
  WSIF defines extra WSDL extensions that are not part of WSDL4J itself. Amongst
  others, these WSDL extensions are needed for JMS. You should use WSIF to read
  in your WSDL, rather than using WSDL4J directly, because WSIF adds in its
  own extension registries that understand these extra WSDL extensions. For example
  you can use WSIFUtils.readWSDL to do this. This page describes WSIF's WSDL
  extensions for JMS. Currently, these WSDL extensions are valid for Soap over Jms,
  Axis over Jms and NativeJms. The jms namespace must be 
  <code>
  xmlns:jms="http://schemas.xmlsoap.org/wsdl/jms/"
  </code>
  </p>
  </section>
  <section><title>Jms address</title>
  <p>
  &lt;jms:address describes a target port that is accessible via JMS.
  </p>
  <source>
  &lt;jms:address jmsVendorURI="xxx"
  &nbsp;&nbsp;&nbsp;&nbsp;jndiDestinationName="xxx"
  &nbsp;&nbsp;&nbsp;&nbsp;destinationStyle="xxx"
  &nbsp;&nbsp;&nbsp;&nbsp;jndiConnectionFactoryName="xxx"
  &nbsp;&nbsp;&nbsp;&nbsp;initialContextFactory="xxx"
  &nbsp;&nbsp;&nbsp;&nbsp;jndiProviderURL="xxx"
  &nbsp;&nbsp;&nbsp;&nbsp;jmsProviderDestinationName="xxx"
  &nbsp;&nbsp;&nbsp;&nbsp;jmsImplementationSpecificURI="xxx" /&gt;
  </source>
  <ul>
  <li>this must go in the port</li>
  <li>jmsVendorURI is optional and unused by WSIF. It allows to the client 
  to check the JMS implementation.</li>
  <li>either destinationStyle or jmsImplementationSpecificURI must be 
  specified, but not both.</li>
  <li>jmsImplementationSpecificURI specifies the queue manager and queues 
  in a implementation specific format. This is currently unimplemented by WSIF.</li>
  <li>destinationStyle must either be queue or topic, but topics aren't yet 
  implemented by WSIF.</li>
  <li>if destinationStyle is specified, then either jndiDestinationName or 
  jmsProviderDestinationName must be specified but not both.</li>
  <li>jndiDestinationName is the JNDI name of the JMS queue that WSIF will 
  send requests to.</li>
  <li>jmsProviderDestinationName is the JMS name of the JMS queue that WSIF 
  will send requests to.</li>
  <li>if jndiDestinationName is specified then jndiConnectionFactoryName must 
  also be specified.</li>
  <li>if jmsProviderDestinationName is specified then jndiConnectionFactoryName may
  also be specified. jndiConnectionFactoryName would be needed if the JNDI name
  of a replyTo queue is passed to WSIF.</li>
  <li>jndiConnectionFactoryName is the JNDI name of the connection factory 
  that WSIF will use.</li>
  <li>if destinationStyle is specified then either both jndiProviderURL and 
  initialContextFactory or neither must be specified.</li>
  </ul>
  <p>
  WSIF uses the following order to lookup queues and queue managers in JNDI</p>
  <ul>
  <li>Lookup java:comp/env/&lt;name&gt; in the default (local) JNDI</li>
  <li>Lookup java:comp/env/&lt;name&gt; in the JNDI specified by the WSDL</li>
  <li>Lookup &lt;name&gt; in the default (local) JNDI</li>
  <li>Lookup &lt;name&gt; in the JNDI specified by the WSDL.</li>
  </ul>
  <p>
  This allows a client administrator to override the JNDI definition specified 
  in the WSDL.
  </p>
  </section>
  <section><title>Jms binding</title>
  <p>
  TODO
  </p>
  </section>
  <section><title>Jms property</title>
  <source>
  &lt;jms:property name="&lt;name&gt;" part="&lt;part&gt;" /&gt;
  </source>
  <ul>
  <li>this must go in the input or output section of the binding operation. 
  Output jms properties are not yet implemented in WSIF.</li>
  <li>the &lt;name&gt; may be the name of a property defined by JMS, or 
  the name of a property defined by the JMS implementation, or the name of 
  a user property.</li>
  <li>the &lt;part&gt; must be the name of a part in the message.</li>
  <li>JMS user properties that are objects are not implemented by WSIF.</li>
  <li>When using stubs to invoke WSIF, this property appears as a parameter 
  on the stub's signature, but will not appear on the web service's 
  method signature.</li>
  </ul>
  </section>
  <section>
  <title>Jms property value</title>
  <source>
  &lt;jms:propertyValue name="&lt;name&gt;" type="&lt;type&gt;" 
  value="&lt;value&gt;" /&gt;
  </source>
  <ul>
  <li>this must go in either the &lt;jms:address or in the input section 
  of the binding operation.</li>
  <li>the &lt;name&gt; may be the name of a property defined by JMS, or 
  the name of a property defined by the JMS implementation, or the name of 
  a user property.</li>
  <li>the &lt;type&gt; is the datatype of the &lt;value&gt; that hardcodes 
  the value of this property in the WSDL.</li>
  <li>JMS user properties that are objects are not implemented by WSIF.</li>
  </ul>
  <p>
  JMS properties can also be set on the message context, without being 
  defined in the WSDL.
  </p>
  </section>
  <section><title>Jms fault, fault property and fault indicator</title>
  <p>
  TODO
  </p>
  </section>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/wsdl_extensions/java_extension.xml
  
  Index: java_extension.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSDL Java Extension</title> 
          </header> 
          <body>
            <section>
              <title>Details</title>
  <p>The Java binding is a WSDL binding that allows abstract functionality in the abstract service description (messages, operations and port types) to be mapped to functionality offered by a Java class directly. This means that a Java class can be described using WSDL, and can be accessed as a WSDL-described service through WSIF.</p>
  
  <p>The Java binding extends WSDL with the following extensibility elements:</p>
  
  <source>
  &lt;definitions .... &gt; 
  
      &lt;!-- Java binding --&gt; 
      &lt;binding ... &gt; 
          &lt;java:binding/&gt; 
          &lt;format:typeMapping style="uri" encoding="..."/&gt;? 
              &lt;format:typeMap typeName="qname"|elementName="qname" formatType="nmtoken"/&gt;* 
          &lt;/format:typeMapping&gt; 
          &lt;operation&gt;* 
              &lt;java:operation 
                  methodName="nmtoken" 
                  parameterOrder="nmtoken"? 
  		returnPart="nmtoken"?
                  methodType="instance|static|constructor"? /&gt;? 
              &lt;input name="nmtoken"? /&gt;? 
              &lt;output name="nmtoken"? /&gt;? 
              &lt;fault name="nmtoken"? /&gt;? 
          &lt;/operation&gt; 
      &lt;/binding&gt; 
  
      &lt;service ... &gt; 
          &lt;port&gt;* 
               &lt;java:address 
                   className="nmtoken" 
                   classPath="nmtoken"? 
                   classLoader="nmtoken"? /&gt; 
          &lt;/port&gt; 
      &lt;/service&gt; 
  
  &lt;/definitions&gt; 
  </source>
  
  <p>Each element is described in detail below.</p>
  
  <ul>
  <li><strong><code>java:binding</code></strong> This indicates that the binding is a Java binding.</li>
  
  <li><strong><code>format:typeMapping</code></strong> This element allows the specification of a mapping from abstract types used in 
  WSDL message parts (within the abstract service description) to Java types that can represent the same information. The style attribute 
  is used to say something about the target type system (i.e. the native type system being used to represent the abstract information); in 
  the case of the Java type system the value here must be "Java". The use of this attribute allows this extension to be reused for other 
  kinds of bindings. The encoding attribute must be a URI which is used to denote the specific way in which the native type corresponds to 
  the abstract type. We define a special encoding, the "Java" encoding, with the rules that tell us how to create a Java class corresponding 
  to an abstract schema type that can be used through the WSDL Java binding. Details on the "Java" encoding follow. Having the encoding 
  attribute allows us to map abstract types to Java types in other convenient ways by using a customized encoding.
  <br /><br />
  <strong>Java encoding</strong><br />
  The Java encoding used by WSIF is unspecified. The reason it does not need to be specified is that encoding information is useful only when the 
  information contained within the Java object is transformed in some way - serialized to a SOAP message, or converted to a representation in 
  another type system for example. If all we do with a WSIF message containing parts belonging to the Java type system is invoke the corresponding 
  Java service, we don't need to do anything more than verify that each message part is represented using a Java object of the correct type (as specified 
  by the typemapping element in the Java binding).<br />
  Of course, we envisage the need for transforming messages from one representation to another, but we leave the complete specification of the Java encoding for a later release.</li>
  
  <li><strong><code>format:typemap</code></strong>
  Each typemap element maps an abstract type to a type in some more convenient type system; in the case of the Java binding this is the Java type system. 
  The typeName attribute is a qualified name for the abstract type being mapped (this must be one of the predefined schema types recognised in WSDL, or a type defined 
  under the &lt;types&gt; section in the WSDL). The elementName attribute may be used to specify an element instead of a type (since WSDL message parts can 
  be described either way). The formatType attribute is the Java type corresponding to that abstract type or element. Its value must be one of the primitive 
  Java types (char, byte, short, int, long, float, double) or the fully qualified name of a Java class.</li>
  
  <li><strong><code>java:operation</code></strong>
  This element maps an abstract WSDL operation to a Java method. The methodName attribute specifies the name of the Java method corresponding to the abstract operation. 
  The parameterOrder attribute is similar to and overrides the paramterOrder specification in the abstract operation. It specifies the ordering of the input message 
  parts for the invocation; in the Java binding case it identifies the method signature. Having a parameterOrder attribute here allows us to map an abstract operation 
  to a Java method even if their signatures aren't compatible in the ordering of parts. The returnPart is that part of the abstract output message which corresponds 
  to the return value of the Java method. The methodType attribute specifies whether the Java method is a constructor, a static method or an instance method.</li>
  
  <li><strong><code>java:address</code></strong>
  This element is an extension under the WSDL port element that allows specification of a Java object as an endpoint for a service available via the Java binding. 
  The port whose address is specified this way must be associated with a Java binding only.<br /><br />
  The className attribute specifies the fully qualified name of the Java class to be used for service invocation. The optional classPath attribute specifies the 
  classpath to be set prior to invocation, and the optional classLoader attribute specifies the class loader to be used for loading the service class. If invoking 
  an instance method, the service user can load and instantiate the service class; it is up to the service provider to insure that a public no-argument constructor 
  is available. All other Java methods/constructors used for mapping abstract operations must also be publicly available in the service class.</li>
  </ul>
          </section>
  <section>
  <title>Example</title>
  <source>
  &lt;?xml version="1.0" ?&gt;
  
  &lt;definitions targetNamespace="http://wsifservice.addressbook/"
               xmlns:tns="http://wsifservice.addressbook/"
               xmlns:typens="http://wsiftypes.addressbook/"
               xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
               xmlns:format="http://schemas.xmlsoap.org/wsdl/formatbinding/"
               xmlns:java="http://schemas.xmlsoap.org/wsdl/java/"
               xmlns="http://schemas.xmlsoap.org/wsdl/"&gt;
  
    &lt;!-- type defs --&gt;
    &lt;types&gt;
      &lt;xsd:schema
        targetNamespace="http://wsiftypes.addressbook/"
                  xmlns:xsd="http://www.w3.org/1999/XMLSchema"&gt;
        &lt;xsd:complexType name="phone"&gt;
          &lt;xsd:element name="areaCode" type="xsd:int"/&gt;
  
          &lt;xsd:element name="exchange" type="xsd:string"/&gt;
          &lt;xsd:element name="number" type="xsd:string"/&gt;
        &lt;/xsd:complexType&gt;
  
        &lt;xsd:complexType name="address"&gt;
          &lt;xsd:element name="streetNum" type="xsd:int"/&gt;
          &lt;xsd:element name="streetName" type="xsd:string"/&gt;
  
          &lt;xsd:element name="city" type="xsd:string"/&gt;
          &lt;xsd:element name="state" type="xsd:string"/&gt;
          &lt;xsd:element name="zip" type="xsd:int"/&gt;
          &lt;xsd:element name="phoneNumber" type="typens:phone"/&gt;
        &lt;/xsd:complexType&gt;
      &lt;/xsd:schema&gt;
  
    &lt;/types&gt;
  
    &lt;!-- message declns --&gt;
    &lt;message name="AddEntryWholeNameRequestMessage"&gt;
      &lt;part name="name" type="xsd:string"/&gt;
      &lt;part name="address" type="typens:address"/&gt;
    &lt;/message&gt;
  
    &lt;message name="AddEntryFirstAndLastNamesRequestMessage"&gt;
      &lt;part name="firstName" type="xsd:string"/&gt;
      &lt;part name="lastName" type="xsd:string"/&gt;
      &lt;part name="address" type="typens:address"/&gt;
    &lt;/message&gt;
  
    &lt;message name="GetAddressFromNameRequestMessage"&gt;
      &lt;part name="name" type="xsd:string"/&gt;
    &lt;/message&gt;
  
    &lt;message name="GetAddressFromNameResponseMessage"&gt;
      &lt;part name="address" type="typens:address"/&gt;
    &lt;/message&gt;
  
    &lt;!-- port type declns --&gt;
    &lt;portType name="AddressBook"&gt;
      &lt;operation name="addEntry"&gt;
        &lt;input name="AddEntryWholeNameRequest" message="tns:AddEntryWholeNameRequestMessage"/&gt;
      &lt;/operation&gt;
      &lt;operation name="addEntry"&gt;
  
        &lt;input name="AddEntryFirstAndLastNamesRequest" message="tns:AddEntryFirstAndLastNamesRequestMessage"/&gt;
      &lt;/operation&gt;
      &lt;operation name="getAddressFromName"&gt;
        &lt;input name="GetAddressFromNameRequest" message="tns:GetAddressFromNameRequestMessage"/&gt;
        &lt;output name="GetAddressFromNameResponse" message="tns:GetAddressFromNameResponseMessage"/&gt;
      &lt;/operation&gt;
  
    &lt;/portType&gt;
  
    &lt;!-- binding declns --&gt;
    &lt;binding name="JavaBinding" type="tns:AddressBook"&gt;
      &lt;java:binding/&gt;
      &lt;format:typeMapping encoding="Java" style="Java"&gt;
        &lt;format:typeMap typeName="typens:address" formatType="addressbook.wsiftypes.Address" /&gt;
  
        &lt;format:typeMap typeName="xsd:string" formatType="java.lang.String" /&gt;
      &lt;/format:typeMapping&gt;
      &lt;operation name="addEntry"&gt;
        &lt;java:operation
           methodName="addEntry"
           parameterOrder="name address"
           methodType="instance" /&gt;
        &lt;input name="AddEntryWholeNameRequest"/&gt;
      &lt;/operation&gt;
  
      &lt;operation name="addEntry"&gt;
        &lt;java:operation
           methodName="addEntry"
           parameterOrder="firstName lastName address"
           methodType="instance" /&gt;
        &lt;input name="AddEntryFirstAndLastNamesRequest"/&gt;
      &lt;/operation&gt;
      &lt;operation name="getAddressFromName"&gt;
        &lt;java:operation
           methodName="getAddressFromName"
           parameterOrder="name"
           methodType="instance"
           returnPart="address" /&gt;
  
        &lt;input name="GetAddressFromNameRequest"/&gt;
        &lt;output name="GetAddressFromNameResponse"/&gt;
      &lt;/operation&gt;
    &lt;/binding&gt;
    
    &lt;!-- service decln --&gt;
    &lt;service name="AddressBookService"&gt;
  
      &lt;port name="JavaPort" binding="tns:JavaBinding"&gt;
        &lt;java:address className="addressbook.wsiftypes.AddressBook"/&gt;
      &lt;/port&gt;
    &lt;/service&gt;
  
  &lt;/definitions&gt;</source>
  <p>In the above example, an address book service is offered through the Java class <code>addressbook.wsiftypes.AddressBook</code>. The service offers two variants of the <code>addEntry</code> operation. One takes an input message consisting of a full name and an address and the other accepts an input message with a first name, a last name (as separate message parts), and an address. Both of these operations are mapped to a Java method called <code>addEntry</code>, but there are different parameter lists (this is an overloaded method in the implementing class). Finally, the abstract operation <code>getAddressFromName</code> is mapped to a Java method of the same name. The types <code>typesns:address</code> and <code>xsd:string</code> used during method invocations are mapped to Java types <code>addressbook.wsiftypes.Address</code> and <code>Java.lang.String</code> respectively. Note that the type <code>typesns:phone</code> does not need to be mapped to a Java type since it is contained within the address type which is represented by a known Java class. WSIF does not need to know how this class represents the information described in the schema type if all that is being done is service invocation. If we needed to inspect the information in the WSIF message and transform it in some way, we would need details on how the Java class represents the type information (see the above discussion on the Java encoding).</p>
  
  <p>All the methods needed for invocation are instance methods, so a client would need to create an instance of the service class. Since no classpath or class loader is specified, the client can assume that there are no special service requirements in this regard, and can just load and instantiate the class and begin using the address book service it implements.</p>
  </section>
       </body>
      </document>
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/providers/wsdl_extensions/book.xml
  
  Index: book.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "book-cocoon-v10.dtd">
  
  <book software="WSIF"
    title="WSIF"
    copyright="@year@ The Apache Software Foundation"
    xmlns:xlink="http://www.w3.org/1999/xlink">
  
    <menu label="WSIF Providers">
      <menu-item label="Introduction" href="../index.html"/>
      <menu-item label="Java" href="../java_provider.html"/>
      <menu-item label="EJB" href="../ejb_provider.html"/>
      <menu-item label="Apache SOAP" href="../apachesoap_provider.html"/>
      <menu-item label="Apache Axis" href="../apacheaxis_provider.html"/>
      <menu-item label="JCA" href="../jca_provider.html"/> 
    </menu>
    <menu label="WSDL Extensions">
      <menu-item label="Java" href="java_extension.html"/>
      <menu-item label="EJB" href="ejb_extension.html"/>
      <menu-item label="JMS" href="jms_extension.html"/>
      <menu-item label="J2C" href="j2c_extension.html"/>  
    </menu>
  </book>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/xslt/fo/document2fo.xsl
  
  Index: document2fo.xsl
  ===================================================================
  <?xml version="1.0"?>
  
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  xmlns:fo="http://www.w3.org/1999/XSL/Format"
                  version="1.0">
  
    <xsl:output method="xml"/>
  
    <xsl:template match="/">
      <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <fo:layout-master-set>
  
          <fo:simple-page-master master-name="first-page"
            page-height="11in" 
            page-width="8.5in"
            margin-top="1in" 
            margin-bottom="1in" 
            margin-left="1.25in" 
            margin-right="1in">
            <fo:region-body
              margin-top="0.5in"
              margin-bottom=".5in"/>
            <fo:region-after 
              region-name="first-footer"
              extent=".5in"
              display-align="before"/>
          </fo:simple-page-master>
  
          <fo:simple-page-master master-name="even-page"
            page-height="11in" 
            page-width="8.5in"
            margin-top="1in" 
            margin-bottom="1in" 
            margin-left="1.25in" 
            margin-right="1in">
            <fo:region-before
              region-name="even-header"
              extent="0.5in"
              border-bottom="0.5pt solid"/>
            <fo:region-body
              margin-top="0.5in"
              margin-bottom=".5in"/>
            <fo:region-after 
              region-name="even-footer"
              extent=".5in"
              display-align="before"/>
          </fo:simple-page-master>
  
          <fo:simple-page-master master-name="odd-page"
            page-height="11in" 
            page-width="8.5in"
            margin-top="1in" 
            margin-bottom="1in" 
            margin-left="1.25in" 
            margin-right="1in">
            <fo:region-before
              region-name="odd-header"
              extent="0.5in"
              border-bottom="0.5pt solid"/>
            <fo:region-body
              margin-top="0.5in"
              margin-bottom=".5in"/>
            <fo:region-after 
              region-name="odd-footer"
              extent=".5in"
              display-align="before"/>
          </fo:simple-page-master>
  
          <fo:page-sequence-master master-name="book">
            <fo:repeatable-page-master-alternatives>
              <fo:conditional-page-master-reference
                page-position="first"
                master-reference="first-page"/>
              <fo:conditional-page-master-reference
                odd-or-even="odd"
                master-reference="odd-page"/>
              <fo:conditional-page-master-reference
                odd-or-even="even"
                master-reference="even-page"/>
            </fo:repeatable-page-master-alternatives>
          </fo:page-sequence-master>
        </fo:layout-master-set>
        
        <fo:page-sequence master-reference="book">
          <xsl:apply-templates/>
        </fo:page-sequence>
        
      </fo:root>
    </xsl:template>
    
    <xsl:template match="document">
      <fo:title><xsl:value-of select="header/title"/></fo:title>
      
      <fo:static-content flow-name="first-footer">
        <fo:block
          border-top="0.25pt solid"
          padding-before="6pt"
          text-align="center">
          <xsl:apply-templates select="footer"/>
        </fo:block>
        <fo:block
          text-align="start">
          Page <fo:page-number/>
        </fo:block>
      </fo:static-content>
  
      <fo:static-content flow-name="even-header">
        <fo:block
          text-align="end"
          font-style="italic">
          <xsl:value-of select="header/title"/>
        </fo:block>
      </fo:static-content>
  
      <fo:static-content flow-name="even-footer">
        <fo:block
          border-top="0.25pt solid"
          padding-before="6pt"
          text-align="center">
          <xsl:apply-templates select="footer"/>
        </fo:block>
        <fo:block
          text-align="end">
          Page <fo:page-number/>
        </fo:block>
      </fo:static-content>
  
      <fo:static-content flow-name="odd-header">
        <fo:block
          text-align="start"
          font-style="italic">
          <xsl:value-of select="header/title"/>
        </fo:block>
      </fo:static-content>
      
      <fo:static-content flow-name="odd-footer">
        <fo:block
          border-top="0.25pt solid"
          padding-before="6pt"
          text-align="center">
          <xsl:apply-templates select="footer"/>
        </fo:block>
        <fo:block
          text-align="start">
          Page <fo:page-number/>
        </fo:block>
      </fo:static-content>
  
      <fo:flow flow-name="xsl-region-body">
        <fo:block
          padding-before="24pt"
          padding-after="24pt"
          font-size="24pt"
          font-weight="bold">
          <xsl:value-of select="header/title"/>
        </fo:block>
        
        <fo:block
          text-align="justify"
          padding-before="18pt"
          padding-after="18pt">
          <xsl:apply-templates/>
        </fo:block>
      </fo:flow>
    </xsl:template>
    
    <xsl:template match="abstract">
      <fo:block
        font-size="12pt"
        text-align="center"
        space-before="20pt"
        space-after="25pt"
        width="7.5in"
        font-family="serif"
        font-style="italic">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    <xsl:template match="notice">
      <fo:block
        font-size="10pt"
        text-align="left"
        space-before="20pt"
        width="7.5in"
        font-family="serif"
        border-top="0.25pt solid"
        border-bottom="0.25pt solid"
        padding-before="6pt"
        padding-after="6pt">
        NOTICE: <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="section">
      
      <xsl:param name="level">0</xsl:param>
      <xsl:variable name="size" select="16-(number($level)*2)"/>
      
      <fo:block
        font-family="serif"
        font-size="{$size}pt"
        font-weight="bold"
        space-before="12pt">
        <xsl:number format="1.1.1.1.1.1.1" count="section" level="multiple"/>
        <xsl:text> </xsl:text>
        <xsl:value-of select="title"/>
      </fo:block>
      <xsl:apply-templates>
        <xsl:with-param name="level" select="number($level)+1"/>
      </xsl:apply-templates>
      
    </xsl:template>
    
    <xsl:template match="title">
      <!-- do nothing as titles are handled in their parent templates -->
    </xsl:template>
    
    <xsl:template match="subtitle">
      <xsl:param name="level">0</xsl:param>
      <xsl:variable name="size" select="16-(number($level)*1.5)"/>
  
      <fo:block
        font-weight="bold"
        font-size="{$size}pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="authors">
      <fo:block
        space-before="20pt"
        font-weight="bold"
        font-size="9pt">
        <xsl:for-each select="person">
          <xsl:value-of select="@name"/>, <xsl:value-of select="@email"/>
          <xsl:if test="not(position() = last())">, </xsl:if>
        </xsl:for-each>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="p">
      <fo:block
        space-before="4pt"
        space-after="4pt"
        font-family="serif">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
  
    <xsl:template match="source">
      <fo:block
        font-family="monospace"
        font-size="10pt"
        background-color="#f0f0f0"
        white-space-collapse="false"
        text-align="start">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
    
    
    <xsl:template match="ol|ul">
      <fo:list-block 
        provisional-distance-between-starts="18pt"
        provisional-label-separation="3pt"
        text-align="start">
        <xsl:apply-templates/>
      </fo:list-block>
    </xsl:template>
    
    <xsl:template match="ol/li">
      <fo:list-item>
        <fo:list-item-label 
          end-indent="label-end()">
          <fo:block>
            <xsl:number format="1."/>
          </fo:block>
        </fo:list-item-label>
        <fo:list-item-body 
          start-indent="body-start()">
          <fo:block
            font-family="serif">
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
    
    <xsl:template match="ul/li">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block>&#x2022;</fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block
            font-family="serif">
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
    
    <xsl:template match="dl">
      <fo:list-block
        provisional-distance-between-starts="18pt"
        provisional-label-separation="3pt"
        text-align="start">
        <xsl:apply-templates/>
      </fo:list-block>
    </xsl:template>
    
    <xsl:template match="dt">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block></fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block
            font-weight="bold">
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
    
    <xsl:template match="dd">
      <fo:list-item>
        <fo:list-item-label end-indent="label-end()">
          <fo:block></fo:block>
        </fo:list-item-label>
        <fo:list-item-body start-indent="body-start()">
          <fo:block>
            <xsl:apply-templates/>
          </fo:block>
        </fo:list-item-body>
      </fo:list-item>
    </xsl:template>
    
    <xsl:template match="strong">
      <fo:inline font-weight="bold"><xsl:apply-templates/></fo:inline>
    </xsl:template>
    
    <xsl:template match="em">
      <fo:inline font-style="italic"><xsl:apply-templates/></fo:inline>
    </xsl:template>
  
    <xsl:template match="code">
      <fo:inline font-family="monospace"><xsl:apply-templates/></fo:inline>
    </xsl:template>
  
    <xsl:template match="warning">
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-weight="bold"
        font-size="10pt"
        font-family="serif"
        space-before="10pt"
        border-before-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#D00000"
        background-color="#D00000"
        color="#ffffff">
        Warning: <xsl:value-of select="title"/>
      </fo:block>
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-family="serif"
        font-size="8pt"
        border-after-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#D00000"
        background-color="#fff0f0"
        padding-start="3pt"
        padding-end="3pt"
        padding-before="3pt"
        padding-after="3pt"
        space-after="10pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="note">
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-weight="bold"
        font-size="10pt"
        color="#ffffff"
        font-family="serif"
        space-before="10pt"
        border-before-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#A0C9F5"
        background-color="#A0C9F5">
        Note: <xsl:value-of select="title"/>
      </fo:block>
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-family="serif"
        font-size="8pt"
        space-after="10pt"
        border-after-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#A0C9F5"
        background-color="#F0F0FF"
        padding-start="3pt"
        padding-end="3pt"
        padding-before="3pt"
        padding-after="3pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="fixme">
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-weight="bold"
        font-size="10pt"
        color="#FFFFFF"
        font-family="serif"
        space-before="10pt"
        border-before-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#C6C650"
        background-color="#C6C650">
        FIXME (<xsl:value-of select="@author"/>): <xsl:value-of select="title"/>
      </fo:block>
      <fo:block
        margin-left="0.25in"
        margin-right="0.25in"
        font-family="serif"
        font-size="8pt"
        space-after="10pt"
        border-after-style="solid"
        border-start-style="solid"
        border-end-style="solid"
        border-color="#C6C650"
        background-color="#FFF0F0"
        padding-start="3pt"
        padding-end="3pt"
        padding-before="3pt"
        padding-after="3pt">
        <xsl:apply-templates/>
      </fo:block>
    </xsl:template>
  
    <xsl:template match="link">
      <fo:basic-link color="blue" text-decoration="underline" external-destination="{@href}"><xsl:apply-templates/></fo:basic-link>
    </xsl:template>
  
    <xsl:template match="figure">
      <!-- FIXME: Images are not found at the moment -->
      <fo:external-graphic src="{@src}"/>
      <!-- alt text and credits need inserting -->
    </xsl:template>
  
    <xsl:template match="table">
      <!-- FIXME: Apache FOP must have column widths specified at present,
           this section can be removed when this limitation is removed from Fop. 
           Unfortunately, this means that each column is a fixed width,
           but at least the table displays! -->
  
      <xsl:variable name="max-number-columns">
        <xsl:for-each select="tr">
          <xsl:sort select="count(td|th)" data-type="number" order="descending"/>
          <xsl:if test="position() = 1">
            <xsl:value-of select="count(td|th)"/>
          </xsl:if>
        </xsl:for-each>
      </xsl:variable>
  
  
      <xsl:variable name="column-width">
        <xsl:value-of select="6.25 div number($max-number-columns)"/>in
      </xsl:variable>
  
      <fo:table>
                    
        <fo:table-column>
          <xsl:attribute name="column-width">
            <xsl:value-of select="$column-width"/>
          </xsl:attribute>
  
          <xsl:attribute name="number-columns-repeated">
            <xsl:value-of select="number($max-number-columns)"/>
          </xsl:attribute>
        </fo:table-column>
  
        <!-- End of hack for Fop support (if removing this hack, remember 
             you need the <fo:table> element) -->
  
        <fo:table-body
          font-size="10pt"
          font-family="sans-serif">
          <xsl:apply-templates select="tr"/>
        </fo:table-body>
      </fo:table>
  
      <!-- FIXME: Apache Fop does not support the caption element yet.
           This hack will display the table caption accordingly. -->
      <xsl:if test="caption">
        <fo:block
          text-align="center"
          font-weight="bold">
          Table
          <xsl:text> </xsl:text>
          <xsl:number count="table" level="multiple"/>
          <xsl:text>: </xsl:text>
          <xsl:value-of select="caption"/>
        </fo:block>
      </xsl:if>
    </xsl:template>
  
    <xsl:template match="tr">
      <fo:table-row>
        <xsl:apply-templates/>
      </fo:table-row>
    </xsl:template>
  
    <xsl:template match="th">
        <fo:table-cell
          padding-before="4pt"
          padding-after="4pt"
          padding-start="4pt"
          padding-end="4pt"
          background-color="#A0C9F5">
          <xsl:attribute name="number-columns-spanned">
            <xsl:value-of select="@colspan"/>
          </xsl:attribute>
          <xsl:attribute name="number-rows-spanned">
            <xsl:value-of select="@rowspan"/>
          </xsl:attribute>
          <fo:block
            text-align="center">
            <xsl:apply-templates/>
          </fo:block>
        </fo:table-cell>
    </xsl:template>
  
    <xsl:template match="td">
      <fo:table-cell
        padding-before="4pt"
        padding-after="4pt"
        padding-start="4pt"
        padding-end="4pt"
        border="1pt solid #A0C9F5">
        <xsl:attribute name="number-columns-spanned">
            <xsl:value-of select="@colspan"/>
          </xsl:attribute>
          <xsl:attribute name="number-rows-spanned">
            <xsl:value-of select="@rowspan"/>
          </xsl:attribute>
        <fo:block>
          <xsl:apply-templates/>
        </fo:block>
      </fo:table-cell>
    </xsl:template>
  
    <xsl:template match="br">
      <fo:block></fo:block>
    </xsl:template>
  
    <xsl:template match="legal">
      <fo:inline
        font-size="8pt">
        <xsl:apply-templates/>
      </fo:inline>
    </xsl:template>
  
  <!-- ====================================================================== -->
  <!-- Local Extensions section -->
  <!-- ====================================================================== -->
  
   <xsl:template match="citation">
     <fo:inline>
       [<xsl:value-of select="@def"/>]
     </fo:inline>
   </xsl:template>
  
  
  
  </xsl:stylesheet>
  
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Developer's Guide</title> 
          </header> 
          <body> 
            <p>Information for people wanting to develop or customize WSIF.</p>
         </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/cvs.xml
  
  Index: cvs.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>CVS</title> 
          </header> 
          <body> 
  <section>
   <title>Accessing Builds and Source Code</title>
  <p>The source code for this package is available on the Apache web site. Individual
  files can be accessed using the web-based
  <fork href="http://cvs.apache.org/viewcvs.cgi/xml-axis-wsif/">CVS interface</fork>.
  The entire package can be downloaded using the following instructions.</p>
  </section>
  
  <section>
  <title>Accessing the Nightly Builds</title>
  <p>This package is built nightly along with Axis. The build will create two
  zip files: wsif-bin-1.2.zip and xml-axis.wsif-src.zip. The first file contains a
  complete build image, which includes wsif.jar and the API Javadoc. The second file contains  a copy of the source code, which could
  be built using Ant. Both of these files can be accessed at the same location
  as the <fork href="http://cvs.apache.org/dist/axis/nightly/">Axis nightly builds</fork>.</p>
  </section>
  
  <section>
  <title>Accessing the Source Tree (AnonCVS)</title>
  <p>So, you've decided that you need access to the source tree to see the latest
  and greatest code. There's two different forms of CVS access. The first
  is anonymous and anybody can use it. The second is not and you must have
  a login to the development server. If you don't know what this means, join
  the <link href="http://xml.apache.org/axis/mail.html">mailing list</link> and find out.</p>
  <p>Anyone can checkout source code from our anonymous CVS server. To do so,
  simply use the following commands (if you are using a GUI CVS client, configure
  it appropriatly):
  </p>
  <source>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login password: anoncvs
  
  cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic checkout xml-axis-wsif</source>
  </section>
  <section>
   <title>Full Remote CVS Access</title>
  <p>If you are a <em>Committer</em> and have a login on the
  Apache development server, this section is for you. If you are not a Committer,
  but you want to submit patches or even request commit privelages, please see the
  <link href="http://jakarta.apache.org/site/guidelines.html">Jakarta
  GuideLines </link>page (we follow the same rules) for more information.
  </p>
  <p>To have full access to the CVS server, you need to follow the links depending
  on the operating system you are using:
  </p>
  <ul>
  <li><fork href="http://jakarta.apache.org/site/cvsonunix.html">Unix</fork></li>
  <li><fork href="http://jakarta.apache.org/site/cvsonwin32.html">Windows</fork></li>
  </ul>
  </section>
     </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/book.xml
  
  Index: book.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "book-cocoon-v10.dtd">
  
  <book software="WSIF"
    title="WSIF"
    copyright="@year@ The Apache Software Foundation"
    xmlns:xlink="http://www.w3.org/1999/xlink">
  
    <menu label="Development">
      <menu-item label="Introduction" href="index.html"/>
      <menu-item label="CVS" href="cvs.html"/>
      <menu-item label="Building WSIF" href="building.html"/>
      <menu-item label="Testing WSIF" href="tests.html"/>
      <menu-item label="Customizing WSIF" href="customizing.html"/>
      <menu-item label="Trace" href="trace.html"/>
      <menu-item label="Mime Attachments" href="mime_attachments.html"/>
      <menu-item label="Writing A Provider" href="how_to_provider.html"/>
      <menu-item label="Writing WSDL Extensions" href="how_to_wsdl_extensions.html"/>
    </menu>
  </book>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/building.xml
  
  Index: building.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Building WSIF</title> 
          </header> 
          <body> 
  <section>
  <title>What are requirements?</title>
  
  <p>WSIF generally requires WSDL4J and XML parser that implements JAXP (such as 
  Xerces2). For detailed list of required and optional JAR files and how to obtain 
  them please take a look in lib/ subdirectories. Each subdirectory has short 
  README file that explains how to get needed JAR file if you do not have them 
  already on your CLASSPATH. Check detailed <link href="../requirements.html">list of 
  requirements</link>.</p>
  </section>
  
  <section>
  <title>How to build?</title>
  <p>There are two possibilities: use your preferred verion of ANT but you are 
  responsible for setting CLASSPATH or use provided scripts that automate building 
  and CLASSPATH setting.</p>
  <section>
  <title>Building WSIF using ANT</title>
  <p>Obtain all the necessary jar files as listed in the 
  <link href="../requirements.html">prerequisites</link>.&nbsp; </p>
  
  <p>Set required environment variables, including,
    JAVA_HOME, ANT_HOME. </p>
  <p>From the root directory of wsif (where build.xml is located), run </p>
    <source>ant -Dwsif.build.classpath=&lt;classpath&gt; &lt;target&gt;</source>
    <p>where &lt;classpath&gt; contains the location of the preequisite JAR files
    and, where &lt;target&gt; is one of the following:</p>
    <ul>
      <li><strong>compile</strong>: Compiles the API
      </li><li><strong>samples</strong>: Compiles the samples
      </li><li><strong>javadocs</strong>: Builds the javadoc
      </li><li><strong>srcdist</strong>: Creates the source distribution
      zip file.
      </li><li><strong>dist</strong>: Creates the binary distribution zip
      file.
      </li><li><strong>clean</strong>: Removes built files.
      </li><li><strong>all</strong>: Cleans, creates source and binary distribution
      zip files.
    </li><li><strong>tests</strong>: Build tests</li></ul>
  </section>
  <section>
  <title>Building WSIF by using provided scripts and JAR files</title>
  <p>If you downloaded the source distribution you need to make sure you have all <link href="../requirements.html">prerequisite jars</link> available under the <code>lib/</code> directory. 
  Most of the necessary jar files are already included in lib directory (we redistribute what we can). You will only need to download the following and put them into the <code>lib/</code> directory.</p>
  <ul>
  <li><strong>activation.jar</strong></li>
  <li><strong>mail.jar</strong></li>
  <li><strong>jms.jar</strong></li>
  <li><strong>j2ee.jar</strong>; if you plan to download this it includes the above three so you won't need to download those separately.</li>
  </ul>
  <p>The <link href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/lib/README.html">dependency README</link> tells you where you can download these 
  from and also how they are used, so you can decide for yourself which JARs you really need.</p>
  
  <p>Then use <strong>build script</strong> (./build.sh on UNIX or build.bat on Windows) to 
  rebuilt WSIF (see list of targets above).</p>
  
  <p>After building, if you want just to run samples you can simply call <strong>classpath script</strong> 
  (on Windows use classpath.bat on UNIX use source classpath.csh if you use TCSH 
  or source classpath.sh if you use BASH) and you will have all required jar files 
  on CLASSPATH, then you can proceed with <link href="../wsif_samples/index.html">running samples</link>.</p>
  
  </section></section>
       </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/customizing.xml
  
  Index: customizing.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Customizing WSIF</title> 
          </header> 
          <body> 
  <section>
   <title>Customizing your WSIF installation</title>
  <p>This part of documentation is meant to help developers who want to modify 
  WSIF by adding or changing its providers and implementing new protocols.</p>
      <p>There are many points within the WSIF API that allow for
      customization. <link href="http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-axis-wsif/java/samples/customfactory/README.html">An advanced WSIF sample</link>
  
      demonstrates how to write your own WSIF service factory so that
      dynamic binding selection follows your own customized
        algorithm. The user can discover other customization points by
        examining <link
  		   href="http://cvs.apache.org/viewcvs.cgi/*checkout*/xml-axis-wsif/java/docs/apidocs/index.html">WSIF's core API</link>.</p>
      <p>Larger scale customization involves finding ways to expose
        software that uses your proprietary protocols through WSDL, so
        that you can then access this software using WSIF's APIs. To do
        this, you need to take care of the following:</p>
      <ol>
        <li><link href="how_to_wsdl_extensions.html">Writing your own WSDL
  	  extensions to support new protocols</link></li>
        <li><link href="how_to_provider.html">Writing your own WSIF
  	  providers to support customized WSIF extensions</link></li>
      </ol>
  
      <p>WSIF defines binding extensions so that EJBs, local java classes, software accessible over message queues using 
      the JMS API and software that can be invoked using the Java Connector architecture can also be described in WSDL. WSIF is packaged 
      with providers that allow transparent invocation of such software given the corresponding WSDL description. Here are the documents that describe these bindings:</p>
        <ul>
        <li><link href="../providers/wsdl_extensions/java_extension.html">Local java binding extensions for WSDL</link></li>
        <li><link href="../providers/wsdl_extensions/ejb_extension.html">EJB binding extensions for WSDL</link></li>
        <li><link href="../providers/wsdl_extensions/jms_extension.html">JMS binding extensions for WSDL</link></li>
        <li><link href="../providers/wsdl_extensions/j2c_extension.html">JCA binding extensions for WSDL</link></li>
        </ul>
  
  <p>You may find also useful to read about using <link href="mime_attachments.html">Soap
    Attachments using WSIF</link> and always important when debugging - &nbsp; <link href="trace.html">
  how to use tracing in WSIF</link>.
  </p>
  </section>
     </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/tests.xml
  
  Index: tests.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Testing WSIF</title> 
          </header> 
          <body> 
  <section><title>Building the unit tests</title>
  <p>TODO</p>
  </section>
  
  <section><title>Setting up your environment to run the tests</title>
  <p>TODO</p>
  </section>
  
  <section><title>Running the tests</title>
  <p>WSIF has a number of unit tests found in the tests directory. These use Junit (currently Junit 3.7). 
  WSIF unit tests are loosely themed and test function in multiple providers. For instance jms.JmsTest tests jms:address, 
  jms:property and jms:propertyValue tags across the SoapJms, AxisJms and NativeJms providers. You can either run a specific 
  unit test or run all of them by running util.WSIFTestRunner. wsif.test.properties has wsif.test.components=ejb=on,jms=on,
  remotewsdl=on,jndi=on,fix=on,async=on which allows you to switch off areas across all unit tests. So because I rarely 
  change the EJB provider, I run with ejb=off so when I run WSIFTestRunner none of the EJB tests get run. This can be dangerous 
  and it is generally better to run all the unit tests. Individual unit tests can call TestUtilities.areWeTesting("ejb") for instance. 
  There are various listeners needed to run the unit tests (JMS2HTTPBridge, JMSAsyncListener, NativeJMSRequestListener) and unit tests 
  automatically start and stop the listeners that they need. All the tests need to find WSDL and other files on the local filesystem. 
  This is done by looking for the WSIF src, samples and tests directories under the directory specified by the wsif.path property in 
  wsif.test.properties. So I have wsif.path=c:\\wsif. The setup required to run the unit tests is based on the various providers being used.</p>
  <p>
  For Soap and Axis over Http, find all files called DeploymentDescriptor.xml in the samples and tests directories and deploy them to your 
  favourite web server. The web server must be running on your localhost using port 8080. In the future localhost:8080 should be a property 
  loaded from wsif.test.propeerties. The level of soap or axis used on your server does not have to be the same as the level used by WSIF. 
  I use soap 2.2 on tomcat so I issue java org.apache.soap.server.ServiceManagerClient http://localhost:8080/soap/servlet/rpcrouter deploy 
  "samples\services\addressbook\DeploymentDescriptor.xml"</p>
  <p>
  There is no setup to do to run tests under the Java provider.
  </p>
  <p>
  To run tests using the EJB provider, ... todo ???
  </p>
  <p>
  There are three providers that are enabled for Jms : Soap, Axis and NativeJms. Asynchronous support is currently only supported over Jms, 
  so to test out async you need Jms. Obviously you need a Jms implementation. WSIF uses JNDI to lookup Jms queues and queue connnection factories. 
  Topics are not supported at the moment. The batch files samples\wsifjmssetup.bat and samples\wsifjmstidy.bat create and delete the JNDI 
  definitions for the Jms queues and queue connection factory needed to run the samples and some of the unit tests. I use IBM MQSeries as 
  my Jms implementation so the batch files samples\wsifmqsetup.bat and samples\wsifmqtidy.bat create and delete the MQSeries queues needed 
  to run the samples and some of the unit tests. The batch files tests\wsiftestjmssetup.bat and tests\wsiftestmqsetup.bat create the JNDI 
  definitions and the MQSeries queues needed to run the unit tests. No code in WSIF or in the unit tests is MQ-specific, except for these 
  mq batch files and WSIFJMSFinderForMq. The unit tests also assume the local queue manager is being used. The unit tests also assume that 
  the JNDI database is on the filesystem in \JNDI-Directory.
  </p>
  <p>
  WSIF provides a JMS2HTTPBridge which takes soap messages from a Jms queue, routes them to a url and sends the response message back to a 
  replyTo queue. The JMS2HTTPBridge is intended as a test tool only. So unit tests that test SoapJms and AxisJms start the JMS2HTTPBridge 
  automatically. NativeJms requests are served by the NativeJMSRequestListener which implements the backend service for our unit tests.
  </p>
  <p>
  Specifying remotewsdl=on in wsif.test.components will enable the tests in the wsdl package to be run. These tests test out loading wsdl 
  from a url, from a jar file and test out imports. So you need wsdl\ClassLoaderTest.jar on your classpath, 
  and http://localhost:8080/wsdl/AddressBook.wsdl needs to be available.
  </p>
  <p>
  The intention is for all unit tests to be run by WSIFTestRunner so everyone runs them all automatically. Unfortunately there 
  are a few tests which cannot be run in this way (or rather I could not make them run automatically). An example of this is the 
  translated.messages tests, because these need to set the locale, and I could not reset the locale multiple times in the same test.
  </p>
  <p>
  The intention is for everyone to make sure that all the unit tests are kept working all the time, so no regressions find their 
  way in. If you add in new code (or even fixes) into WSIF, please add in new unit tests, or extend existing tests to cover the 
  new code you've added. Otherwise tomorrow someone may unknowingly break your code. If you add in new unit tests please add them 
  to WSIFTestRunner so that everyone will automatically run them as well. I guess when you make a change that requires a service 
  to be redeployed or a queue definition to be added or changed, please notify everyone on axis-dev so that everyone can update their setup.
  </p>
  </section>
  
  </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/how_to_provider.xml
  
  Index: how_to_provider.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>How to write a provider</title> 
          </header> 
          <body> 
  <section>
  <title>What is a WSIF Provider?</title>
  <p>WSIF, as its name suggests is an open-ended framework for invoking WSDL described
  services. As long as a WSDL description of the endpoint exists, it should be possible
  to use this framework to invoke that piece of software, whatever it may be.</p>
  <p>As has been described in 
  <link href="http://www-106.ibm.com/developerworks/webservices/library/ws-appwsif.html?loc=dwmain">this introductory article</link>, 
  the WSIF API is driven by
  the abstract WSDL description of the service, and thus operates at a protocol-independent
  level. When an invocation takes place at runtime, the invocation of the abstract operation
  offered by the service needs to be converted into a protocol-specific mechanism for contacting
  the service endpoint, conveying the input message or other required information to the service,
  and receiving the response if any that results from the invocation. This result is eventually
  returned to the application that uses the high-level, protocol-independent WSIF API.</p>
  <p>The protocol-specific piece of software that enables the invocation to take place
  is the WSIF provider. There is one WSIF provider for each kind of WSDL binding supported
  by a particular installation of WSIF. For example, a particular installation may include the
  WSIF core along with the SOAP and EJB providers only. This would allow clients using WSIF
  at that site to invoke WSDL-described service that have SOAP or EJB bindings. Providers
  are pluggable and can be added to the installation at runtime.</p>
  <p>So far we understand that when the code using the WSIF API (let's call it the application,
  even though this code might actually be WSIF's dynamic proxy which provides an additional
  layer of abstraction for the real application) to invoke a service with a SOAP binding, the
  invocation takes place through a WSIF provider that supports this binding. How is a provider
  discovered? What happens if multiple providers support the same binding? (This is indeed
  the case for SOAP, since WSIF includes a SOAP provider based on Axis and one based on Apache
  SOAP). We will not address these issues in this document, here we will concentrate on
  the provider architecture itself, without regard to how WSIF knows about their existence.</p>
  </section>
  <section><title>Writing your own WSIF provider</title>
  <p>A pre-condition for a working provider is that there should be a well-defined
  WSDL binding that it supports, along with the associated WSDL4J code that is capable
  of parsing the binding. Note that WSDL4J, by default, supports only the standard WSDL 1.1
  bindings: SOAP, HTTP and MIME. To add support for other providers in WSIF, one would first
  need to define the WSDL binding extensions, define the corresponding WSDL4J extensibility
  elements, and then register the serializers and deserializers for these extensibility
  elements with the WSDL4J extension registry. Details on this are available
  <link href="how_to_wsdl_extensions.html">here</link>. The WSIF provider will use the WSDL4J
  extensibility elements defined since these are the in memory representation of the
  data in the binding.</p>
  </section>
  <section>
  <title>The <code>WSIFProvider</code> interface</title>
  <p>Let's discuss the specifics of a WSIF provider. A provider must implement the following
  interface:</p>
  
  <source>
      /**
       * For the given WSDL definition, service and port
       * try to provide dynamic port,
       * or return null if this provider can not do it.
       * It is required to pass definition and service in addition to port
       * as in current WSDL4J it is not possible to retrieve service to
       * which port belongs and definition in which it was defined.
       */
      public WSIFPort createDynamicWSIFPort(
          Definition def,
          Service service,
          Port port,
          WSIFDynamicTypeMap typeMap)
          throws WSIFException;
  
      /**
       * Returns the WSDL namespace URIs of any bindings this provider supports.
       * The assumption is made that the provider supports all combinations of
       * binding and address namespaces returned by this and the
       * getAddressNamespaceURIs method.
       * @return an array of all binding namespaces supported by this provider
       */
      public String[] getBindingNamespaceURIs();
  
      /**
       * Returns the WSDL namespace URIs of any port addresses this provider supports.
       * The assumption is made that the provider supports all combinations of
       * binding and address namespaces returned by this and the
       * getBindingNamespaceURIs method.
       * @return an array of all address namespaces supported by this provider
       */
      public String[] getAddressNamespaceURIs();
  
  </source>
  <p>OK, that's all you need to know. What, you mean the above wasn't self-explanatory?</p>
  <p>So let's get into a little more detail. Let's start with the simpler methods:
  <code>getBindingNamespaceURIs()</code> and <code>getAddressNamespaceURIs()</code>. Each binding
  extension in WSDL is defined in a particular XML namespace. For example, the SOAP binding
  is defined in the namespace <code>http://schemas.xmlsoap.org/wsdl/soap/</code>, and similarly,
  so are the extensions under the <code>&lt;port></code> section of a WSDL document (often, as in
  the case with the SOAP extensions, the namespace is the same as the one in which binding
  extensions are defined). So, as the javadoc comments suggest, the WSIF runtime assumes that
  the provider supports invocation of any service with a namespace URI for binding extensions
  that is one of those returned by <code>getBindingNamespaceURIs()</code> and a namespace URI
  for address extensibility elements that is one of those returned by
  <code>getAddressNamespaceURIs()</code>.</p>
  <p>The core of the provider is the method <code>createDynamicWSIFPort(..)</code>. This returns
  a <code>WSIFPort</code> object that is constructed dynamically using:</p>
  <ul>
  <li>the definition of the service we are invoking (the <code>javax.wsdl.Definition</code>
  parameter)</li>
  <li>the service we are invoking within that particular WSDL (the <code>javax.wsdl.Service</code>
   parameter)</li>
  <li>the port offered by the service that lets us know the specific service endpoint, the
  binding and the port type that is being invoked (the <code>javax.wsdl.Port</code> parameter)</li>
  <li>a type map that maps abstract schema types in the WSDL messages for the operations in the
  port type being invoked  to java types that correspond to them. WSIF will expect messages
  provided at the time of invocation to have parts that are java objects of the required type,
  as specified by the type map (it of course allows the object used for the invocation to be of
  a less specific type as well).</li>
  </ul>
  <p>Let's consider how a specific provider implements this and other interfaces. We will
  concentrate on identifying patterns that most provider implementations follow. Consider,
  for example, the Apache SOAP provider.
  <link href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFDynamicProvider_ApacheAxis.java">
  Here</link> is the source code for this implementation of the <code>WSIFProvider</code> interface.
  It is fairly straightforward. The constructor usually does very little, in most cases nothing.
  In this particular case it has a mechanism to set up the binding and address namespace URIs
  supported by this provider. It also adds to the WSDL4J extension registry used by WSIF the
  capability to parse JMS extensions. The capability to parse SOAP, EJB and java extensions are
  pre-registered, all other binding extensions may be registered in this fashion. The
  <code>createDynamicWSIFPort</code> method in the Apache Axis provider parses the binding associated
  with the port being invoked and verifies that it is indeed a SOAP binding. If this is the case,
  it creates a <code>WSIFPort_ApacheAxis</code> object, which implements the <code>WSIFPort</code>
  interface.</p>
  </section>
  <section><title>The <code>WSIFPort</code> interface</title>
  <p>The main function of the WSIF port that is to create a <code>WSIFOperation</code> object at
  runtime when a WSDL operation needs to be invoked. At the minimum, the <code>WSIFPort</code> needs
  to know the name of the operation. If there is a possibility of overloaded operations, the
  application may invoke the form that takes the names of the input and output messages in
  addition to the name of the operation. <code>WSIFOperation</code> objects are the brains of the
  outfit; they actually perform the invocation based on a specific protocol. But more on that
  later, first let's see how the Axis provider implements the <code>WSIFPort</code> interface. The
  <link href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFPort_ApacheAxis.java">
  implementation</link> in the constructor itself parses the binding being invoked, doing some
  processing based on the transport being used (since WSIF's Axis provider supports SOAP messages
  over HTTP or JMS). In addition, it also verifies that the binding is indeed supported (for
  example WSIF does not support SOAP bindings that use document style instead of RPC style
  invocations <em>using the Axis provider</em> (document style is supported when using the Apache
  SOAP provider to handle SOAP bindings). Finally, the Axis implementation of the port actually
  iterates through the binding, creating a <code>WSIFOperation_ApacheAxis</code> object (the
  protocol-specific implementation of the <code>WSIFOperation</code> interface) for each operation
  in the binding. These <code>WSIFOperation</code> objects are cached so that they don't have to be
  created each time. Of course that is optional, a bare-bones version of a provider could do very
  little in the constructor. The most useful method implemented here is <code>createOperation</code>,
  which creates the appropriate <code>WSIFOperation_ApacheAxis</code> object (based on the operation
  name and input and output names, if provided, to resolve the exact operation the application
  wants to invoke). The method first looks up the cache containing previously created instances
  and may reuse them or may create a new one.</p>
  </section>
  <section><title>The <code>WSIFOperation</code> interface</title>
  <p>The real brains of the outfit is the <code>WSIFOperation</code> object. This interface has a
  number of useful methods, so let's do it in some detail:</p>
  <source>
  /**
   * A WSIFOperation is a handle on a particular operation of a portType
   * that can be used to invoke web service methods. This interface is
   * implemented by each provider. A WSIFOperation can be created using
   * {@link WSIFPort#createOperation(String)}.
   *
   * @author Owen Burroughs &lt;owenb@apache.org&gt;
   * @author Ant Elder &lt;antelder@apache.org&gt;
   * @author Jeremy Hughes &lt;hughesj@apache.org&gt;
   * @author Mark Whitlock &lt;whitlock@apache.org&gt;
   */
  public interface WSIFOperation extends Serializable {
  
      /**
       * Execute a request-response operation. The signature allows for
       * input, output and fault messages. WSDL in fact allows one to
       * describe the set of possible faults an operation may result
       * in, however, only one fault can occur at any one time.
       *
       * @param op name of operation to execute
       * @param input input message to send to the operation
       * @param output an empty message which will be filled in if
       *        the operation invocation succeeds. If it does not
       *        succeed, the contents of this message are undefined.
       *        (This is a return value of this method.)
       * @param fault an empty message which will be filled in if
       *        the operation invocation fails. If it succeeds, the
       *        contents of this message are undefined. (This is a
       *        return value of this method.)
       *
       * @return true or false indicating whether a fault message was
       *         generated or not. The truth value indicates whether
       *         the output or fault message has useful information.
       *
       * @exception WSIFException if something goes wrong.
       */
      public boolean executeRequestResponseOperation(
          WSIFMessage input,
          WSIFMessage output,
          WSIFMessage fault)
          throws WSIFException;
  
      /**
       * Execute an asynchronous request
       * @param input   input message to send to the operation
       *
       * @return the correlation ID or the request. The correlation ID
       *         is used to associate the request with the WSIFOperation.
       *
       * @exception WSIFException if something goes wrong.
       */
      public WSIFCorrelationId executeRequestResponseAsync(WSIFMessage input)
          throws WSIFException;
  
      /**
       * Execute an asynchronous request
       * @param input   input message to send to the operation
       * @param handler   the response handler that will be notified
       *        when the asynchronous response becomes available.
       *
       * @return the correlation ID or the request. The correlation ID
       *         is used to associate the request with the WSIFOperation.
       *
       * @exception WSIFException if something goes wrong.
       */
      public WSIFCorrelationId executeRequestResponseAsync(
          WSIFMessage input,
          WSIFResponseHandler handler)
          throws WSIFException;
  
      /**
       * fireAsyncResponse is called when a response has been received
       * for a previous executeRequestResponseAsync call.
       * @param response   an Object representing the response
       * @exception WSIFException if something goes wrong
       */
      public void fireAsyncResponse(Object response) throws WSIFException;
  
      /**
       * Processes the response to an asynchronous request.
       * This is called for when the asynchronous operation was
       * initiated without a WSIFResponseHandler, that is, by calling
       * the executeRequestResponseAsync(WSIFMessage input) method.
       *
       * @param response   an Object representing the response.
       * @param output an empty message which will be filled in if
       *        the operation invocation succeeds. If it does not
       *        succeed, the contents of this message are undefined.
       *        (This is a return value of this method.)
       * @param fault an empty message which will be filled in if
       *        the operation invocation fails. If it succeeds, the
       *        contents of this message are undefined. (This is a
       *        return value of this method.)
       *
       * @return true or false indicating whether a fault message was
       *         generated or not. The truth value indicates whether
       *         the output or fault message has useful information.
       *
       * @exception WSIFException if something goes wrong
       *
       */
      public boolean processAsyncResponse(
          Object response,
          WSIFMessage output,
          WSIFMessage fault)
          throws WSIFException;
  
      /**
       * Execute an input-only operation.
       *
       * @param input input message to send to the operation
       * @exception WSIFException if something goes wrong.
       */
      public void executeInputOnlyOperation(WSIFMessage input) throws WSIFException;
  
      /**
       * Allows the application programmer or stub to pass context
       * information to the binding. The Port implementation may use
       * this context - for example to update a SOAP header. There is
       * no definition of how a Port may utilize the context.
       * @param context context information
       */
      public void setContext(WSIFMessage context);
  
      /**
       * Gets the context information for this binding.
       * @return context
       */
      public WSIFMessage getContext();
  
      /**
       * Create an input message that will be sent via this port.
       * It is responsibility of caller to set message name.
       * @return a new message
       */
      public WSIFMessage createInputMessage();
  
      /**
       * Create an input message that will be sent via this port.
       * @param name for the new message
       * @return a new message
       */
      public WSIFMessage createInputMessage(String name);
  
      /**
       * Create an output message that will be received into via this port.
       * It is responsibility of caller to set message name.
       * @return a new message
       */
      public WSIFMessage createOutputMessage();
  
      /**
       * Create an output message that will be received into via this port.
       *
       * @param name for the new message
       * @return a new message
       */
      public WSIFMessage createOutputMessage(String name);
  
      /**
       * Create a fault message that may be received into via this port.
       * It is responsibility of caller to set message name.
       * @return a new message
       */
      public WSIFMessage createFaultMessage();
  
      /**
       * Create a fault message that may be received into via this port.
       *
       * @param name for the new message
       * @return a new message
       */
      public WSIFMessage createFaultMessage(String name);
  
  }
  </source>
  
  <p>Most of the above is self-explanatory. The important things to note is that the
  invocation is achieved through this object. It also is capable of creating the messages
  (input, output, fault) that are associated with any invocation; such messages can be
  populated with data and then provided to methods such as
  <code>executeRequestResponseOperation</code>. Note also that as operations are designed
  right now, instances may not be reused since they often carry state that interferes
  with subsequent invocations using the same object. To prevent such misuse, the default
  implementation of the interface (which is extended by other implementations including
  <code>WSIFOperation_ApacheAxis</code>) has a <code>close</code> method which must be invoked at
  the end of an invocation and sets a flag preventing further use. Applications may create a
  new operation instance using the <code>WSIFPort</code>. At some point we expect to modify
  the way operation instances are handled to allow reuse except in specific cases, hopefully
  simplifying the provider contract and improving performance.</p>
  <p>The Axis provider implementation of this interface is
  <link href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFOperation_ApacheAxis.java">
  here</link>. Everything the class does boils down to the use of the
  <code>invokeRequestResponseOperation</code> method. We won't get into detail, but this uses
  a protocol-specific library (in this case JAX-RPC, which is the client programming model
  supported by Axis) to invoke the service. Note how the provider code handles the type map that
  was provided at the time of creating the <code>WSIFPort</code> for invoking this service.
  For Axis, we need to register serializers and deserializers to marshall and unmarshall java
  objects into SOAP messages. This must be done prior to an invocation for it to work. Other
  providers may have to take similar steps to make sure they are capable of handling the
  java-typed data that populate the input and output messages used for invocation.</p>
  <p>So far we have not touched on <code>WSIFMessage</code> objects which are ubiquitous in the
  provider code. It's enough to think of a <code>WSIFMessage</code> as a map of WSDL message
  part names to java objects representing the value of that particular part. The type of the
  java object must match the expected type according to the type mapping supplied to the
  WSIF provider. WSIF also allows for creation of messages using primitive java types. The
  WSIF message interface is available <link href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/src/org/apache/wsif/WSIFMessage.java">here</link>.
  </p>
  <p><strong>That's it!</strong></p>
  <p>The protocol-specific implementation of the <code>WSIFProvider</code> interface, the
  <code>WSIFPort</code> interface and the <code>WSIFOperation</code>interface are all that are generally
  required to implement a WSIF provider. Supporting classes may also be included - for example
  the SOAP providers (both, Apache SOAP and Apache Axis providers) have utility classes to
  handle message exchanges using the JMS transport.</p>
  </section>
  <section><title>Open Issues</title>
  <p><strong>Performance and stateful operations (for example in JCA connectors):</strong><br />
  from Paul Fremantle email<br />
  <code>How about explicitly identifying which providers require stateful operations
  and which dont. Those that dont could reuse operations from a cache, ignore
  closes etc. I'm not sure this will help us either. At the moment our HTTP
  support is not efficient because we don't reuse HTTP connections. If we
  updated it to be much more closely bound to the real HTTP interactions then
  maybe close() might be useful?? I havent really thought this through, but I
  know that close() was designed to allow long running connections.
  </code>
  </p>
  </section>
          </body>
      </document>
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/how_to_wsdl_extensions.xml
  
  Index: how_to_wsdl_extensions.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>How to write your own WSDL extensions</title> 
          </header> 
          <body> 
  <section>
  <title>How to write your own WSDL extensions and plug them into WSDL4J</title>
  
  <p>To Implement new WSDL extension using WSDL4J it is necessary to:</p>
      <ul>
        <li>decide on what namespace will be used for WSDL extension: for example 
        EJB provider is using <link href="http://schemas.xmlsoap.org/wsdl/ejb/">http://schemas.xmlsoap.org/wsdl/ejb/</link></li>
        <li>write a subclass of javax.wsdl.extensions.ExtensibilityElement</li>
        <li>write class which implements ExtensionSerializer and ExtensionDeserializer 
        and is responsible for converting Java object representing extension to 
        XML (serializer) and for converting XML into Java object (deserialize)</li>
        <li>write new extension registry - this clss must extend javax.wsdl.extensions.ExtensionRegistry 
        and is used to inform WSDL4J on how to handle new extension</li>
      </ul>
  <p>You can find examples of all these for the existing providers in the various org.apache.wsif.wsdl.extensions.* packages</p>
  <p>TODO: more details based on example</p>
  </section>
          </body>
      </document>
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/trace.xml
  
  Index: trace.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>WSIF Trace</title> 
          </header> 
          <body> 
  <section>
    <title>Quick summary</title>
  <p>To switch WSIF trace on,in your log4j.properties specify the following 
  settings to trace to wsif.log....</p>
  <source>
  log4j.rootCategory=INFO, CONSOLE, LOGFILE
  
  log4j.logger.org.apache.wsif.*=DEBUG
  log4j.logger.com.ibm.wsif.*=DEBUG
  log4j.appender.LOGFILE=org.apache.log4j.FileAppender
  log4j.appender.LOGFILE.File=wsif.log
  log4j.appender.LOGFILE.Append=true
  log4j.appender.LOGFILE.Threshold=DEBUG
  </source>
  </section>
  <section>
    <title>For those who want to know more</title>
  <p>
  WSIF uses Apache commons-logging for its messages and trace. See 
  http://jakarta.apache.org/commons/logging.html for more information. 
  Commons-logging is an API which wraps various log implementations. 
  You can configure commons-logging to use other log implementations, 
  or even your own. So commons-logging.jar must be on the classpath, 
  and log4j is the default 
  log implementation, although commons-logging.jar contains other log 
  implementations. You can configure commons-logging.properties to use 
  a different log implementation. If using log4j, you configure 
  log4j.properties to redirect trace and switch it on. The log4j.properties 
  settings above are only a subset of all possibilities.
  </p>
  </section>
  <section>
    <title>Interpreting trace</title>
  <p>
  Here is a sample trace output...</p>
  <source>
  7951 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;WSIFServiceFactory.newInstance()
  8122 [main] DEBUG org.apache.wsif.*  - EXIT&nbsp;&nbsp;WSIFServiceFactory.newInstance(org.apache.wsif.base.WSIFServiceFactoryImpl@7df10a36)
  8132 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;WSIFServiceFactoryImpl.getService&lt;7df10a36&gt;(C:\wsad-5\eclipse\workspace\xml-axis-wsif\java\samples\addressbook\wsifservice\AddressBook.wsdl, &lt;null&gt;, &lt;null&gt;, http://wsifservice.addressbook/, AddressBook)
  
  8252 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;PrivateCompositeExtensionRegistry.&lt;init&gt;&lt;43000a37&gt;()
  8893 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;&nbsp;JavaBindingSerializer.registerSerializer&lt;576c0a36&gt;(com.ibm.wsdl.extensions.PopulatedExtensionRegistry@50450a37)
  8913 [main] DEBUG org.apache.wsif.*  - EXIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaBindingSerializer.registerSerializer()
  8943 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;&nbsp;FormatBindingSerializer.&lt;init&gt;&lt;40b48a36&gt;()
  
  8943 [main] DEBUG org.apache.wsif.*  - EXIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FormatBindingSerializer.&lt;init&gt;()
  9223 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;&nbsp;FormatBindingSerializer.registerSerializer&lt;40b48a36&gt;(com.ibm.wsdl.extensions.PopulatedExtensionRegistry@50450a37)
  9243 [main] DEBUG org.apache.wsif.*  - EXIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FormatBindingSerializer.registerSerializer()
  9293 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;&nbsp;EJBBindingSerializer.registerSerializer&lt;55a24a36&gt;(com.ibm.wsdl.extensions.PopulatedExtensionRegistry@50450a37)
  
  9323 [main] DEBUG org.apache.wsif.*  - EXIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EJBBindingSerializer.registerSerializer()
  9333 [main] DEBUG org.apache.wsif.*  - EXIT&nbsp;&nbsp;&nbsp;&nbsp;PrivateCompositeExtensionRegistry.&lt;init&gt;()
  9353 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;WSIFDynamicTypeMap.&lt;init&gt;&lt;32128a36&gt;()
  9353 [main] DEBUG org.apache.wsif.*  - EXIT&nbsp;&nbsp;&nbsp;&nbsp;WSIFDynamicTypeMap.&lt;init&gt;()
  
  9363 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;WSIFServiceImpl.&lt;init&gt;&lt;31e38a36&gt;(C:\wsad-5\eclipse\workspace\xml-axis-wsif\java\samples\addressbook\wsifservice\AddressBook.wsdl, &lt;null&gt;, &lt;null&gt;, http://wsifservice.addressbook/, AddressBook)
  9363 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;WSIFUtils.readWSDL(&lt;null&gt;, C:\wsad-5\eclipse\workspace\xml-axis-wsif\java\samples\addressbook\wsifservice\AddressBook.wsdl)
  9373 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSIFPluggableProviders.getProvider(/)
  
  9384 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSIFPluggableProviders.getSupportingProviders(/, true)
  9384 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSIFPluggableProviders.getAllDynamicWSIFProviders()
  9414 [main] DEBUG org.apache.wsif.*  - ENTRY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSIFPluggableProviders.readMETAINFClassNames(file:/C:/wsad-5/eclipse/workspace/xml-axis-wsif/bin/META-INF/services/org.apache.wsif.spi.WSIFProvider)
  9424 [main] DEBUG org.apache.wsif.*  - EVENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSIFPluggableProviders.readMETAINFClassNames Reading provider class names from URL: file:/C:/wsad-5/eclipse/workspace/xml-axis-wsif/bin/META-INF/services/org.apache.wsif.spi.WSIFProvider
  9434 [main] DEBUG org.apache.wsif.*  - EVENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSIFPluggableProviders.readMETAINFClassNames Found provider class name: org.apache.wsif.providers.ejb.WSIFDynamicProvider_EJB
  9444 [main] DEBUG org.apache.wsif.*  - EVENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WSIFPluggableProviders.readMETAINFClassNames Found provider class name: org.apache.wsif.providers.java.WSIFDynamicProvider_Java
  </source>
  <p>The columns before 
  the ENTRY/EXIT are configurable in log4j.properties. In the sample above, 
  the [main] shows that all these trace statements were made from the main 
  thread. In a multithreaded application, the trace statements from all 
  threads are interleaved. After the ENTRY/EXIT is the WSIF classname.methodname 
  indented according to stack depth. The hex number in angle brackets (&lt;&gt;) 
  after the method name is the java object id, so it is possible to tell 
  which object this method was run against. Methods which do not have an 
  object id are static methods. After the object id are the parameters 
  passed or returned from that method. Null parameters are represented as 
  &lt;null&gt;. Some WSDL objects are represented as their fully qualified name 
  and their object id. For instance 
  definition({http://mynamespace}MyDefinition,1128e5e0). Some parameters 
  may get traced over multiple lines.
  </p>
  <p>Occasionally a method will be indented by two (or more) spaces than 
  the method that called it, according to the trace. This is demonstrated 
  in the sample trace above, by readMETAINFClassNames being indented by 5 
  more spaces than getAllDynamicProviders. This is because 
  getAllDynamicProviders calls other private methods which aren't traced, 
  which in turn call readMETAINFClassNames. So the indentation is a true 
  reflection of the WSIF stack depth, but not all private methods get traced.
  </p>
  <p>ENTRY trace statement represents a call to a method. An EXIT statement 
  represents the return from a method. An EVENT statement represents other 
  interesting information which may prove useful when diagnosing problems. 
  An EXCEPTION trace statement represents a java exception at the moment 
  that it is caught by WSIF. An ignored exception also represents a java 
  exception at the moment that it caught by WSIF. The difference between 
  an EXCEPTION and an ignored exception is that an EXCEPTION represents 
  an unexpected problem (in the application, the WSDL, in WSIF or elsewhere), 
  whereas an ignored exception represents an exception that was expected 
  to be thrown and caught routinely as part of WSIF mainline code and does 
  not represent a problem in itself. EXCEPTIONs are accompanied by their 
  stack trace.
  </p>
  <p>WSIF trace statements can be made from classes that are not part of WSIF. 
  Such trace statements have their classname prefixed with their fully 
  qualified package name. Commons-logging supports package-level tracing. 
  That enables trace to be switched on or off for individual packages. This 
  is not supported by WSIF. The only exception to this is tracing of WSIF 
  logging itself. Tracing org.apache.wsif.logging.* enables trace to trace 
  itself. This should be used with caution since traces produced this way 
  are huge and difficult to use to diagnose problems that aren't in trace 
  itself.  A trace statement that contains "**** Exception in WSIF trace 
  statement *******" represents a trace statement that itself has a bug in 
  it. Such bad trace statements should not affect the normal operation of 
  WSIF, whether or not trace is on.
  </p>
  </section>
  </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/developers/mime_attachments.xml
  
  Index: mime_attachments.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Soap Attachments using WSIF</title> 
          </header> 
          <body> 
  <section>
  <title>Overview</title>
  <p>
  WSIF supports passing attachments in a Mime message using the Axis 
  provider. The attachment is a javax.activation.DataHandler, The mime:multipartRelated, 
  mime:part and mime:content tags are used to describe the attachment 
  in the WSDL.</p>
  <p>
  The WSDL extensions...</p>
  <source>
  &lt;binding name="MyBinding" type="tns:abc" &gt;
  &nbsp;&lt;soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/&gt;
  &nbsp;&lt;operation name="MyOperation"&gt;
  &nbsp;&nbsp;&lt;soap:operation soapAction=""/&gt;
  &nbsp;&nbsp;&lt;input&gt;
  &nbsp;&nbsp;&nbsp;&lt;mime:multipartRelated&gt;
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;mime:part&gt;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;soap:body use="encoded" namespace="http://mynamespace"
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;encodingStyle="http://schemas.xmlsoap.org/soap/encoding"/&gt;
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;/mime:part&gt;
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;mime:part&gt;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;mime:content part="attch" type="text/html"/&gt;
  &nbsp;&nbsp;&nbsp;&nbsp;&lt;/mime:part&gt;
  &nbsp;&nbsp;&nbsp;&lt;/mime:multipartRelated&gt;
  &nbsp;&nbsp;&lt;/input&gt;
  &nbsp;&lt;/operation&gt;
  &lt;/binding&gt;
  </source>
  <p>The above WSDL demonstrates a simple operation that has one 
  attachment called <em>attch</em>. There must be a part called <em>attch</em> on 
  the input message for MyOperation. There may be other input parts 
  to MyOperation that are not attachments. In the binding input there 
  must either be a &lt;soap:body or a &lt;mime:multipartRelated, but not 
  both. For mime messages, the soap:body is inside a mime:part. There 
  must only be one mime:part that contains a soap:body in the binding 
  input and that must not contain a mime:content as well, since a 
  content type of text/xml is assumed for the soap:body. There can 
  be multiple attachments in a mime message, each described by a 
  mime:part. Each mime:part (that isn't a soap:body) contains a 
  mime:content that describes the attachment itself. The type field 
  inside the mime:content is not checked or used by WSIF. Instead it 
  is there to provide a hint to the application using WSIF as to what 
  the attachment is intended to contain. Multiple mime:contents inside 
  a single mime:part means that the backend service will expect a single 
  attachment with a type specified by one of the mime:contents inside 
  that mime:part. The parts="..." tag (optional) inside the soap:body 
  is assumed to contain the names of all the mime parts as well as the 
  names of all the soap parts in the message.
  </p>
  </section>
  <section><title>Passing attachments to WSIF</title>
  <p>The following code snippet could invoke the service described by the WSDL above...</p>
  <source>
  import javax.activation.DataHandler;
  . . .
  DataHandler dh = new DataHandler(new FileDataSource("axis.jpg"));
  WSIFServiceFactory factory = WSIFServiceFactory.newInstance();
  WSIFService service = factory.getService("my.wsdl",null,null,"http://mynamespace","abc");
  WSIFOperation op = service.getPort().createOperation("MyOperation");
  WSIFMessage in = op.createInputMessage();
  in.setObjectPart("attch",dh);
  op.executeInputOnlyOperation(in);
  </source>
  <p>I use tomcat with soap 2.3 as my soap server so my 
  DeploymentDescriptor.xml contains the following type mapping..</p>
  <source>
  &lt;isd:mappings&gt;
  &lt;isd:map encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  &nbsp;xmlns:x="http://mynamespace"
  &nbsp;qname="x:datahandler"
  &nbsp;javaType="javax.activation.DataHandler"
  &nbsp;java2XMLClassName="org.apache.soap.encoding.soapenc.MimePartSerializer"
  &nbsp;xml2JavaClassName="org.apache.soap.encoding.soapenc.MimePartSerializer" /&gt;
  &lt;/isd:mappings&gt;
  </source>
  <p>and my backend service gets invoked with the following signature ...</p>
  <source>
  public void MyOperation(DataHandler dh);
  </source>
  <p>Attachments can also be passed in to WSIF using stubs...</p>
  <source>
  DataHandler dh = new DataHandler(new FileDataSource("axis.jpg"));
  WSIFServiceFactory factory = WSIFServiceFactory.newInstance();
  WSIFService service = factory.getService("my.wsdl",null,null,"http://mynamespace","abc");
  MyInterface stub = (MyInterface)service.getStub(MyInterface.class);
  stub.MyOperation(dh);
  </source>
  <p>Attachments can also be returned from an operation, but at present 
  only one attachment can be returned as the return parameter.
  </p>
  </section>
  <section><title>Types and type mappings</title>
  <p>
  By default, attachments are passed into WSIF as DataHandlers. If 
  the part on the message which is the DataHandler maps to a mime:part 
  in the WSDL, then WSIF will automatically map the fully qualified 
  name of the WSDL type to DataHandler.class and set up that type mapping 
  with Axis. </p>
  <p>In your WSDL you may have defined a schema for the attachment as a binary[] 
  for instance. Whether or not you have done this, WSIF silently ignores this 
  mapping and treats the attachment as a DataHandler, unless you have 
  explicitly issued mapType(). WSIF lets axis set the mime content type based 
  on the DataHandler's type, instead of the mime:content type specified in the WSDL.
  </p>
  </section>
  <section><title>Restrictions</title>
  <p> These are not supported...</p>
  <ul>
  <li>Attachments using the Apache Soap provider</li>
  <li>Mime/Axis/Jms</li>
  <li>DIME</li>
  <li>Passing in axis AttachmentParts</li>
  <li>Passing in javax.xml.transform.Source and javax.mail.internet.MimeMultipart</li>
  <li>The mime:mimeXml WSDL tag</li>
  <li>Attachments over doc-style</li>
  <li>Nesting a mime:multipartRelated inside a mime:part</li>
  <li>Types that extend DataHandler, Image, etc</li>
  <li>Types that contain DataHandler, Image, etc</li>
  <li>Arrays or Vectors of DataHandlers, Images, etc</li>
  <li>Multiple inout or output attachments</li>
  </ul>
  </section>
          </body>
      </document>
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/xslt/html/dotdots.xsl
  
  Index: dotdots.xsl
  ===================================================================
  <?xml version="1.0" encoding="utf-8"?>
  
  <!--
  Contains the 'dotdots' template, which, given a path, will output a set of
  directory traversals to get back to the source directory. Handles both '/' and
  '\' directory separators.
  
  Examples:
    Input                           Output 
      index.html                    ""
      dir/index.html                "../"
      dir/subdir/index.html         "../../"
      dir//index.html              "../"
      dir/                          "../"
      dir//                         "../"
      \some\windows\path            "../../"
      \some\windows\path\           "../../../"
      \Program Files\mydir          "../"
  
  Cannot handle ..'s in the path, so don't expect 'dir/subdir/../index.html' to
  work.
  
  jefft@apache.org
  -->
  
  <xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
    <xsl:template name="dotdots">
      <xsl:param name="path"/>
      <xsl:variable name="dirs" select="normalize-space(translate(concat($path, 'x'), ' /\', '_  '))"/>
      <!-- The above does the following:
         o Adds a trailing character to the path. This prevents us having to deal
           with the special case of ending with '/'
         o Translates all directory separators to ' ', and normalize spaces,
  		 cunningly eliminating duplicate '//'s. We also translate any real
  		 spaces into _ to preserve them.
      -->
      <xsl:variable name="remainder" select="substring-after($dirs, ' ')"/>
      <xsl:if test="$remainder">
        <xsl:text>../</xsl:text>
        <xsl:call-template name="dotdots">
          <xsl:with-param name="path" select="translate($remainder, ' ', '/')"/>
  		<!-- Translate back to /'s because that's what the template expects. -->
        </xsl:call-template>
      </xsl:if>
    </xsl:template>
  
  <!--
    Uncomment to test.
    Usage: saxon dotdots.xsl dotdots.xsl path='/my/test/path'
  
    <xsl:param name="path"/>
    <xsl:template match="/">
      <xsl:message>Path: <xsl:value-of select="$path"/></xsl:message>
      <xsl:call-template name="dotdots">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:template>
   -->
  
  </xsl:stylesheet>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/xslt/html/pathutils.xsl
  
  Index: pathutils.xsl
  ===================================================================
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <!--
  PathUtils.xsl
  
  A set of XSLT templates useful for parsing URI paths:
  
  dirname: return the directory part of a path
  filename: return the file part of a path
  ext: return the last extension of the filename in a path
  filename-noext: return the file part of a path without its last extension
  
  @author Jeff Turner <jefft@apache.org>
  $Id: pathutils.xsl,v 1.1 2003/01/31 13:06:44 owenb Exp $
  -->
  
  <!-- Returns the directory part of a path.  Equivalent to Unix 'dirname'.
  Examples:
  '' -> ''
  'foo/index.html' -> 'foo/'
  -->
  <xsl:template name="dirname">
    <xsl:param name="path" />
    <xsl:if test="contains($path, '/')">
      <xsl:value-of select="concat(substring-before($path, '/'), '/')" />
      <xsl:call-template name="dirname">
        <xsl:with-param name="path"
          select="substring-after($path, '/')" />
      </xsl:call-template>
    </xsl:if>
  </xsl:template>
  
  
  <!-- Returns the filename part of a path.  Equivalent to Unix 'basename'
  Examples:
  'index.html'  ->  'index.html' 
  'foo/bar/'  ->  '' 
  'foo/bar/index.html'  ->  'index.html' 
  -->
  <xsl:template name="filename">
    <xsl:param name="path"/>
    <xsl:choose>
      <xsl:when test="contains($path, '/')">
        <xsl:call-template name="filename">
          <xsl:with-param name="path" select="substring-after($path, '/')"/>
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$path"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <!-- Returns the last extension of a filename in a path.
  Examples:
  'index.html'  ->  '.html' 
  'index.dtdx.html'  ->  '.html' 
  'foo/bar/'  ->  '' 
  'foo/bar/index.html'  ->  '.html' 
  'foo/bar/index'  ->  '' 
  -->
  <xsl:template name="ext">
    <xsl:param name="path"/>
    <xsl:param name="subflag"/> <!-- Outermost call? -->
    <xsl:choose>
      <xsl:when test="contains($path, '.')">
        <xsl:call-template name="ext">
          <xsl:with-param name="path" select="substring-after($path, '.')"/>
          <xsl:with-param name="subflag" select="'sub'"/>
        </xsl:call-template>
      </xsl:when>
      <!-- Handle extension-less filenames by returning '' -->
      <xsl:when test="not($subflag) and not(contains($path, '.'))">
        <xsl:text/>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="concat('.', $path)"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <!-- Returns a filename of a path stripped of its last extension.
  Examples:
  'foo/bar/index.dtdx.html' -> 'index.dtdx'
  -->
  <xsl:template name="filename-noext">
    <xsl:param name="path"/>
    <xsl:variable name="filename">
      <xsl:call-template name="filename">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:variable name="ext">
      <xsl:call-template name="ext">
        <xsl:with-param name="path" select="$filename"/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:value-of select="substring($filename, 1, string-length($filename) - string-length($ext))"/>
  </xsl:template>
  
  <!-- Returns a path with the filename stripped of its last extension.
  Examples:
  'foo/bar/index.dtdx.html' -> 'foo/bar/index.dtdx'
  -->
  <xsl:template name="path-noext">
    <xsl:param name="path"/>
    <xsl:variable name="ext">
      <xsl:call-template name="ext">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
    <xsl:value-of select="substring($path, 1, string-length($path) - string-length($ext))"/>
  </xsl:template>
  
  <!--
  Uncomment this to test.
  Usage: saxon pathutils.xsl pathutils.xsl path=foo/bar
  
  <xsl:param name="path" select="'/foo/bar/index.html'"/>
  <xsl:template match="/">
    <xsl:message>
      path= <xsl:value-of select="$path"/>
      dirname= <xsl:call-template name="dirname">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
      filename= <xsl:call-template name="filename">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
      ext= <xsl:call-template name="ext">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
      filename-noext= <xsl:call-template name="filename-noext">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
      path-noext= <xsl:call-template name="path-noext">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:message>
  </xsl:template>
  -->
  
  </xsl:stylesheet>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/xslt/html/book2menu.xsl
  
  Index: book2menu.xsl
  ===================================================================
  <?xml version="1.0"?>
  <!--
  book2menu.xsl generates the HTML menu. It outputs XML/HTML of the form:
    <div class="menu">
       ...
    </div>
  which is then merged with other HTML by site2xhtml.xsl
  
  $Id: book2menu.xsl,v 1.1 2003/01/31 13:06:44 owenb Exp $
  -->
  
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="path"/>
  
    <xsl:include href="pathutils.xsl"/>
  
    <xsl:variable name="filename-noext">
      <xsl:call-template name="filename-noext">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
  
    <xsl:variable name="path-noext">
      <xsl:call-template name="path-noext">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
  
  
    <xsl:template match="book">
      <div class="menu">
        <ul>
          <xsl:apply-templates select="menu"/>
        </ul>
      </div>
    </xsl:template>
  
    <xsl:template match="menu">
      <li>
        <font color="#CFDCED"><xsl:value-of select="@label"/></font>
        <ul>
          <xsl:apply-templates/>
        </ul>
      </li>
    </xsl:template>
  
    <xsl:template match="menu-item">
      <li>
        <xsl:variable name="href-noext">
          <xsl:call-template name="path-noext">
            <xsl:with-param name="path" select="@href"/>
          </xsl:call-template>
        </xsl:variable>
  
        <xsl:choose>
          <xsl:when test="$href-noext = $filename-noext">
            <span class="sel"><font color="#ffcc00"><xsl:value-of select="@label"/></font></span>
          </xsl:when>
          <xsl:otherwise>
            <a href="{@href}"><xsl:value-of select="@label"/></a>
          </xsl:otherwise>
        </xsl:choose>
      </li>
    </xsl:template>
    <xsl:template match="external">
      <li>
         <xsl:choose>
           <xsl:when test="starts-with(@href, $filename-noext)">
            <font color="#ffcc00"><xsl:value-of select="@label"/></font>
          </xsl:when>
          <xsl:otherwise>
            <a href="{@href}" target="_blank"><xsl:value-of select="@label"/></a>
          </xsl:otherwise>
        </xsl:choose>
      </li>
    </xsl:template>
    <xsl:template match="menu-item[@type='hidden']"/>
    <xsl:template match="external[@type='hidden']"/>
  </xsl:stylesheet>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/xslt/html/split.xsl
  
  Index: split.xsl
  ===================================================================
  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  
  <!--
   This stylesheet was taken from the XSLT FAQ http://www.dpawson.co.uk/xsl/
   
   Comments and adaption to be used without normalize-space()
    by Nicola Ken Barozzi nicolaken@apache.org
  --> 
  
  <!--
    Input:
  
  <doc>
  
  <para>
   123456 2345 343434 545454 43434 343 
   12345 343434 545454 43434 343 
   32345645 343434 545454 43434 343 
   3422222225 343434 545454 43434 343 
   llllllllllllllllllllllooooooooooooooonnnnnnnnnnnggggggggg
   345 343434 545454 43434 343 
  </para>
  
  </doc>
  
  Output:
  
  <HTML>
  <BODY>
  <PRE>123456 2345 343434 545454 
  43434 343 12345 343434 545454 
  43434 343 32345645 343434 
  545454 43434 343 3422222225 
  343434 545454 43434 343 
  lllllllllllllllllllllloooooooo
  ooooooonnnnnnnnnnnggggggggg 
  345 343434 545454 43434 
  343
  </PRE>
  </BODY>
  </HTML>
  
  Fragment ised: 
  
   <xsl:template match="/doc">
   <HTML><BODY><PRE>
      <xsl:call-template name="format">
      <xsl:with-param select="normalize-space(para)" name="txt" /> 
       <xsl:with-param name="width">30</xsl:with-param> 
       </xsl:call-template>
    </PRE></BODY></HTML>
    </xsl:template>
  
  
  -->
  
   <xsl:template match="/body">
     <body>
      <xsl:call-template name="format">
      <xsl:with-param select="source" name="txt" /> 
       <xsl:with-param name="width">40</xsl:with-param> 
       </xsl:call-template>
    </body>
    </xsl:template>
    
    <xsl:template name="format">
      <xsl:param name="txt" /> 
      <xsl:param name="width" /> 
  
      <!-- if there is still text left -->
      <xsl:if test="$txt">
      
      <xsl:variable name = "pretxt" select = "substring($txt,0, $width)" />
      
      <xsl:choose>
        <xsl:when test="contains($pretxt, '&#xA;')">
          <xsl:value-of select="substring-before($pretxt, '&#xA;')"/>
          <xsl:text>&#xA;</xsl:text> 
          <xsl:call-template name="format">
            <xsl:with-param name="txt" select="substring-after($txt,'&#xA;')"/>
            <xsl:with-param select="$width" name="width" />           
          </xsl:call-template>
        </xsl:when>
        
        <xsl:otherwise>
        <!-- get the width at which to break-->
        <xsl:variable name="real-width">
          <xsl:call-template name="tune-width">
            <xsl:with-param select="$txt" name="txt" /> 
            <xsl:with-param select="$width" name="width" /> 
            <xsl:with-param select="$width" name="def" /> 
          </xsl:call-template>
        </xsl:variable>
  
        <!-- output the first part of the broken string -->
        <xsl:value-of select="substring($txt, 1, $real-width)" /> 
  
        <!-- output a newline -->
        <xsl:text>&#xA;</xsl:text> 
  
        <!-- call itself with the remaining part of the text -->
        <xsl:call-template name="format">
         <xsl:with-param select="substring($txt,$real-width + 1)" name="txt" /> 
         <xsl:with-param select="$width" name="width" /> 
        </xsl:call-template>
        </xsl:otherwise>
        </xsl:choose>
      </xsl:if>
    </xsl:template>
    
     
    <!-- used by template "format", it calculates the width at the given def 
         
         It starts at def length and comes back till it finds a space -->
    <xsl:template name="tune-width">
      <xsl:param name="txt" /> 
      <xsl:param name="width" /> 
      <xsl:param name="def" /> 
  
      <xsl:choose>
        <xsl:when test="$width = 0">
         <xsl:value-of select="$def" /> 
        </xsl:when>
                   
        <xsl:when test="substring($txt, $width, 1 ) = ' '">
            <xsl:value-of select="$width" /> 
         </xsl:when>
         
         <xsl:otherwise>
           <!-- otherwise need to tune again, trying with $width - 1 -->
           <xsl:call-template name="tune-width">
             <xsl:with-param select="$width - 1" name="width" /> 
             <xsl:with-param select="$txt" name="txt" /> 
             <xsl:with-param select="$def" name="def" /> 
           </xsl:call-template>
         </xsl:otherwise>
       </xsl:choose>
  
    </xsl:template>
  
    </xsl:stylesheet>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/xslt/html/document2html.xsl
  
  Index: document2html.xsl
  ===================================================================
  <?xml version="1.0"?>
  <!--
  This stylesheet contains the majority of templates for converting documentv11
  to HTML.  It renders XML as HTML in this form:
  
    <div class="content">
     ...
    </div>
  
  ..which site2xhtml.xsl then combines with HTML from the index (book2menu.xsl)
  and tabs (tab2menu.xsl) to generate the final HTML.
  
  $Id: document2html.xsl,v 1.1 2003/01/31 13:06:44 owenb Exp $
  -->
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  
    <!-- If non-blank, a PDF link for this page will not be generated -->
    <xsl:param name="nopdf"/>
    <xsl:param name="isfaq"/>
    <xsl:param name="path"/>
  
    <xsl:include href="split.xsl"/>
    <xsl:include href="dotdots.xsl"/>
    <xsl:include href="pathutils.xsl"/>
  
    <!-- Path to site root, eg '../../' -->
    <xsl:variable name="root">
      <xsl:call-template name="dotdots">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
  
    <xsl:variable name="filename-noext">
      <xsl:call-template name="filename-noext">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
   
    <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
  
    <xsl:template match="document">
    <!--
      <xsl:message>
       ##  path = <xsl:value-of select="$path"/>
       ##  root = <xsl:value-of select="$root"/>
       ##  nopdf = '<xsl:value-of select="$nopdf"/>'
      </xsl:message>
    -->
      <div class="content">
        <xsl:if test="normalize-space(header/title)!=''">
          <table class="title">
            <tr> 
              <td valign="middle"> 
                <h1>
                  <xsl:value-of select="header/title"/>
                </h1>
              </td>
              <!--td align="center" width="80" nowrap><a href="" class="dida"><img src="images/singlepage.gif"><br>
                single page<br>
                version</a></td-->
              <xsl:if test="$nopdf = ''"> <!-- nopdf flag unset -->
                <td align="center" width="80" nowrap="nowrap"><a href="{$filename-noext}.pdf" class="dida">
                <img border="0" src="{$skin-img-dir}/printer.gif"/><br/>
                  print-friendly<br/>
                  version</a>
                </td>
              </xsl:if>
            </tr>
          </table>
        </xsl:if>
        <xsl:if test="normalize-space(header/subtitle)!=''">
          <h3>
            <xsl:value-of select="header/subtitle"/>
          </h3>
        </xsl:if>
        <xsl:if test="header/authors">
          <p>
            <font size="-2">
              <xsl:for-each select="header/authors/person">
                <xsl:choose>
                  <xsl:when test="position()=1">by&#160;</xsl:when>
                  <xsl:otherwise>,&#160;</xsl:otherwise>
                </xsl:choose>
                <xsl:value-of select="@name"/>
              </xsl:for-each>
            </font>
          </p>
        </xsl:if>
        <xsl:apply-templates select="body"/>
      </div>
    </xsl:template>
  
    <xsl:template match="body">
      <xsl:if test="section and not($isfaq='true')">
        <ul class="minitoc">
          <xsl:for-each select="section">
            <li>
              <a href="#{generate-id()}">
                <xsl:value-of select="title"/>
              </a>
              <xsl:if test="section">
                <ul class="minitoc">
                  <xsl:for-each select="section">
                    <li>
                      <a href="#{generate-id()}">
                        <xsl:value-of select="title"/>
                      </a>
                    </li>
                  </xsl:for-each>
                </ul>
              </xsl:if>
            </li>
          </xsl:for-each>
        </ul>
      </xsl:if>
      <xsl:apply-templates/>
    </xsl:template>
  
    <!--  section handling
    - <a name/> anchors are added if the id attribute is specified
    - generated anchors are still included for TOC - what should we do about this?
    - FIXME: provide a generic facility to process section irrelevant to their
      nesting depth
  -->
  
    <xsl:template match="@id">
      <xsl:if test="normalize-space(.)!=''">
        <a>
          <xsl:attribute name="name">
            <xsl:value-of select="."/>
          </xsl:attribute>
        </a>
      </xsl:if>
    </xsl:template>
  
    <xsl:template match="section">
      <a name="{generate-id()}"/>
      <xsl:apply-templates select="@id"/>
      <h3>
        <xsl:value-of select="title"/>
      </h3>
      <xsl:apply-templates select="*[not(self::title)]"/>
    </xsl:template>
  
    <xsl:template match="section/section">
      <a name="{generate-id()}"/>
      <xsl:apply-templates select="@id"/>
      <h4>
        <xsl:value-of select="title"/>
      </h4>
      <xsl:apply-templates select="*[not(self::title)]"/>
    </xsl:template>
  
    <xsl:template match="note | warning | fixme">
      <xsl:apply-templates select="@id"/>
      <div class="frame {local-name()}">
        <div class="label">
          <xsl:choose>
            <xsl:when test="local-name() = 'note'">Note</xsl:when>
            <xsl:when test="local-name() = 'warning'">Warning</xsl:when>
            <xsl:otherwise>Fixme (
                 <xsl:value-of select="@author"/>
  
                 )</xsl:otherwise>
          </xsl:choose>
        </div>
        <div class="content">
          <xsl:apply-templates/>
        </div>
      </div>
    </xsl:template>
  
    <xsl:template match="link">
      <xsl:apply-templates select="@id"/>
      <a href="{@href}">
        <xsl:apply-templates/>
      </a>
    </xsl:template>
  
    <xsl:template match="jump">
      <xsl:apply-templates select="@id"/>
      <a href="{@href}" target="_top">
        <xsl:apply-templates/>
      </a>
    </xsl:template>
  
    <xsl:template match="fork">
      <xsl:apply-templates select="@id"/>
      <a href="{@href}" target="_blank">
        <xsl:apply-templates/>
      </a>
    </xsl:template>
  
    <xsl:template match="p[@xml:space='preserve']">
      <xsl:apply-templates select="@id"/>
      <div class="pre">
        <xsl:apply-templates/>
      </div>
    </xsl:template>
  
    <xsl:template match="source">
      <xsl:apply-templates select="@id"/>
      <pre class="code">
  <!-- Temporarily removed long-line-splitter ... gives out-of-memory problems -->
        <xsl:apply-templates/>
  <!--
      <xsl:call-template name="format">
      <xsl:with-param select="." name="txt" /> 
       <xsl:with-param name="width">80</xsl:with-param> 
       </xsl:call-template>
  -->
      </pre>
    </xsl:template>
  
    <xsl:template match="anchor">
      <a name="{@id}"/>
    </xsl:template>
  
    <xsl:template match="icon">
      <xsl:apply-templates select="@id"/>
      <img src="{@src}" alt="{@alt}">
        <xsl:if test="@height">
          <xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute>
        </xsl:if>
        <xsl:if test="@width">
          <xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute>
        </xsl:if>
      </img>
    </xsl:template>
  
    <xsl:template match="code">
      <xsl:apply-templates select="@id"/>
      <span class="codefrag"><xsl:value-of select="."/></span>
    </xsl:template>
  
    <xsl:template match="figure">
      <xsl:apply-templates select="@id"/>
      <div align="center">
        <img src="{@src}" alt="{@alt}" class="figure">
          <xsl:if test="@height">
            <xsl:attribute name="height"><xsl:value-of select="@height"/></xsl:attribute>
          </xsl:if>
          <xsl:if test="@width">
            <xsl:attribute name="width"><xsl:value-of select="@width"/></xsl:attribute>
          </xsl:if>
        </img>
      </div>
    </xsl:template>
  
    <xsl:template match="table">
      <xsl:apply-templates select="@id"/>
      <table cellpadding="4" cellspacing="1" class="ForrestTable">
        <xsl:if test="@cellspacing"><xsl:attribute name="cellspacing"><xsl:value-of select="@cellspacing"/></xsl:attribute></xsl:if>
        <xsl:if test="@cellpadding"><xsl:attribute name="cellpadding"><xsl:value-of select="@cellpadding"/></xsl:attribute></xsl:if>
        <xsl:if test="@border"><xsl:attribute name="border"><xsl:value-of select="@border"/></xsl:attribute></xsl:if>
        <xsl:if test="@class"><xsl:attribute name="class"><xsl:value-of select="@class"/></xsl:attribute></xsl:if>
        <xsl:if test="@bgcolor"><xsl:attribute name="bgcolor"><xsl:value-of select="@bgcolor"/></xsl:attribute></xsl:if>
        <xsl:apply-templates/>
      </table>
    </xsl:template>
  
    <xsl:template match="node()|@*" priority="-1">
      <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates/>
      </xsl:copy>
    </xsl:template>
  </xsl:stylesheet>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/xslt/html/site2xhtml.xsl
  
  Index: site2xhtml.xsl
  ===================================================================
  <?xml version="1.0"?>
  <!--
  site2xhtml.xsl is the final stage in HTML page production.  It merges HTML from
  document2html.xsl, tab2menu.xsl and book2menu.xsl, and adds the site header,
  footer, searchbar, css etc.  As input, it takes XML of the form:
  
  <site>
    <div class="menu">
      ...
    </div>
    <div class="tab">
      ...
    </div>
    <div class="content">
      ...
    </div>
  </site>
  
  $Id: site2xhtml.xsl,v 1.1 2003/01/31 13:06:44 owenb Exp $
  -->
  
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <!-- Default skinconf.xml in the skins/ directory -->
    <xsl:param name="config-file" select="'../../../../skinconf.xml'"/>
    <xsl:variable name="config" select="document($config-file)/skinconfig"/>
    <xsl:param name="path"/>
    <xsl:include href="dotdots.xsl"/>
    <xsl:include href="pathutils.xsl"/>
  
    <xsl:variable name="root">
      <xsl:call-template name="dotdots">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
   
    <xsl:variable name="filename">
      <xsl:call-template name="filename">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
    
    <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
    <xsl:variable name="spacer" select="concat($root, 'skin/images/spacer.gif')"/>
   
    <xsl:template match="site">
      <html>
        <head>
          <title><xsl:value-of select="div[@class='content']/table/tr/td/h1"/></title>
          <link rel="stylesheet" href="{$root}skin/page.css" type="text/css"/>
        </head>
        <body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
        <!-- =========================== top line with navigation path ========================== -->
      <table cellspacing="0" cellpadding="0" border="0" width="100%" summary="navigation path">
        <tr>
          <td height="20" bgcolor="#CFDCED" valign="middle" nowrap="nowrap">
            <img src="{$spacer}" border="0" alt="" width="5" height="1" />
            <!-- breadcrumb trail (javascript-generated) -->
            <font face="Arial, Helvetica, Sans-serif" size="2">
                <script type="text/javascript" language="JavaScript" src="{$root}skin/breadcrumbs.js"></script>
            </font>
          </td>
        </tr>
        <tr>
          <td height="2" bgcolor="#4C6C8F"><img src="{$spacer}" border="0" alt="" width="2" height="2" /></td>
        </tr>
      </table>
      <!-- ================================= top bar with logo's and search box ===================================  -->
          <table cellspacing="0" cellpadding="0" border="0" width="100%" summary="header with logos">
        <tr>
          <td bgcolor="#294563">
          <xsl:if test="$config/group-url"><a href="{$config/group-url}"><img src="{$root}{$config/group-logo}" alt="{$config/group-name} logo" border="0"/></a></xsl:if></td>
          <td bgcolor="#294563" align="center" width="100%"><a href="{$config/project-url}"><img src="{$root}{$config/project-logo}" border="0" alt="{$config/project-name} site" /></a></td>
          <td bgcolor="#294563" rowspan="2" valign="top">
            <xsl:if test="not($config/disable-search) or $config/disable-search='false' and $config/searchsite-domain and $config/searchsite-name">
            <form method="get" action="http://www.google.com/search" onsubmit="q.value = query.value + ' site:{$config/searchsite-domain}'" target="_blank">
              <table bgcolor="#4C6C8F" cellpadding="0" cellspacing="0" border="0" summary="search">
                <tr>
                  <td colspan="3"><img src="{$spacer}" alt="" width="1" height="10" /></td>
                </tr>
                <tr>
                  <td><img src="{$spacer}" alt="" width="1" height="1" /></td>
                  <td nowrap="nowrap">
                    <input type="hidden" name="q"/>
                    <input type="text" id="query" size="15"/><img src="{$spacer}" alt="" width="5" height="1" /><input type="submit" value="Search" name="Search"/>
                    <br />
                    <font color="white" size="2" face="Arial, Helvetica, Sans-serif">
                    the <xsl:value-of select="$config/searchsite-name"/> site
  <!-- setting search options off for the moment -->
  <!--
                      <input type="radio" name="web" value="web"/>web site&#160;&#160;<input type="radio" name="mail" value="mail"/>mail lists
  -->
                    </font>
                  </td>
                  <td><img src="{$spacer}" alt="" width="1" height="1" /></td>
                </tr>
                <tr>
                  <td><img src="{$skin-img-dir}/search-left.gif" width="9" height="10" border="0" alt="" /></td>
                  <td><img src="{$spacer}" alt="" width="1" height="1" /></td>
                  <td><img src="{$skin-img-dir}/search-right.gif" width="9" height="10" border="0" alt="" /></td>
                </tr>
              </table>
            </form>
            </xsl:if>
          </td>
          <td bgcolor="#294563"><img src="{$spacer}" alt="" width="10" height="10" /></td>
        </tr>
        <tr>
          <td colspan="2" bgcolor="#294563" valign="bottom">
              <xsl:apply-templates select="div[@class='tab']"/>
          </td>
          <td bgcolor="#294563"><img src="{$spacer}" height="1" width="1" alt="" /></td>
        </tr>
        <tr>
          <td colspan="4" bgcolor="#4C6C8F"><img src="{$spacer}" alt="" height="10" width="1" /></td>
        </tr>
      </table>
      <!-- ======================================  Menu and Content table ====================================== -->
      <table cellspacing="0" cellpadding="0" border="0" width="100%" bgcolor="#ffffff" summary="page content">
        <tr>
          <td valign="top">
            <table cellpadding="0" cellspacing="0" border="0" summary="menu">
              <tr>
                <td valign="top" rowspan="3">
                  <table cellspacing="0" cellpadding="0" border="0" summary="blue line">
                    <tr><td bgcolor="#294563"><img src="{$spacer}" alt="" height="1" width="10" /></td></tr>
                    <tr><td bgcolor="#CFDCED"><font face="Arial, Helvetica, Sans-serif" size="4" color="#4C6C8F">&#160;</font></td></tr>
                    <tr><td bgcolor="#294563"><img src="{$spacer}" alt="" height="1" width="10" /></td></tr>
                  </table>
                </td>
                <td bgcolor="#294563"><img src="{$spacer}" alt="" height="1" width="1" /></td>
                <td bgcolor="#4C6C8F" valign="bottom"><img src="{$spacer}" alt="" height="10" width="10" /></td>
                <td bgcolor="#4C6C8F" valign="top" nowrap="nowrap">
                    <xsl:apply-templates select="div[@class='menu']"/>
                </td>
                <td bgcolor="#4C6C8F" valign="bottom"><img src="{$spacer}" alt="" height="10" width="10" /></td>
                <td bgcolor="#294563"><img src="{$spacer}" alt="" height="1" width="1" /></td>
              </tr>
              <tr>
                <td bgcolor="#4C6C8F" rowspan="2" colspan="2" align="left" valign="bottom"><img src="{$skin-img-dir}/menu-left.gif" alt="" border="0" width="10" height="10" /></td>
                <td bgcolor="#4C6C8F"><img src="{$spacer}" alt="" border="0" width="10" height="10" /></td>
                <td bgcolor="#4C6C8F" rowspan="2" colspan="2" align="right" valign="bottom"><img src="{$skin-img-dir}/menu-right.gif" alt="" border="0" width="10" height="10" /></td>
              </tr>
              <tr>
                <td bgcolor="#294563" height="1"><img src="{$spacer}" alt="" height="1" width="1" /></td>
              </tr>
            </table>
          </td>
          <td width="100%" valign="top">
            <table cellspacing="0" cellpadding="0" border="0" width="100%" summary="content">
              <tr><td bgcolor="#294563" colspan="4"><img src="{$spacer}" alt="" height="1" width="10" /></td></tr>
              <tr>
                <td bgcolor="#CFDCED" width="10" align="left"><img src="{$spacer}" alt="" height="1" width="10" /></td>
                <td bgcolor="#CFDCED" width="50%" align="left">
  <!-- ========================================= Page number ===================================== -->
                  <font face="Arial, Helvetica, Sans-serif" size="3" color="#4C6C8F">
                  &#160;
  <!--
                    <b>Page 1 of 5</b>
  -->
                  </font>
                    <img src="{$spacer}" alt="" height="8" width="10" />
                </td>
                <td bgcolor="#CFDCED" width="50%" align="right">
  <!--  ====================================== page navigation ===================================== -->
                  <font face="Arial, Helvetica, Sans-serif" size="3" color="#4C6C8F">
                  &#160;
  <!--
                    <b>&#171; prev&#160;&#160;<font size="4">[3]</font>&#160;&#160;next &#187;</b>
  -->
                  </font>
                    <img src="{$spacer}" alt="" height="8" width="10" />
                </td>
                <td bgcolor="#CFDCED" width="10"><img src="{$spacer}" alt="" height="1" width="10" /></td>
              </tr>
              <tr><td bgcolor="#294563" colspan="4"><img src="{$spacer}" alt="" height="1" width="10" /></td></tr>
              <tr>
                <td width="10" align="left"><img src="{$spacer}" alt="" height="1" width="10" /></td>
                <td width="100%" align="left">
                  <xsl:apply-templates select="div[@class='content']"/>
                </td>
                <td width="10"><img src="{$spacer}" alt="" height="1" width="10" /></td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
  <!-- footer -->
      <table border="0" height="20" width="100%" cellpadding="0" cellspacing="0" summary="footer">
        <tr><td bgcolor="#4C6C8F" height="1" colspan="2"><img src="{$spacer}" alt="" width="1" height="1" /><a href="{$skin-img-dir}/label.gif"></a><a href="{$skin-img-dir}/page.gif"></a><a href="{$skin-img-dir}/chapter.gif"></a><a href="{$skin-img-dir}/chapter_open.gif"></a><a href="{$skin-img-dir}/current.gif"></a><a href="/favicon.ico"></a></td></tr>
        <tr>
          <td align="center" class="copyright" bgcolor="#CFDCED" colspan="2">
            <font face="Arial, Helvetica, Sans-Serif" size="2">Copyright &#169;
            <xsl:value-of select="$config/year"/>&#160;<xsl:value-of
            select="$config/vendor"/> All rights reserved.<script language="JavaScript" type="text/javascript"><![CDATA[<!--
                document.write(" - "+"Last Published: " + document.lastModified);
              //  -->]]></script></font>
          </td>
        </tr>
        <tr>
        <td class="logos" bgcolor="#CFDCED" align="left">
          <xsl:if test="$config/host-logo and not($config/host-logo = '')">
              <a href="{$config/host-url}"><img src="{$config/host-logo}" alt="{$config/host-name} logo" border="0"/></a>
          </xsl:if>
        </td>
        <td class="logos" bgcolor="#CFDCED" align="right">
          <xsl:if test="$filename = 'index.html' and $config/credits">
            <div align="right">
            <xsl:for-each select="$config/credits/credit">
              <xsl:variable name="name" select="name"/>
              <xsl:variable name="url" select="url"/>
              <xsl:variable name="image" select="image"/>
              <xsl:variable name="width" select="width"/>
              <xsl:variable name="height" select="height"/>
              <a href="{$url}" valign="top">
              <img alt="{$name} logo" border="0">
                <xsl:attribute name="src">
                  <xsl:if test="not(starts-with($image, 'http://'))"><xsl:value-of select="$root"/></xsl:if>
                  <xsl:value-of select="$image"/>
                </xsl:attribute>
                <xsl:if test="$width"><xsl:attribute name="width"><xsl:value-of select="$width"/></xsl:attribute></xsl:if>
                <xsl:if test="$height"><xsl:attribute name="height"><xsl:value-of select="$height"/></xsl:attribute></xsl:if>
              </img>
              <img src="{$spacer}" border="0" alt="" width="5" height="1" />
              </a>
            </xsl:for-each>
              </div>
          </xsl:if>
          </td>
        </tr>
      </table>
        </body>
      </html>
      </xsl:template>
      <xsl:template match="node()|@*" priority="-1">
        <xsl:copy>
          <xsl:apply-templates select="@*"/>
          <xsl:apply-templates/>
        </xsl:copy>
    </xsl:template>
  </xsl:stylesheet>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/xslt/html/tab2menu.xsl
  
  Index: tab2menu.xsl
  ===================================================================
  <?xml version="1.0"?>
  <!--
  This stylesheet generates 'tabs' at the top left of the Forrest skin.  Tabs are
  visual indicators that a certain subsection of the URI space is being browsed.
  For example, if we had tabs with paths:
  
  Tab1:  ''
  Tab2:  'community'
  Tab3:  'community/howto'
  Tab4:  'community/howto/xmlform/index.html'
  
  Then if the current path was 'community/howto/foo', Tab3 would be highlighted.
  The rule is: the tab with the longest path that forms a prefix of the current
  path is enabled.
  
  The output of this stylesheet is HTML of the form:
      <div class="tab">
        ...
      </div>
  
  which is then merged by site2xhtml.xsl
  
  $Id: tab2menu.xsl,v 1.1 2003/01/31 13:06:44 owenb Exp $
  -->
  
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="path"/>
    <xsl:param name="dir_index" select="'index.html'"/>
    <xsl:include href="dotdots.xsl"/>
    <xsl:include href="pathutils.xsl"/>
  
    <!-- NOTE: Xalan has a bug (race condition?) where sometimes $root is only half-evaluated -->
    <xsl:variable name="root">
      <xsl:call-template name="dotdots">
        <xsl:with-param name="path" select="$path"/>
      </xsl:call-template>
    </xsl:variable>
  
    <xsl:variable name="skin-img-dir" select="concat(string($root), 'skin/images')"/>
  
    <xsl:template name="spacer">
      <td width="8">
        <img src="{$root}skin/images/spacer.gif" width="8" height="8" alt=""/>
      </td>
    </xsl:template>
  
    <!--
      The longest path of any tab, whose path is a subset of the current URL.  Ie,
      the path of the 'current' tab.
    -->
    <xsl:variable name="longest-dir">
      <xsl:for-each select="/tabs/tab[starts-with($path, @dir|@href)]">
        <xsl:sort select="string-length(@dir|@href)"
                  data-type="number" order="descending"/>
        <xsl:if test="position()=1">
          <xsl:value-of select="@dir|@href"/>
        </xsl:if>
      </xsl:for-each>
    </xsl:variable>
  
  
    <xsl:template match="tabs">
      <div class="tab">
        <table cellspacing="0" cellpadding="0" border="0" summary="tab bar">
          <tr>
            <xsl:apply-templates/>
          </tr>
        </table>
      </div>
    </xsl:template>
  
    <xsl:template match="tab">
      <xsl:call-template name="spacer"/>
      <xsl:choose>
        <xsl:when test="@dir = $longest-dir or @href = $longest-dir">
          <xsl:call-template name="selected"/>
        </xsl:when>
        <xsl:otherwise>
          <xsl:call-template name="not-selected"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  
    <xsl:template name="not-selected">
      <td valign="bottom">
        <table cellspacing="0" cellpadding="0" border="0" height="25" summary="non selected tab">
          <tr>
            <td bgcolor="#B2C4E0" width="5" valign="top"><img src="{$skin-img-dir}/tab-left.gif" alt="" width="5" height="5" /></td>
            <td bgcolor="#B2C4E0" valign="middle">
              <a>
                <xsl:attribute name="href">
                  <xsl:if test="starts-with(@href, 'http')">  <!-- Absolute URL -->
                    <xsl:value-of select="@href"/>
                  </xsl:if>
                  <xsl:if test="not(starts-with(@href, 'http'))">  <!-- Root-relative path -->
                    <xsl:variable name="backpath">
                      <xsl:call-template name="dotdots">
                        <xsl:with-param name="path" select="$path"/>
                      </xsl:call-template>
                      <xsl:text>/</xsl:text>
                      <xsl:value-of select="@dir|@href"/>
                      <!-- If we obviously have a directory, add /index.html -->
                      <xsl:if test="@dir or substring(@href, string-length(@href),
                        string-length(@href)) = '/'">
                        <xsl:text>/</xsl:text>
                        <xsl:value-of select="$dir_index"/>
                      </xsl:if>
                    </xsl:variable>
  
                    <xsl:value-of
                      select="translate(normalize-space(translate($backpath, ' /', '/ ')), ' /', '/ ')"/>
                    <!-- Link to backpath, normalizing slashes -->
                  </xsl:if>
                </xsl:attribute>
                <font face="Arial, Helvetica, Sans-serif" size="2"><xsl:value-of select="@label"/></font>
              </a>
            </td>
            <td bgcolor="#B2C4E0" width="5" valign="top"><img src="{$skin-img-dir}/tab-right.gif" alt="" width="5" height="5" />
            </td>
          </tr>
        </table>
      </td>
    </xsl:template>
  
    <xsl:template name="selected">
      <td valign="bottom">
        <table cellspacing="0" cellpadding="0" border="0" height="30" summary="selected tab">
          <tr>
            <td bgcolor="#4C6C8F" width="5" valign="top"><img src="{$skin-img-dir}/tabSel-left.gif" alt="" width="5" height="5" /></td>
            <td bgcolor="#4C6C8F" valign="middle">
              <font face="Arial, Helvetica, Sans-serif" size="2" color="#ffffff"><b><xsl:value-of select="@label"/></b></font>
            </td>
            <td bgcolor="#4C6C8F" width="5" valign="top"><img src="{$skin-img-dir}/tabSel-right.gif" alt="" width="5" height="5" /></td>
          </tr>
        </table>
      </td>
    </xsl:template>
  
  </xsl:stylesheet>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/wsif_j2.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/wsif.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/WSDLJ2EE.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/TextJ2C.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/wsif_j1.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/group-logo.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/project-logo.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/WSDLConn.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/icon.png
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/resources/images/WSIFForm.gif
  
  	<<Binary file>>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skinconf.xml
  
  Index: skinconf.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!--
  Skin configuration file. This file contains details of your project, which will
  be used to configure the chosen Forrest skin.
  -->
  
  <!DOCTYPE skinconfig [
  
    <!ENTITY % links.att 'name CDATA #REQUIRED'>
    <!ENTITY % link.att 'name CDATA #REQUIRED href CDATA #REQUIRED'>
    <!ELEMENT skinconfig (disable-search?, searchsite-domain?, searchsite-name?, project-name, project-url, project-logo, group-name?, group-url?, group-logo?, host-url?, host-logo?, year?, vendor?, trail?, credits?)*>
    <!ELEMENT credits (credit*)>
    <!ELEMENT credit (name, url, image, width?, height?)>
    <!ELEMENT disable-search (#PCDATA)>
    <!ELEMENT searchsite-domain (#PCDATA)>
    <!ELEMENT searchsite-name (#PCDATA)>  
    <!ELEMENT project-name (#PCDATA)>
    <!ELEMENT project-url (#PCDATA)>
    <!ELEMENT project-logo (#PCDATA)>
    <!ELEMENT group-name (#PCDATA)>
    <!ELEMENT group-url (#PCDATA)>
    <!ELEMENT group-logo (#PCDATA)>
    <!ELEMENT host-url (#PCDATA)>
    <!ELEMENT host-logo (#PCDATA)>
    <!ELEMENT year (#PCDATA)>
    <!ELEMENT vendor (#PCDATA)>
    <!ELEMENT trail (link1, link2, link3)>
    <!ELEMENT link1 EMPTY>
    <!-- Seems we can't use param entity refs until this is DTDified -->
    <!ATTLIST link1 name CDATA #REQUIRED href CDATA #IMPLIED>
    <!ELEMENT link2 EMPTY>
    <!ATTLIST link2 name CDATA #REQUIRED href CDATA #IMPLIED>
    <!ELEMENT link3 EMPTY>
    <!ATTLIST link3 name CDATA #REQUIRED href CDATA #IMPLIED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT url (#PCDATA)>
    <!ELEMENT image (#PCDATA)>
    <!ELEMENT width (#PCDATA)>
    <!ELEMENT height (#PCDATA)>
    ]>
  
  <skinconfig>
    <!-- Do we want to disable the Google search box? -->
    <disable-search>false</disable-search>
    <searchsite-domain>xml.apache.org/axis/wsif</searchsite-domain>
    <searchsite-name>WSIF</searchsite-name>  
  
    <!-- mandatory project logo
         skin: forrest-site renders it at the top -->
    <project-name>WSIF</project-name>
    <project-url>http://xml.apache.org/axis/wsif</project-url>
    <project-logo>images/wsif.gif</project-logo>
  
    <!-- optional group logo
         skin: forrest-site renders it at the top-left corner -->
    <group-name>WS Apache</group-name>
    <group-url>http://ws.apache.org</group-url>
    <group-logo>images/group-logo.gif</group-logo>
  
    <!-- optional host logo (e.g. sourceforge logo)
         skin: forrest-site renders it at the bottom-left corner -->
    <host-url></host-url>
    <host-logo></host-logo>
  
    <!-- The following are used to construct a copyright statement -->
    <year>2002</year>
    <vendor>The Apache Software Foundation.</vendor>
  
    <!-- Some skins use this to form a 'breadcrumb trail' of links. If you don't
    want these, set the attributes to blank. The DTD purposefully requires them.
    -->
    <trail>
      <link1 name="Apache" href="http://www.apache.org/"/>
      <link2 name="WS.Apache" href="http://ws.apache.org/"/>
      <link3 name="WSIF" href="http://ws.apache.org/wsif"/>
    </trail>
  
    <!-- Credits are typically rendered as a set of small clickable images in the
    page footer -->
    <credits>
      <credit>
        <name>Built with Apache Forrest</name>
        <url>http://xml.apache.org/forrest/</url>
        <image>images/built-with-forrest-button.png</image>
        <width>88</width>
        <height>31</height>
      </credit>
    </credits>
  </skinconfig>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
  
  <!-- =========================== Components ================================ -->
  
   <map:components>
  
    <map:generators default="file">
     <map:generator  name="file"        src="org.apache.cocoon.generation.FileGenerator" label="content"/>
     <map:generator  name="directory"   src="org.apache.cocoon.generation.DirectoryGenerator" label="content"/>
     <map:generator  name="html"        src="org.apache.cocoon.generation.HTMLGenerator" label="content"/>
     <map:generator  name="libre"       src="org.apache.forrest.yer.use.cocoon.HierarchyGenerator" label="content"/>
     <map:generator  name="nekodtd"     src="org.apache.forrest.components.generator.XNIConfigurableFileGenerator" label="content"/>
     <!-- FIXME: Change this once better view handling is implemented -->
     <map:generator  name="file-nolabel" src="org.apache.cocoon.generation.FileGenerator"/>
    </map:generators>
  
    <map:transformers default="xslt">
    <!--
     <map:transformer     name="xslt"      src="org.apache.cocoon.transformation.TraxTransformer">
      <use-request-parameters>false</use-request-parameters>
      <use-browser-capabilities-db>false</use-browser-capabilities-db>
     </map:transformer>
    -->
      <map:transformer name="xslt" src="org.apache.cocoon.transformation.TraxTransformer"
                          logger="sitemap.transformer.xsltc"
                          pool-max="32" pool-min="8" pool-grow="2">
        <use-request-parameters>false</use-request-parameters>
        <use-browser-capabilities-db>false</use-browser-capabilities-db>
        <use-deli>false</use-deli>
        <!-- transformer-factory>com.icl.saxon.TransformerFactoryImpl</transformer-factory -->
        <!-- transformer-factory>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</transformer-factory -->
      </map:transformer>
    </map:transformers>
        
    <map:readers default="resource">
     <map:reader name="resource"       src="org.apache.cocoon.reading.ResourceReader"/>
    </map:readers>
  
    <map:serializers default="html">
     <map:serializer name="html"   mime-type="text/html"        src="org.apache.cocoon.serialization.HTMLSerializer">
      <doctype-public>-//W3C//DTD HTML 4.01 Transitional//EN</doctype-public>
       <encoding>ISO-8859-1</encoding>
     </map:serializer>
  
     <map:serializer name="xml"    mime-type="text/xml"         src="org.apache.cocoon.serialization.XMLSerializer">
       <encoding>ISO-8859-1</encoding>
     </map:serializer>
  
     <map:serializer name="fo2pdf"
                  src="org.apache.cocoon.serialization.FOPSerializer"
                  mime-type="application/pdf"/>
  
  
     <map:serializer name="links"                               src="org.apache.cocoon.serialization.LinkSerializer">
       <encoding>ISO-8859-1</encoding>
     </map:serializer>
     <map:serializer name="svg2jpeg" mime-type="image/jpeg"     src="org.apache.cocoon.serialization.SVGSerializer">
         <parameter name="quality" type="float" value="1.0"/>
     </map:serializer>
     <map:serializer name="svg2png" mime-type="image/png"       src="org.apache.cocoon.serialization.SVGSerializer"/>
    </map:serializers>
  
    <map:matchers default="wildcard">
     <map:matcher name="wildcard" src="org.apache.cocoon.matching.WildcardURIMatcher"/>
    </map:matchers>
  <!--
    <map:selectors default="skin-parameter">
      <map:selector name="request-parameter" logger="sitemap.selector.request-parameter"
                   src="org.apache.cocoon.selection.RequestParameterSelector">
        <parameter-name>skin</parameter-name>
      </map:selector>
      <map:selector name="style-parameter" logger="sitemap.selector.request-parameter"
                   src="org.apache.cocoon.selection.RequestParameterSelector">
        <parameter-name>style</parameter-name>
      </map:selector>
  
    </map:selectors>
  -->
    <map:actions>
     <!-- <map:action logger="sitemap.action.request" name="request" src="org.apache.cocoon.acting.RequestParamAction"/> -->
      <map:action logger="sitemap.action.resource-exists" name="resource-exists" src="org.apache.cocoon.acting.ResourceExistsAction"/>
    </map:actions>
  
    <!--
       The different pipeline implementations
    -->
    <map:pipelines default="caching">
       <map:pipeline name="caching" src="org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline"/>
       <map:pipeline name="noncaching" src="org.apache.cocoon.components.pipeline.impl.NonCachingProcessingPipeline"/>
       <!-- The following two can be used for profiling:
       <map:pipeline name="profile-caching" src="org.apache.cocoon.components.profiler.ProfilingCachingProcessingPipeline"/>
       <map:pipeline name="profile-noncaching" src="org.apache.cocoon.components.profiler.ProfilingNonCachingProcessingPipeline"/>
       -->
    </map:pipelines>
    
   </map:components>
  
  <!-- =========================== Views =================================== -->
  
   <map:views>
    <map:view name="content" from-label="content">
     <map:serialize type="xml"/>
    </map:view>
  
    <map:view name="links" from-position="last">
     <map:transform src="library/xslt/filterlinks.xsl"/>
     <map:serialize type="links"/>
    </map:view>
   </map:views>
  
   <map:resources>
    <map:resource name="skinit">
     <map:transform src="skins/{defaults:skin}/xslt/html/{type}.xsl">
       <map:parameter name="isfaq" value="{isfaq}"/>
       <map:parameter name="nopdf" value="{nopdf}"/>
       <map:parameter name="path" value="{path}"/>
       <!-- Can set an alternative project skinconfig here 
       <map:parameter name="config-file" value="../../../../skinconf.xml"/>
       -->
     </map:transform>
     <map:serialize/>
    </map:resource>
  
    <map:resource name="book">
      <map:generate src="content/xdocs/{../1}book.xml"/>
      <map:call resource="skinit">
        <map:parameter name="type" value="book2menu"/>
        <map:parameter name="path" value="{path}"/>
      </map:call>
    </map:resource>
  
    <map:resource name="skin-read">
      <map:read src="skins/{defaults:skin}/{path}" mime-type="{mime-type}"/>
    </map:resource>
  
   </map:resources>
  
  <!-- =========================== Pipelines ================================= -->
  
   <map:pipelines>
    
    <!-- Pipeline that manages the internal URI space
         For the external URI space manager, see the next pipeline. -->
    <map:pipeline internal-only="true">
  
    <map:match pattern="**tab-**.xml">
      <map:generate src="content/xdocs/tabs.xml"/>
      <map:call resource="skinit">
       <map:parameter name="type" value="tab2menu"/>
       <map:parameter name="path" value="{2}"/>
      </map:call>
    </map:match>
  
    <map:match pattern="**book-**/*.xml">
      <map:call resource="book">
       <map:parameter name="path" value="{2}/{3}.xml"/>
      </map:call>
    </map:match>
  
    <map:match pattern="**book-**.xml">
      <map:call resource="book">
        <map:parameter name="path" value="{2}.xml"/>
      </map:call>
    </map:match>
  
    <map:match pattern="body-todo.xml">
       <map:generate type="file-nolabel" src="status.xml"/>
       <map:transform src="content/todo2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="/todo.xml"/>
       </map:call>
     </map:match>
  
     <map:match pattern="body-changes.xml">
       <map:generate type="file-nolabel" src="status.xml"/>
       <map:transform src="content/changes2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="/changes.xml"/>
       </map:call>
     </map:match>
  
     <map:match pattern="body-**/faq.xml">
       <map:generate type="file-nolabel" src="content/xdocs/{1}/faq.xml"/>
       <map:transform src="library/xslt/faq2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="{1}/faq.xml"/>
        <map:parameter name="isfaq" value="true"/>
  
       </map:call>
     </map:match>
  
     <map:match pattern="body-faq.xml">
       <map:generate type="file-nolabel" src="content/xdocs/faq.xml"/>
       <map:transform src="library/xslt/faq2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="faq.xml"/>
        <map:parameter name="isfaq" value="true"/>
  
       </map:call>
     </map:match>
  
  
     <!-- Redirect requests for community/ (eg in the trail) to the home page -->
     <map:match pattern="community/index.html">
       <map:redirect-to uri="../index.html"/>
     </map:match>
  
     <!-- index pages for contribution categories -->
     <map:match pattern="body-community/*/index.xml">
       <map:generate src="content/xdocs/community/{1}/index.xml"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="community/{1}/index"/>
       </map:call>
     </map:match>
  
     <!-- no special transformation, yet, for revision pages -->
     <map:match pattern="body-community**revision-*.xml">
       <map:generate src="content/xdocs/community{1}revision-{2}.xml"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="community/{1}/revision-{2}"/>
       </map:call>
     </map:match>
  
     <!-- all contribution docs -->
     <map:match pattern="body-community/*/*/**.xml">
       <map:aggregate element="all" >
         <map:part src="content/xdocs/community/{1}/{2}/{3}.xml"/>
         <map:part src="cocoon:/revisions-community/{1}/{2}/{3}" />
       </map:aggregate>
       <map:transform src="library/xslt/{1}2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="community/{1}/{2}/{3}.xml"/>
       </map:call>
     </map:match>
  
     <!-- revisions only implemented for community pages -->
    <map:match pattern="revisions-community/*/*/**">
       <map:generate type="directory" src="content/xdocs/community/{1}/{2}">
      <map:parameter name="dateFormat" value="yyyy-MM-dd hh:mm" />
     </map:generate>
       <map:transform src="library/xslt/directory2revisions.xsl" label="content" >
         <map:parameter name="use-request-parameters" value="true"/>
         <map:parameter name="page" value="{3}"/>
       </map:transform>
     <map:serialize type="xml" />
   </map:match>
  
   <!-- Any other howto directories get transformed, without revisions -->
   <map:match pattern="body-**howto/*.xml">
     <map:generate src="content/xdocs/{1}howto/{2}.xml"/>
     <map:transform src="library/xslt/howto2document.xsl" label="content"/>
     <map:call resource="skinit">
       <map:parameter name="type" value="document2html"/>
       <map:parameter name="path" value="{1}howto/{2}.xml"/>
     </map:call>
   </map:match>
  
  
     <!-- Generate the "doclist" - list of all documentation
       The first match generates each book.xml and adds a new attribute "uri".
       The second match aggregates each book.xml into a doclist and
       then converts it to a document.
     -->
     <map:match pattern="doclist/content/xdocs/**book.xml">
       <map:generate src="content/xdocs/{1}book.xml"/>
       <map:transform src="library/xslt/doclist.xsl">
         <map:parameter name="uri" value="{1}"/>
       </map:transform>
       <map:serialize type="xml"/>
      </map:match>
  
     <map:match pattern="body-doclist.xml">
       <map:aggregate element="doclist">
         <map:part src="cocoon:/doclist/content/xdocs/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/community/howto/book.xml"/>
       </map:aggregate>
       <map:transform src="library/xslt/doclist2document.xsl"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="doclist.xml"/>
        <map:parameter name="nopdf" value="true"/>
       </map:call>
     </map:match>
  
     <!-- HTML DTD Documentation generation pipeline, makes use of NekoDTD tool -->
  
     <map:match pattern="body-**.dtdx.xml">
       <map:generate type="nekodtd" src="resources/schema/dtd/{1}.dtd">
         <map:parameter name="config-class" value="org.cyberneko.dtd.DTDConfiguration" />
       </map:generate>
       <map:transform src="library/xslt/dtdx2flat.xsl"/>
       <map:transform src="library/xslt/flat2document.xsl"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="isfaq" value="true"/>
        <map:parameter name="path" value="{1}.dtdx.xml"/>
       </map:call>
     </map:match>
  
     <!-- Generates body HTML for files in subdirs -->
     <map:match pattern="body-**/*.xml">
      <map:generate src="content/xdocs/{1}/{2}.xml"/>
      <map:call resource="skinit">
       <map:parameter name="type" value="document2html"/>
       <map:parameter name="path" value="{1}/{2}.xml"/>
      </map:call>
      </map:match>
  
     <!-- Generates body HTML for root-level files -->
     <map:match pattern="body-**.xml">
      <map:generate src="content/xdocs/{1}.xml"/>
      <map:call resource="skinit">
       <map:parameter name="type" value="document2html"/>
       <map:parameter name="path" value="{1}.xml"/>
      </map:call>
     </map:match>
  
    </map:pipeline>
  
  
    <map:pipeline internal-only="false">
  
     <!-- ======================    editor    ============================== -->
     <map:match pattern="edit**">
       <map:mount uri-prefix="edit" src="editor.xmap" check-reload="yes"/>
     </map:match>
     
     <!-- ==================   External URI-space    ========================= -->   
  
  
     <map:match pattern="">
      <map:redirect-to uri="{context:context}/index.html"/>
     </map:match>
  
     <map:match pattern="**">
     
      <!-- if the file is present verbatim as content, give that to the user... -->
      <map:act type="resource-exists">
       <map:parameter name="url" value="content/{1}"/>
       <map:read src="content/{../1}"/>
      </map:act>
     
     <!-- ... otherwise try to generate it using these rules.  -->
    
    <map:match pattern="apachestats">
      <map:generate type="html"
                    src="http://www.apache.org/~rubys/stats/xml.apache.org/">
        <map:parameter name="xpath"
                       value="/html/body//a[contains(@href,'.xml')]"/>
      </map:generate>
      <map:serialize type="xml"/>
    </map:match>
  
       
     <map:match pattern="*.html">
      <map:aggregate element="site">
       <map:part src="cocoon:/book-{1}.xml"/>
       <map:part src="cocoon:/tab-{1}.xml"/>
       <map:part src="cocoon:/body-{1}.xml" label="content"/>
      </map:aggregate>
      <map:call resource="skinit">
        <map:parameter name="type" value="site2xhtml"/>
        <map:parameter name="path" value="{0}"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**/*.html">
      <map:aggregate element="site">
       <map:part src="cocoon:/{1}/book-{1}/{2}.xml"/>
       <map:part src="cocoon:/{1}/tab-{1}/{2}.xml"/>
       <map:part src="cocoon:/body-{1}/{2}.xml" label="content"/>
      </map:aggregate>
       <map:call resource="skinit">
        <map:parameter name="type" value="site2xhtml"/>
        <map:parameter name="path" value="{0}"/>
       </map:call>
     </map:match>
  
     <map:match pattern="*.dtdx.pdf">
       <map:generate type="nekodtd" src="resources/schema/dtd/{1}.dtd">
         <map:parameter name="config-class" value="org.cyberneko.dtd.DTDConfiguration" />
       </map:generate>
       <map:transform src="library/xslt/dtdx2flat.xsl"/>
       <map:transform src="library/xslt/flat2document.xsl"/>
       <map:transform src="skins/{defaults:skin}/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="**/*.dtdx.pdf">
       <map:generate type="nekodtd" src="resources/schema/dtd/{2}.dtd">
         <map:parameter name="config-class" value="org.cyberneko.dtd.DTDConfiguration" />
       </map:generate>
       <map:transform src="library/xslt/dtdx2flat.xsl"/>
       <map:transform src="library/xslt/flat2document.xsl"/>
      <map:transform src="skins/{defaults:skin}/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="changes.pdf">
      <map:generate type="file-nolabel" src="status.xml"/>
      <map:transform src="library/xslt/changes2document.xsl" label="content"/>
      <map:transform src="skins/forrest-site/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="todo.pdf">
      <map:generate type="file-nolabel" src="status.xml"/>
      <map:transform src="content/todo2document.xsl" label="content"/>
      <map:transform src="skins/forrest-site/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="faq.pdf">
      <map:generate type="file-nolabel" src="content/xdocs/faq.xml"/>
      <map:transform src="library/xslt/faq2document.xsl" label="content"/>
      <map:transform src="skins/forrest-site/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="community/howto/**.pdf">
      <map:generate src="content/xdocs/community/howto/{1}.xml"/>
      <map:transform src="library/xslt/howto2document.xsl" label="content"/>
      <map:transform src="skins/{defaults:skin}/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="**.pdf">
      <map:generate src="content/xdocs/{1}.xml"/>
      <map:transform src="skins/{defaults:skin}/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <!-- ================  Directory redirects   =========================== -->
     <!-- Redirect any request for a directory to the directory's index.html file  -->
     <map:match pattern="**/">
       <map:redirect-to uri="{context:context}/{1}/index.html"/>
     </map:match>
  
     <!-- ================  Libre   =========================== -->
  
     <map:match pattern="libre">
       <map:generate type="libre" src="content/xdocs" >
        <map:parameter name="depth" value="-1" />
       </map:generate>
       <map:serialize type="xml"/>
     </map:match>
  
     <!-- ================  Static  =========================== -->
  
     <map:match pattern="skin/**.js">
      <map:call resource="skin-read">
        <map:parameter name="path" value="scripts/{1}.js"/>
        <map:parameter name="mime-type" value="application/javascript"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**/skin/**.js">
      <map:call resource="skin-read">
        <map:parameter name="path" value="scripts/{2}.js"/>
        <map:parameter name="mime-type" value="application/javascript"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**.js">
       <map:read src="resources/scripts/{1}.js" mime-type="application/javascript"/>
     </map:match>
  
     <map:match pattern="skin/**.css">
      <map:call resource="skin-read">
        <map:parameter name="path" value="css/{1}.css"/>
        <map:parameter name="mime-type" value="text/css"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**/skin/**.css">
      <map:call resource="skin-read">
        <map:parameter name="path" value="css/{2}.css"/>
        <map:parameter name="mime-type" value="text/css"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**.css">
      <map:read src="resources/css/{1}.css" mime-type="text/css"/>
     </map:match>
  
     <map:match pattern="skin/images/**.*">
      <map:call resource="skin-read">
        <map:parameter name="path" value="images/{1}.{2}"/>
        <map:parameter name="mime-type" value="image/{2}"/>
      </map:call>
     </map:match>
  
     <!-- WARNING: You are strongly advised not to make use of this target, as it
     leads to browsers having to cache multiple copies of the images, one per
     directory. See the forrest-site skin XSLTs for an example of how to make
     all image references use the 'skin/images/**.*' rule above -->
     <map:match pattern="**/skin/images/**.*">
      <map:call resource="skin-read">
        <map:parameter name="path" value="images/{2}.{3}"/>
        <map:parameter name="mime-type" value="image/{3}"/>
      </map:call>
     </map:match>
  
     <!-- DS: handles images local to a contributor directory -->
     <map:match pattern="**my-images/**.*">
      <map:read src="content/xdocs/{1}my-images/{2}.{3}" mime-type="image/{3}"/>
     </map:match>
  
     <map:match pattern="images/**.*">
      <map:read src="resources/images/{1}.{2}" mime-type="image/{2}"/>
     </map:match>
  
     <!-- WARNING: See above: this target should not be made use of -->
     <map:match pattern="**/images/**.*">
      <map:read src="resources/images/{2}.{3}" mime-type="image/{3}"/>
     </map:match>
  
     <map:match pattern="**favicon.ico">
      <map:call resource="skin-read">
        <map:parameter name="path" value="images/favicon.ico"/>
        <map:parameter name="mime-type" value="image/x-ico"/>
      </map:call>
     </map:match>
  
     </map:match>
     
    </map:pipeline>
   </map:pipelines>
  
  </map:sitemap>
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/README.txt
  
  Index: README.txt
  ===================================================================
  This is the base documentation directory. It usually contains two files:
  
  skinconf.xml     # This file customizes Forrest for your project. In it, you
                   # tell forrest the project name, logo, copyright info, etc
  
  sitemap.xmap     # Optional. This sitemap overrides the default one bundled
                   # with Forrest. Typically, one would copy a sitemap from
                   # xml-forrest/src/resources/conf/sitemap.xmap, and customize
                   # it.
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/book.xml
  
  Index: book.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "book-cocoon-v10.dtd">
  
  <book software="WSIF"
    title="WSIF"
    copyright="@year@ The Apache Software Foundation"
    xmlns:xlink="http://www.w3.org/1999/xlink">
  
    <menu label="About">
      <menu-item label="Introduction" href="index.html"/>
      <menu-item label="Overview" href="overview.html"/>
      <menu-item label="News" href="news.html"/>
      <menu-item label="FAQ" href="faq.html"/>
      <menu-item label="References" href="references.html"/>
    </menu>
  
    <menu label="Using WSIF">
      <menu-item label="Quick Start" href="quickstart.html"/>
      <menu-item label="Reqirements" href="requirements.html"/>
      <menu-item label="Samples" href="wsif_samples/index.html"/>
      <menu-item label="Mailing Lists" href="mail.html"/>
    </menu>
  
    <menu label="Downloads">
      <menu-item label="Releases" href="http://cvs.apache.org/dist/axis/wsif/"/>
      <menu-item label="Nightly Builds" href="http://cvs.apache.org/dist/axis/nightly/"/>
    </menu>
  
    <menu label="Development">
      <menu-item label="Developer's Guide" href="developers/index.html"/>
      <menu-item label="Reporting Bugs" href="bugs.html"/>
      <menu-item label="To Do" href="todo.html"/>
      <menu-item label="Changes" href="changes.html"/>
    </menu>
  </book>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/requirements.xml
  
  Index: requirements.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Requirements</title> 
          </header> 
          <body> 
  <section>
  <title>Prerequisites</title>
  <p>A J2SE v1.3 SDK (eg from <link href="http://java.sun.com/j2se">Java J2SE site</link>) and the Apache Jakarta Ant tool to build wsif. 
  Ant is available at the <link href="http://jakarta.apache.org/ant">Apache ANT website</link>.
  To build WSIF the jars from the following packages are required:</p>
  <table> 
  <caption>Prerequisite jars</caption>
  <tr>
  <th>Description</th>
  <th>Jar names</th>
  </tr>
  <tr>
  <td>JAXP compliant XML parser, such as <link href="http://xml.apache.org/xerces2-j/index.html">Apache Xerces</link>.</td>
  <td>xercesImpl.jar xmlParserAPIs.jar</td>
  </tr>
  <tr>
  <td>WSDL for Java API (WSDL4J), from the <link href="http://www-124.ibm.com/developerworks/projects/wsdl4j/">IBM developerWorks site</link>.</td>
  <td>wsdl4j.jar qname.jar</td>
  </tr>
  <tr>
  <td>Apache SOAP,  from  the <link href="http://xml.apache.org/soap">Apache SOAP site</link></td>
  <td>soap.jar</td>
  </tr>
  <tr>
  <td>Apache Axis,  from  the <link href="http://xml.apache.org/axis">Apache Axis site</link></td>
  <td>axis.jar saaj.jar jaxrpc.jar commons-logging.jar</td>
  </tr>
  <tr>
  <td>J2EE  1.3 from the <link href="http://java.sun.com/j2ee/">Java J2EE site</link></td>
  <td>j2ee.jar</td>
  </tr>
  </table>
  <p>Currently, in order to successfully build WSIF, all the above prerequisites 
  are required no matter which providers are going to be used.</p>
  </section>
          </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/news.xml
  
  Index: news.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
  <document>
    <header>
      <title>News</title>
    </header>
    <body>
      <section>
        <title>What is new with WSIF?</title>
        <p>WSIF has it's own home at
          <link href="http://ws.apache.org/wsif">http://ws.apache.org/wsif</link>
  .</p>
        <p>27th January 2003 - The first Apache WSIF release is now available. You can download it from
          <link href="http://cvs.apache.org/dist/axis/wsif/">http://cvs.apache.org/dist/axis/wsif/</link>.
        </p>
        <p>A 
          <link href="changes.html">list of changes in this release</link> is available (you can also visit
          <link href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/doc/changes.html"> online list of changes</link>
  in the latest CVS version to monitor WSIF progress).</p>
      </section>
    </body>
  </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/overview.xml
  
  Index: overview.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Overview</title> 
          </header> 
          <body> 
  <section>
  <title>Overview</title>
  
      <p>WSIF stands for the Web Services Invocation Framework. It supports a simple Java
        API for invoking Web services, no matter how or where the
        services are provided. The framework allows maximum
        flexibility for the invocation of any WSDL-described service.</p>
  
      <p>In the WSDL specification, Web service binding descriptions are
        <em>extensions</em> to the specification. So the SOAP binding,
        for example, is one way to expose the abstract functionality
        (<em>and there could be others</em>). Since WSIF mirrors WSDL
        very closely, it also views SOAP as just one of several ways you
        might wish to expose your software's functionality. WSDL thus
        becomes a normalized description of software, and WSIF is the
        natural client programming model.</p>
  
      <p>The WSIF API allows clients to invoke services focusing on the
        abstract service description - the
        portion of WSDL that covers the port types, operations and
        message exchanges without referring to real protocols. The
        <em>abstract invocations</em> work because they are backed up by
        protocol-specific pieces of code called <em>providers</em>. A
        provider is what conducts the actual message exchanges according
        to the specifics of a particular protocol - for example, the
        SOAP provider that is packaged with WSIF uses a specific SOAP
        engine like Axis to do the real work.</p>
  
      <p>The decoupling of the abstract invocation from the real
        provider that does the work results in a flexible programming
        model that allows dynamic invocation, late binding, clients
        being unaware of large scale changes to services - such as
        service migration, change of protocols, etc. WSIF also allows
        new providers to be registered dynamically, so you could enhance
        your client's capability without ever having to recompile its
        code or redeploy it.</p>
  
      <p>Using WSIF, WSDL can become the centerpiece of an integration
      framework for accessing software running on diverse platforms and
      using widely varying protocols. The only precondition is that you
      need to describe your software using WSDL, and include in its
      description a binding that your client's WSIF framework has a
      provider for. WSIF defines and comes packaged with providers for
      local java, EJB, JMS, and JCA protocols. That means you can define
      an EJB or a JMS-accessible service directly as a WSDL binding and
      access it transparently using WSIF, using the same API you would
      for a SOAP service or even a local java class.</p>
  
      <p>TODO: Put a picture showing WSIF client with pluggable providers to
        access service using different protocols.</p>
  
  </section>
  
  <section>
  <title>WSIF Structure</title>
  
  <p>
  In WSDL a binding defines how to map between the abstract PortType and a
  real service format and protocol. For example, the SOAP binding defines
  the encoding style, the SOAPAction header, the namespace of the body
  (the targetURI), and so forth.</p>
  <p>
  WSDL allows there to be multiple implementations for a Web Service,
  and multiple Ports that share the same PortType. In other words, WSDL
  allows the same interface to have bindings to for example, SOAP and
  IIOP.</p>
  
  <p>WSIF provides an API to allow the same client code to access any
  available binding. As the client code can then be written to the PortType
  it can be a deployment or configuration setting (or a code choice)
  which port and binding it uses.</p>
  
  <p>
  WSIF uses 'providers' to support these multiple WSDL bindings. A provider
  is a piece of code that supports a WSDL extension and allows invocation of
  the service through that particular implementation. WSIF providers use the
  J2SE JAR service provider specification making them discoverable at runtime.</p>
  
  <p>Clients can then utilize any new implementations and can delegate the
  choice of port to the infrastructure and runtime, which allows the
  implementation to be chosen on the basis of quality of service
  characteristics or business policy.</p>
  </section>
  
  <section><title>WSDL bindings for EJBs, JMs, JCA...</title>
      <p>WSIF defines additional binding extensions so that EJBs, local java classes, software accessible over message queues using the 
      JMS API and software that can be invoked using the Java Connector architecture can also be described in WSDL. WSIF is packaged with 
      providers that allow transparent invocation of such software given the corresponding WSDL description. Here are the documents that describe these bindings:</p>
        <ul>
        <li><link href="providers/wsdl_extensions/java_extension.html">Local java binding extensions for WSDL</link></li>
        <li><link href="providers/wsdl_extensions/ejb_extension.html">EJB binding extensions for WSDL</link></li>
        <li><link href="providers/wsdl_extensions/jms_extension.html">JMS binding extensions for WSDL</link></li>
        <li><link href="providers/wsdl_extensions/j2c_extension.html">JCA binding extensions for WSDL</link></li>
        </ul>
  </section>
          </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/bugs.xml
  
  Index: bugs.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Reporting Bugs</title> 
          </header> 
          <body> 
  <p>
  New WSIF bugs should be reported using <jump href="http://nagoya.apache.org/bugzilla">Bugzilla</jump> (the Apache bug database).</p>
  <ul>
   <li>Please report bugs against the newest release.</li>
   <li> To avoid duplicate bug reports, please query Bugzilla to see whether the bug has already been reported (and perhaps fixed).
  Click on <link href="http://nagoya.apache.org/bugzilla/buglist.cgi?long_desc=wsif&amp;long_desc_type=allwordssubstr">
  WSIF open bugs</link> for a list with links to each bug report.</li>
   <li>If you can't find your bug in the database, it would help if you could check out
  WSIF from CVS, and build it locally to verify that the bug still exists.</li>
   <li>If you have found a new bug, please enter a WSIF bug report in Bugzilla.
  Remember to include the following information:
    <ul>
     <li>Version number of WSIF</li>
     <li>Version number of JDK (enter "java -fullversion")</li>
     <li>Instructions for how to reproduce the problem, ideally including a small testcase.</li>
    </ul>
   </li>
  </ul>
  <note>Before you can enter your first bug report, you must submit your email
  address to Bugzilla and receive a password.</note>
  <p>For more information visit the following links:</p>
  <ul>
  <li><link href="http://nagoya.apache.org/bugzilla/">Apache Bugzilla</link></li>
  <li><link href="http://www.mozilla.org/bugs/">General Bugzilla information</link></li>
  </ul>
  
  <p>We also encourage you to write patches for problems you find and submit them to the
  <link href="mailto:axis-dev@xml.apache.org">axis-dev</link> mailing list (prefix your message with <code>[wsif]</code>).
  If we agree the problem is a bug and the patch fixes it and does not
  break something else, we are likely to include the patch in the next release.</p>        
  </body>
  </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/quickstart.xml
  
  Index: quickstart.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Quick Start</title> 
          </header> 
          <body> 
  <section>
  <title>Preliminaries</title>
  <p>Download the WSIF distribution from <link href="http://cvs.apache.org/dist/axis/wsif/">
  http://cvs.apache.org/dist/axis/wsif/</link>. It comes in three flavors: the binary distribution (&quot;bin&quot;), the source-only distribution (&quot;src&quot;) or everything 
  included (&quot;all&quot;). If you are familiar with CVS and 
  want to work with the latest code <link href="developers/cvs.html">use cvs</link>. Using CVS 
  you can also retrieve any past release by using tag (for example 
  WSIF_2_0_ALPHA2).</p></section>
  
  <section>
  <title>Getting Started</title>
  <p>If you have downloaded binary package then you are ready to use WSIF: the 
  very first thing to do is to check provided samples. However before you start 
  please read <link href="faq.html">WSIF FAQ</link>. Then read about <link href="wsif_samples/index.html">
  how to run the samples</link>. Otherwise if you downloaded source code or accessed it from CVS you will need 
  to build WSIF. To do this, first <link href="requirements.html">check that all 
  prerequisites</link> are available. Then <link href="developers/building.html">proceed with 
  building</link>.</p>
  
  <p>After you have successfully downloaded and installed WSIF, you
        can test your installation by <link href="wsif_samples/index.html">running the
  	samples</link>. If you are able to run all the samples
        successfully you should have a very good idea of what you can do
        with WSIF. Essentially once you have a WSDL file with a binding
        that WSIF understands (such as SOAP, EJB, Java, JMS, JCA, etc.)
        you can write a client that uses WSIF's APIs - the dynamic
        invocation API or the stub-based invocation - to use this
        service.</p>
  
  <p>Traditionally, the burden of dealing with new protocols has
        been a carried by the server-side. Software has to morph itself
        (through the addition of wrappers) to look like something the
        client expects to see. With WSIF, the software remains exactly
        the same - we just get the client to use WSIF's binding
        independent API, and through the addition of providers, we can
        mix and match protocols as we please.</p>
  
  <p><em>Service</em> is a very liberal term for WSIF!
        Anything that can be described in WSDL qualifies as a service
        and is something you can access using the WSIF API. Moreover,
        since WSDL is extensible, potentially everything can be
        described using WSDL. The next section describes how you can
        define your own bindings and write your own WSIF providers.</p>
  </section>
          </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/faq.xml
  
  Index: faq.xml
  ===================================================================
  <?xml version="1.0"?>
  <!DOCTYPE faqs PUBLIC
         "-//APACHE//DTD FAQ V1.1//EN"
         "faq-v11.dtd">
  <faqs title="Frequently Asked Questions">
   <faq>
    <question>What is the official version of WSIF? How to I get the latest version?</question>
    <answer>
     <p>
  The official version of WSIF is found here on the Apache web site.
  Nightly builds are available at
      <link href="http://xml.apache.org/dist/axis/nightly/">http://xml.apache.org/dist/axis/nightly/</link>
     </p>
     <p>
            The  wsif-src*.zip contains source distribution, the wsif-bin* zip file contains a built wsif.jar along with the API Javadoc and the wsif-all*.zip 
            contains the source, the JAR and the javadocs. (* will be replaced by the current version number in the file names).
     </p>
     <p>
  The version available from
      <link href="http://www.alphaworks.ibm.com/">Alphaworks</link>
  is no longer maintained.
     </p>
    </answer>
   </faq>
  
   <faq>
    <question>What are the differences between WSIF and WSTK?</question>
    <answer>
     <p>WSIF is a framework for invoking WSDL-described services. WSTK is IBM's Web Services Toolkit, 
     a preview technology for web services support in Websphere available from alphaworks. WSTK includes WSIF amongst other things.</p>
    </answer>
   </faq>
  
   <faq>
    <question>What are the differences between WSIF and Axis?</question>
    <answer>
   <p>Axis is an implementation of SOAP. It includes on the server-side infrastructure for deploying web service implementations and then routing 
   SOAP messages between clients and those implementations. It also implements the JAX-RPC specification for invoking SOAP services.</p>
  
   <p>WSIF is similar to the client piece of Axis, in that it is used for invoking services. However, WSIF's API is WSDL-driven and 
   protocol independent; it allows protocol-specific code ("providers") to be plugged in. For invoking SOAP services, WSIF is in fact 
   packaged with an Axis provider, that uses Axis APIs (i.e. JAX-RPC) to do the invocation. So WSIF operates at a more abstract level than Axis.</p>
    </answer>
   </faq>
  
   <faq>
    <question>What are the differences between WSIF and JAX-RPC?</question>
    <answer>
     <p>JAX-RPC is an API for invoking XML-based RPC services - essentially its current scope is limited to invocation of SOAP services. 
     WSIF is an API for invoking WSDL-described services, whether they happen to be SOAP services or not (for example, WSIF defines WSDL 
     bindings so that EJBs, enterprise software acessible using JMS or the Java Connector architecture as wel as local java classes can all 
     be described as first class WSDL services and then invoked using the same, protocol-independent WSIF API)..</p>
    </answer>
   </faq>
  
    <faq>
    <question>How to use and set HTTP proxy with WSIF and SOAP over HTTP</question>
    <answer>
     <p>TODO: describe here current support for system properties etc.</p>
    </answer>
   </faq> 
  
   <faq>
    <question>Where can I find details of the extensions to WSDL that are supported by WSIF?</question>
    <answer>
     <p>Links to the supported extensions can be found in the <link href="providers/index.html">providers </link>section.
     </p>
    </answer>
   </faq>
  
    <faq>
    <question>How do I define my own WSDL binding extensions and write WSIF providers for them</question>
    <answer>
     <p>Here's <link href="developers/how_to_wsdl_extensions.html">how to write your own WSDL extensions</link> to support new protocols, and then 
     <link href="developers/how_to_provider.html">write your own WSIF providers</link> to support customized WSIF extensions.</p>
    </answer>
   </faq> 
  
   <faq>
    <question>How do I report problems and request new features?</question>
    <answer>
     <p>The <link href="mail.html">mailing lists</link> are what you are looking for</p>
    </answer>
   </faq> 
  
   <faq>
    <question>How do I select SOAP provider used in WSIF?</question>
    <answer>
     <p>WSIF comes with an Apache Axis provider so using axis with WSIF is easy. WSIF has two SOAP providers, one using Apache SOAP 2.3 
     and the other using Axis, by default WSIF will use the Axis provider. The default is controlled by the org.apache.wsif.util.WSIFPluggableProviders class. 
     The javadoc for this class gives details of how the default is defined, but it can be overridden programmatically, for example, the following call sets 
     the axis provider to be the default: <br /><br /><code>WSIFPluggableProviders.overrideDefaultProvider("http://schemas.xmlsoap.org/wsdl/soap/",
  new WSIFDynamicProvider_ApacheSOAP() );</code>
  </p>
    </answer>
   </faq> 
  
   <faq>
    <question>How do I use use dynamic invoker sample?</question>
    <answer>
     <source>java clients.DynamicInvoker http://www.xmethods.net/sd/2001/TemperatureService.wsdl getTemp 10570
  
  Reading WSDL document from 'http://www.xmethods.net/sd/2001/TemperatureService.wsdl'
  Preparing WSIF dynamic invocation
  - WSIF0006W: Multiple WSIFProvider found supporting the same namespace URI 'http://schemas.xmlsoap.org/wsdl/soap/'. 
    Found ('org.apache.wsif.providers.soap.apachesoap.WSIFDynamicProvider_ApacheSOAP, org.apache.wsif.providers.soap.apacheaxis.WSIFDynamicProvider_ApacheAxis')
  - WSIF0007I: Using WSIFProvider 'org.apache.wsif.providers.soap.apachesoap.WSIFDynamicProvider_ApacheSOAP' for namespaceURI 'http://schemas.xmlsoap.org/wsdl/soap/'
  Executing operation getTemp
  Result:
  return=56.0
  
  Done!
     </source>
    </answer>
   </faq>
  
   <faq>
    <question>Sample DynamicInvoker and Complex Type handling in WSIF?</question>
    <answer>
     <p>WSIF does support complex types - of course XML schema support is limited (but very reasonable).</p> 
  
  <p>The DynamicInvoker doesn't support invocation of services using complex types since this requires that java representations of the complex types be generated first. </p>
  
  <p>It is also possible to extend DynamicInvoker to support complex types but it will require some kind of intermediate representation of values that can handle any complex type 
  (such as <link href="http://www.alphaworks.ibm.com/tech/jrom">JROM</link>...) </p>
  
    </answer>
   </faq>
  
  </faqs>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/tabs.xml
  
  Index: tabs.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE tabs PUBLIC "-//APACHE//DTD Cocoon Documentation Tab V1.0//EN" "tab-cocoon-v10.dtd">
  
        <tabs software="WSIF"
          title="WSIF"
          copyright="Foo"
          xmlns:xlink="http://www.w3.org/1999/xlink">
  
          <tab label="Home" dir=""/>
          <tab label="Developer's Guide" dir="developers"/>
          <tab label="Providers" dir="providers"/>
          <tab label="Samples" dir="wsif_samples"/>        
          <!-- Add new tabs here, eg:
          <tab label="How-Tos" dir="community/howto/"/>
          <tab label="XML Site" dir="xml-site/"/>
          -->
  
      </tabs>
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
  <document> 
          <header> 
            <title>Welcome to WSIF: Web Services Invocation Framework</title> 
          </header> 
          <body> 
            <section>
                <title>Introduction</title>
                <p>
  The Web Services Invocation Framework (WSIF) is a simple Java API for invoking Web services,
  no matter how or where the services are provided. Please refer to the 
  <link href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/doc/release_notes_2_0.html">
  release notes</link> before you proceed with using WSIF.</p>
  
  <p>WSIF enables developers to interact with abstract representations
  of Web services through their WSDL descriptions instead of working
  directly with the Simple Object Access Protocol (SOAP) APIs, which is
  the usual programming model. With WSIF, developers can work with the
  same programming model regardless of how the Web service is
  implemented and accessed.</p>
  
  <p>WSIF allows stubless or completely dynamic invocation of a Web service, based
  upon examination of the meta-data about the service at runtime. It also allows
  updated implementations of a binding to be plugged into WSIF at runtime, and it
  allows the calling service to defer choosing a binding until runtime.</p>
  
  <p>Finally, WSIF is closely based upon WSDL, so it can invoke any service
  that can be described in WSDL.</p>
  </section>
  
  <section>
  <title>Why should I use WSIF?</title>
  <p>What does all this enable?
  Imagine your complicated Enterprise software system consisting of
  various pieces of software, developed over a period of tens of years -
  EJBs, legacy apps accessed using Java's connector architecture, SOAP
  services hosted on external servers, old code accessed through
  messaging middleware. You need to write software applications that use
  all these pieces to do useful things; yet the differences in
  protocols, mobility of software, etc. comes in the way.</p>
  
  <p>The software you use moves to a different server, so your code
  breaks. The SOAP libraries you use change - say for example you moved
  from using Apache SOAP to Apache Axis - so your code breaks since it
  uses a now deprecated SOAP API. Something that was previously
  accessible as an EJB is now available through messaging middleware via
  JMS - again, you need to fix the code that uses the software. Or lets
  suppose you have an EJB which is offered as a SOAP service to external
  clients. Using SOAP obviously results in a performance penalty as
  compared to accessing the EJB directly. Of course, SOAP is a great
  baseline protocol for platform andlanguage independence, but shouldn't
  java clients be able to take advantage of the fact that the software
  they are accessing is really an EJB? So your java customers pay a
  performance penalty since you have to use SOAP for to accomodate you
  non-java clients.</p>
  
  <p>WSIF fixes these problems by letting you use WSDL as a
  <em>normalized description</em> of disparate software, and allows you
  to access this software in a manner that is independent of protocol or
  location. So whether it is SOAP, an EJB, JMS (or potentially .NET and
  other software frameworks), you have an API centered around WSDL which
  you use to access the functionality. This lets you write code that
  adapts to changes easily. The separation of the API from the actual
  protocol also means you have flexibility - you can switch protocols,
  location, etc. without having to even recompile your client code. So
  if your an externally available SOAP service becomes available as an
  EJB, you can switch to using RMI/IIOP by just changing the service
  description (the WSDL), without having to make any modification in
  applications that use the service. You can exploit WSDL's
  extensibility, its capability to offer multiple bindings for the same
  service, deciding on a binding at runtime, etc.</p>
  
  <p>You will find more details about WSIF and its architecture in the
  <link href="overview.html">overview</link>.
  </p>
  </section>
  
  <section><title>How can I contribute to WSIF?</title>
  
  <p>You can contribute to WSIF by participating in discussions on the
  <link href="http://xml.apache.org/axis/mail.html">axis-user and axis-dev
  mailing lists</link>. Be sure to prefix the subject of your WSIF-related
  emails with <code>[wsif]</code>. If you find something that outstanding
  issue or bug that interests you, feel free to download WSIF's source
  code and work on it. You will find instructions for accessing the
  source code <link href="developers/cvs.html">here</link>.
  </p>
  
  <p>You can find a list of outstanding bugs from <link href="http://nagoya.apache.org/bugzilla/buglist.cgi?long_desc=wsif&amp;long_desc_type=allwordssubstr">Bugzilla</link>.
  </p>
  
  </section>
          </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/mail.xml
  
  Index: mail.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>Mailing Lists</title> 
          </header> 
          <body> 
  <p>You can contribute to WSIF by participating in discussions on the
  <link href="http://xml.apache.org/axis/mail.html">axis-user and axis-dev
  mailing lists</link>. Please follow the prescribed <link href="http://xml.apache.org/axis/mailguide.html">guidelines</link>. 
  and use <strong><code>[wsif]</code></strong> prefix in the subject of your WSIF-related
  emails so it is easy to identify WSIF-related posts on the Axis lists.</p>        
  </body>
      </document>
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/references.xml
  
  Index: references.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
        <document> 
          <header> 
            <title>References</title> 
          </header> 
          <body> 
  <ul>
    <li><link href="http://www.research.ibm.com/people/b/bth/OOWS2001/duftler.pdf">WSIF Framework proposal</link> [PDF]
    </li>
    
  	<li>IBM developerWorks articles:
  	
  	<ul>
  	   <li><link href="http://www-106.ibm.com/developerworks/webservices/library/ws-appwsif.html?loc=dwmain">Applying 
      	 the Web services invocation framework</link> 
  
         </li><li><link href="http://www-106.ibm.com/developerworks/webservices/library/ws-wsif/">
                 Web service invocation sans SOAP Part 1: Introduction</link> and
              <link href="http://www-106.ibm.com/developerworks/webservices/library/ws-wsif2/">Part 2: 
                The architecture of Web Service Invocation Framework</link>.
         </li>
      </ul>
  	</li>
  	
  	<li><link href="http://www.ericleach.com/sa2002/presentations/PFremantle-IBM.pdf">A presentation from Paul Fremantle 
  	   at the 2002 Software Architecture conference</link></li>
  
  	<li>WSIF uses extensively WSDL and WSDL4J: 
  		the W3C <link href="http://www.w3.org/TR/wsdl">Web Services Description Language (WSDL) specification</link>,
  	    <link href="http://www.jcp.org/jsr/detail/110.jsp">JSR110</link> describing the Java APIs for WSDL, and the
  	    <link href="http://oss.software.ibm.com/developerworks/projects/wsdl4j">WSDL4J</link> open source site.</li>
  </ul>
      </body>
      </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/scripts/breadcrumbs-optimized.js
  
  Index: breadcrumbs-optimized.js
  ===================================================================
  var PREPREND_CRUMBS=new Array();
  PREPREND_CRUMBS.push(new Array("Apache","http://www.apache.org/"));
  PREPREND_CRUMBS.push(new Array("Jakarta","http://jakarta.apache.org/"));
  var DISPLAY_SEPARATOR=" &gt; ";
  var DISPLAY_PREPREND="";
  var DISPLAY_POSTPREND=":";
  var CSS_CLASS_CRUMB="breadcrumb";
  var CSS_CLASS_TRAIL="breadcrumbTrail";
  var CSS_CLASS_SEPARATOR="crumbSeparator";
  var FILE_EXTENSIONS=new Array( ".html", ".htm", ".jsp", ".php", ".php3", ".php4" );
  var PATH_SEPARATOR="/";
  
  function sc(s) {
  	var l=s.toLowerCase();
  	return l.substr(0,1).toUpperCase()+l.substr(1);
  }
  function getdirs() {
  	var t=document.location.pathname.split(PATH_SEPARATOR);
  	var lc=t[t.length-1];
  	for(var i=0;i < FILE_EXTENSIONS.length;i++)
  	{
  		if(lc.indexOf(FILE_EXTENSIONS[i]))
  			return t.slice(1,t.length-1); }
  	return t.slice(1,t.length);
  }
  function getcrumbs( d )
  {
  	var pre = "/";
  	var post = "/";
  	var c = new Array();
  	if( d != null )
  	{
  		for(var i=0;i < d.length;i++) {
  			pre+=d[i]+postfix;
  			c.push(new Array(d[i],pre)); }
  	}
  	if(PREPREND_CRUMBS.length > 0 )
  		return PREPREND_CRUMBS.concat( c );
  	return c;
  }
  function gettrail( c )
  {
  	var h=DISPLAY_PREPREND;
  	for(var i=0;i < c.length;i++)
  	{
  		h+='<a href="'+c[i][1]+'" >'+sc(c[i][0])+'</a>';
  		if(i!=(c.length-1))
  			h+=DISPLAY_SEPARATOR; }
  	return h+DISPLAY_POSTPREND;
  }
  
  function gettrailXHTML( c )
  {
  	var h='<span class="'+CSS_CLASS_TRAIL+'">'+DISPLAY_PREPREND;
  	for(var i=0;i < c.length;i++)
  	{
  		h+='<a href="'+c[i][1]+'" class="'+CSS_CLASS_CRUMB+'">'+sc(c[i][0])+'</a>';
  		if(i!=(c.length-1))
  			h+='<span class="'+CSS_CLASS_SEPARATOR+'">'+DISPLAY_SEPARATOR+'</span>'; }
  	return h+DISPLAY_POSTPREND+'</span>';
  }
  
  if(document.location.href.toLowerCase().indexOf("http://")==-1)
  	document.write(gettrail(getcrumbs()));
  else
  	document.write(gettrail(getcrumbs(getdirs())));
  
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/scripts/breadcrumbs.js
  
  Index: breadcrumbs.js
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) @skinconfig.year@ The Apache Software Foundation. All rights reserved.
  
   Redistribution and use in source and binary forms, with or without modifica-
   tion, are permitted provided that the following conditions are met:
  
   1. Redistributions of  source code must  retain the above copyright  notice,
      this list of conditions and the following disclaimer.
  
   2. Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
  
   3. The end-user documentation included with the redistribution, if any, must
      include  the following  acknowledgment:  "This product includes  software
      developed  by the  Apache Software Foundation  (http://www.apache.org/)."
      Alternately, this  acknowledgment may  appear in the software itself,  if
      and wherever such third-party acknowledgments normally appear.
  
   4. The names "Apache Forrest" and "Apache Software Foundation"
      must not be used to endorse or promote products derived from this  software
      without  prior written permission. For written permission, please contact
      apache@apache.org.
  
   5. Products  derived from this software may not  be called "Apache", nor may
      "Apache" appear  in their name,  without prior written permission  of the
      Apache Software Foundation.
  
   THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  
   This software  consists of voluntary contributions made  by many individuals
   on  behalf of the Apache Software  Foundation. For more  information on the
   Apache Software Foundation, please see <http://www.apache.org/>.
  
  */
  
  /**
   * This script, when included in a html file, builds a neat breadcrumb trail
   * based on its url. That is, if it doesn't contains bugs (I'm relatively
   * sure it does).
   *
   * Typical usage:
   * <script type="text/javascript" language="JavaScript" src="breadcrumbs.js"></script>
   *
   *@author     <a href="mailto:leosimons@apache.org">Leo Simons</a> (main author)
   *@author     <a href="mailto:nicolaken@apache.org">Nicola Ken Barozzi</a> (integration in skin)
   *@created    July 12, 2002
   *@version    1.0
   */
  
  /* ========================================================================
  	CONSTANTS
     ======================================================================== */
  
  /**
   * Two-dimensional array containing extra crumbs to place at the front of
   * the trail. Specify first the name of the crumb, then the URI that belongs
   * to it. You'll need to modify this for every domain or subdomain where
   * you use this script (you can leave it as an empty array if you wish)
   */
  var PREPREND_CRUMBS = new Array();
     if(!("@skinconfig.trail.link1.name@"=="")){
       PREPREND_CRUMBS.push( new Array( "@skinconfig.trail.link1.name@", "@skinconfig.trail.link1.href@" ) );
     }
     if(!("@skinconfig.trail.link2.name@"=="")){
       PREPREND_CRUMBS.push( new Array( "@skinconfig.trail.link2.name@", "@skinconfig.trail.link2.href@" ) );
     }
     if(!("@skinconfig.trail.link3.name@"=="")){
       PREPREND_CRUMBS.push( new Array( "@skinconfig.trail.link3.name@", "@skinconfig.trail.link3.href@" ) );
     }
  
  /**
   * String to include between crumbs:
   */
  var DISPLAY_SEPARATOR = " &gt; ";
  /**
   * String to include at the beginning of the trail
   */
  var DISPLAY_PREPREND = "";
  /**
   * String to include at the end of the trail
   */
  var DISPLAY_POSTPREND = "";
  
  /**
   * CSS Class to use for a single crumb:
   */
  var CSS_CLASS_CRUMB = "breadcrumb";
  
  /**
   * CSS Class to use for the complete trail:
   */
  var CSS_CLASS_TRAIL = "breadcrumbTrail";
  
  /**
   * CSS Class to use for crumb separator:
   */
  var CSS_CLASS_SEPARATOR = "crumbSeparator";
  
  /**
   * Array of strings containing common file extensions. We use this to
   * determine what part of the url to ignore (if it contains one of the
   * string specified here, we ignore it).
   */
  var FILE_EXTENSIONS = new Array( ".html", ".htm", ".jsp", ".php", ".php3", ".php4" );
  
  /**
   * String that separates parts of the breadcrumb trail from each other.
   * When this is no longer a slash, I'm sure I'll be old and grey.
   */
  var PATH_SEPARATOR = "/";
  
  /* ========================================================================
  	UTILITY FUNCTIONS
     ======================================================================== */
  /**
   * Capitalize first letter of the provided string and return the modified
   * string.
   */
  function sentenceCase( string )
  {
  	var lower = string.toLowerCase();
  	return lower.substr(0,1).toUpperCase() + lower.substr(1);	
  }
  
  /**
   * Returns an array containing the names of all the directories in the
   * current document URL
   */
  function getDirectoriesInURL()
  {
  	var trail = document.location.pathname.split( PATH_SEPARATOR );
  
  	// check whether last section is a file or a directory
  	var lastcrumb = trail[trail.length-1];
  	for( var i = 0; i < FILE_EXTENSIONS.length; i++ )
  	{
  		if( lastcrumb.indexOf( FILE_EXTENSIONS[i] ) )
  		{
  			// it is, remove it and send results
  			return trail.slice( 1, trail.length-1 );
  		}
  	}
  
  	// it's not; send the trail unmodified
  	return trail.slice( 1, trail.length );
  }
  
  /* ========================================================================
  	BREADCRUMB FUNCTIONALITY
     ======================================================================== */
  /**
   * Return a two-dimensional array describing the breadcrumbs based on the
   * array of directories passed in.
   */
  function getBreadcrumbs( dirs )
  {
  	var prefix = "/";
  	var postfix = "/";
  
  	// the array we will return
  	var crumbs = new Array();
  
  	if( dirs != null )
  	{
  		for( var i = 0; i < dirs.length; i++ )
  		{
  			prefix += dirs[i] + postfix;
  			crumbs.push( new Array( dirs[i], prefix ) );
  		}
  	}
  
  	// preprend the PREPREND_CRUMBS
  	if(PREPREND_CRUMBS.length > 0 )
  	{
  		return PREPREND_CRUMBS.concat( crumbs );
  	}
  
  	return crumbs;
  }
  
  /**
   * Return a string containing a simple text breadcrumb trail based on the
   * two-dimensional array passed in.
   */
  function getCrumbTrail( crumbs )
  {
  	var xhtml = DISPLAY_PREPREND;
  
  	for( var i = 0; i < crumbs.length; i++ )
  	{
  		xhtml += '<a href="' + crumbs[i][1] + '" >';
  		xhtml += crumbs[i][0] + '</a>';
  		if( i != (crumbs.length-1) )
  		{
  			xhtml += DISPLAY_SEPARATOR;
  		}
  	}
  
  	xhtml += DISPLAY_POSTPREND;
  
  	return xhtml;
  }
  
  /**
   * Return a string containing an XHTML breadcrumb trail based on the
   * two-dimensional array passed in.
   */
  function getCrumbTrailXHTML( crumbs )
  {
  	var xhtml = '<span class="' + CSS_CLASS_TRAIL  + '">';
  	xhtml += DISPLAY_PREPREND;
  
  	for( var i = 0; i < crumbs.length; i++ )
  	{
  		xhtml += '<a href="' + crumbs[i][1] + '" class="' + CSS_CLASS_CRUMB + '">';
  		xhtml += rumbs[i][0] + '</a>';
  		if( i != (crumbs.length-1) )
  		{
  			xhtml += '<span class="' + CSS_CLASS_SEPARATOR + '">' + DISPLAY_SEPARATOR + '</span>';
  		}
  	}
  
  	xhtml += DISPLAY_POSTPREND;
  	xhtml += '</span>';
  
  	return xhtml;
  }
  
  /* ========================================================================
  	PRINT BREADCRUMB TRAIL
     ======================================================================== */
  
  // check if we're local; if so, only print the PREPREND_CRUMBS
  //if( document.location.href.toLowerCase().indexOf( "http://" ) == -1 )
  //{
  //	document.write( getCrumbTrail( getBreadcrumbs() ) );
  //}
  //else
  //{
  //	document.write( getCrumbTrail( getBreadcrumbs( getDirectoriesInURL() ) ) );
  //}
  document.write( getCrumbTrail( getBreadcrumbs() ) );
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/wsif_samples/book.xml
  
  Index: book.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE book PUBLIC "-//APACHE//DTD Cocoon Documentation Book V1.0//EN" "book-cocoon-v10.dtd">
  
  <book software="WSIF"
    title="WSIF"
    copyright="@year@ The Apache Software Foundation"
    xmlns:xlink="http://www.w3.org/1999/xlink">
  
    <menu label="Samples">
      <menu-item label="About" href="index.html"/>    
    </menu>
  
    <menu label="SOAP">
      <external label="Stock Quote" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/simplesoap/README.html"/>
      <external label="Zip2Geo" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/complexsoap/README.html"/>
    </menu>
    
    <menu label="Java">
      <external label="Address Book" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/localjava/README.html"/>
    </menu>
  
    <menu label="EJB">
      <external label="Address Book" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/ejb/README.html"/>
    </menu>
  
    <menu label="JMS">
      <external label="Service Availability" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/jms/README.html"/>
    </menu>
  
    <menu label="JCA">
      <external label="Customer Info" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/jca/README.html"/>
    </menu>
  
    <menu label="Misc">
      <external label="Multiple Bindings" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/multibinding/README.html"/>
      <external label="Custom Factory" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/customfactory/README.html"/>
      <external label="DSL Example" href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/dslprovider/README.html"/>
    </menu>
  </book>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/xdocs/wsif_samples/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0"?>
  <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
  <document> 
    <header> 
      <title>WSIF Samples</title> 
     </header> 
    <body>
  <p>The WSIF distribution comes with a set of sample clients that demonstrate WSIF features. This document describes the features demonstrated by each sample, along with a guide to running them.</p>
  
  <p>Before you run samples you need to make sure that you have required
  JAR files and set CLASSPATH to contain both WSIF jar files and
  required JAR files. If you use binary distribution of WSIF most of JAR
  files is already provided and classpath script can be used to set
  CLASSPATH.&nbsp; We redistribute as many of the required JARs as we can; you will only need to download the following and put them into the <code>lib/</code> directory.</p>
  <ul>
  <li><strong>activation.jar</strong></li>
  <li><strong>mail.jar</strong></li>
  <li><strong>jms.jar</strong></li>
  <li><strong>j2ee.jar</strong>; if you plan to download this it includes the above three so you won't need to download those separately.</li>
  </ul>
  <p>The <link href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/lib/README.html">dependency README</link> tells you where you can download these from and also how they are used, so you can decide for yourself which JARs you really need.</p>
  
  <p>Once you have the necessary jar files, to run samples
  you can simply call <strong>classpath script</strong> (on Windows use
  classpath.bat on UNIX use source classpath.csh if you use TCSH or
  source classpath.sh if you use BASH) and you will have all required
  jar files on CLASSPATH.</p>
  <p>The samples are present under the samples
  directory of your WSIF installation. Each sample resides in its own
  directory. Within each sample directory, you will find the following
  files (here, <em>SampleName</em> is the name of the sample):</p>
  <ul>
    <li><code>SampleName.wsdl</code>: WSDL file for sample</li>
    <li><code>README.html</code>: README file describing the sample, what WSIF features it demonstrates, and how to run it.</li>
    <li><code>service</code>: Subdirectory containing service implementation files, deployment files, README file describing how to deploy service. In case the sample uses a publicly available service, this directory will contain only a README file describing where the service is hosted, and pointing to further information on the service.</li>
    <li><code>client</code>: Subdirectory containing two further subdirectories, <code>dynamic</code> and <code>stub</code>. The dynamic subdirectory contains files for a client that uses WSIF's DII (dynamic invocation interface) to invoke the sample service. The stub subdirectory contains a pregenerated set of files that allow invocation of the service through a JAX-RPC compliant service interface. Each of these subdirectories may contain README files for useful information about that particular client.</li>
  </ul>
  <p>You will find that in most cases the sample WSDLs widely differ, but the client code remains much the same. This is the whole point of WSIF - providing access to services exposed via diverse protocols through a uniform WSDL-based API. So you might have two samples, one of which invokes the EJB binding for a service and the other invoking a SOAP binding. Since the client does not contain any binding specific code, the client code for these samples might be identical.</p>
  <p>Below you will find a listing of the available samples and a pointer to the README files for each of them.</p>
  <table>
  <tr>
     <td><strong>What the sample demonstrates</strong></td>
     <td><strong>Where the sample is available</strong></td>
     <td><strong>Information on how to setup and run this sample</strong></td>
  
  </tr>
  <tr>
     <td>How to invoke a simple SOAP service</td>
     <td>The samples/simplesoap directory under your WSIF installation</td>
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/simplesoap/README.html">The Sample README</fork></td>
  </tr>
  <tr>
     <td>How to invoke a SOAP service that uses custom schema types</td>
     <td>The samples/complexsoap directory under your WSIF installation</td>
  
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/complexsoap/README.html">The Sample README</fork></td>
  </tr>
  <tr>
     <td>How to invoke a local java class as a service</td>
     <td>The samples/localjava directory under your WSIF installation</td>
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/localjava/README.html">The Sample README</fork></td>
  </tr>
  <tr>
     <td>How to invoke an EJB as a service</td>
  
     <td>The samples/ejb directory under your WSIF installation</td>
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/ejb/README.html">The Sample README</fork></td>
  </tr>
  <tr>
     <td>How to invoke software accessible using the JCA (Java Connector Architecture) as a service</td>
     <td>The samples/jca directory under your WSIF installation</td>
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/jca/README.html">The Sample README</fork></td>
  
  </tr>
  <tr>
     <td>How to invoke software accessible via the Java Message Service (JMS)</td>
     <td>The samples/jms directory under your WSIF installation</td>
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/jms/README.html">The Sample README</fork></td>
  </tr>
  <tr>
     <td>How to choose between the available bindings of a service at runtime</td>
     <td>The samples/multibinding directory under your WSIF installation</td>
  
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/multibinding/README.html">The Sample README</fork></td>
  </tr>
  <tr>
     <td>How to customize WSIF to select between bindings using your own heuristics</td>
     <td>The samples/customfactory directory under your WSIF installation</td>
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/customfactory/README.html">The Sample README</fork></td>
  </tr>
  <tr>
     <td>A sample application that builds on the EJB, JMS and complexsoap samples</td>
  
     <td>The samples/dslprovider directory under your WSIF installation</td>
     <td><fork href="http://cvs.apache.org/viewcvs.cgi/~checkout~/xml-axis-wsif/java/samples/dslprovider/README.html">The Sample README</fork></td>
  </tr>
  </table>
    </body> 
  </document>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/skins/wsif-skin/css/page.css
  
  Index: page.css
  ===================================================================
  body {  background-color: #FFFFFF; margin: 0px 0px 0px 0px; font-family: Verdana, Helvetica, sans-serif;  font-size : 90%;  }
  
  a:link { color: #0F3660; }
  a:visited { color: #004499; }
  a:active { color: #000066; }
  a:hover { color: #000055; }
  
  .menu { background-color: #4C6C8F; margin: 0px; padding: 3px 8px 5px 3px;  font-size : 90%;  }
  .menu a:link { color: #FFFFFF;  text-decoration : none;  }
  .menu a:visited { color: #FFFFFF; text-decoration : none; }
  /*.menu a:active { font-weight: bold }*/
  .menu a:hover { color: #FFCC00; text-decoration : none; }
  .menu ul { margin: 0px 0px 0px 20px; padding: 0px; }
  .menu li  { list-style-image: url('images/label.gif'); font-weight : bold; }
  .menu ul ul li .sel { list-style-image: url('images/current.gif'); font-weight : normal; }
  .menu ul ul li  { list-style-image: url('images/page.gif'); font-weight : normal; }
  
  table .title { background-color: #FFFFFF; width:100%; border: 0px; }
  .dida { font-size: 60%; }
  
  .pre { white-space: pre;}
  
  .content { padding: 5px 5px 5px 10px; font : small Verdana, Helvetica, sans-serif;  font-size : 90%; }
  .content .ForrestTable { width: 100%; background-color: #7099C5; color: #ffffff; font-size : 90%;}
  .content .ForrestTable caption { text-align: left; color: black; font-weight: bold; }
  .content .ForrestTable th { text-align: center; }
  .content .ForrestTable td { background-color: #f0f0ff; color: black; }
  
  .frame { margin: 5px 20px 5px 20px; font-size: 90%; }
  .frame .content { margin: 0px; }
  
  .note { border: solid 1px #7099C5; background-color: #f0f0ff; }
  .note .label { background-color: #7099C5; color: #ffffff; }
  
  .warning { border: solid 1px #D00000; background-color: #fff0f0; }
  .warning .label { background-color: #D00000; color: #ffffff; }
  
  .fixme { border: solid 1px #C6C600; background-color: #FAF9C3; }
  .fixme .label { background-color: #C6C600; color: #ffffff; }
  
  .code { border-color: #CFDCED; border-style: solid; border-width: 1px; }
  .codefrag {	font-family: "Courier New", Courier, monospace; }
  
  .highlight { background-color: yellow; }
  
  .minitoc {margin: 5px 5px 5px 40px;}
  
  .dtdElement { width: 100%;	font-size: 90%; background-color : #ffffff; }
  
  .dtdTag {    color: #990000; text-transform : uppercase;  font-style : normal;  font-size : 120%;  font-weight : bold; }
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/todo2document.xsl
  
  Index: todo2document.xsl
  ===================================================================
  <?xml version="1.0"?>
  
  <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
  
   <xsl:import href="../library/xslt/copyover.xsl"/>
  
   <xsl:template match="/">
    <xsl:apply-templates select="//todo"/>
   </xsl:template>
  
   <xsl:template match="todo">
    <document>
     <header>
      <title>To Do List</title>
     </header>
     <body>
      <p><xsl:value-of select="@info"/></p>
      <xsl:apply-templates/>
     </body>
    </document>
   </xsl:template>
  
   <xsl:template match="actions">
    <section>
     <title><xsl:value-of select="@priority"/></title>
     <ul>
      <xsl:for-each select="action">
       <li>
        <strong><xsl:text>[</xsl:text><xsl:value-of select="@context"/><xsl:text>]</xsl:text></strong><xsl:text> </xsl:text>
        <xsl:apply-templates/>
        <xsl:text> </xsl:text>&#8594;<xsl:text> </xsl:text><xsl:value-of select="@dev"/>
       </li>
      </xsl:for-each>
     </ul>
    </section>
   </xsl:template>
  
  </xsl:stylesheet>
  
  
  
  1.1                  xml-axis-wsif/forrest-src/src/documentation/content/changes2document.xsl
  
  Index: changes2document.xsl
  ===================================================================
  <?xml version="1.0"?>
  
  <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">
  
   <xsl:import href="../library/xslt/copyover.xsl"/>
  
   <xsl:variable name="bugzilla">http://nagoya.apache.org/bugzilla/show_bug.cgi?id=</xsl:variable>
  
   <xsl:template match="/">
    <xsl:apply-templates select="//changes"/>
   </xsl:template>
   
   <xsl:template match="changes">
    <document>
     <header>
      <title>History of Changes</title>
     </header>
     <body>
      <xsl:apply-templates/>
     </body>
    </document>
   </xsl:template>
  
   <xsl:template match="release">
    <section>
     <title>Version <xsl:value-of select="@version"/> (<xsl:value-of select="@date"/>)</title>
     <ul>
      <xsl:apply-templates/>
     </ul>
    </section>
   </xsl:template>
  
   <xsl:template match="action">
    <li>
     <icon src="images/{@type}.jpg" alt="{@type}"/>
     <xsl:apply-templates/>
     <xsl:if test="@dev != ''">
      <xsl:text>(</xsl:text><xsl:value-of select="@dev"/><xsl:text>)</xsl:text>
     </xsl:if>
  
     <xsl:if test="@due-to">
      <xsl:text> Thanks to </xsl:text>
      <xsl:variable name="email-name" select="substring-before(@due-to-email, '@')"/>
      <xsl:variable name="email-domain" select="substring-after(@due-to-email, '@')"/>
      <link href="mailto:{$email-name}.at.{$email-domain}"><xsl:value-of select="@due-to"/></link>
      <xsl:text>.</xsl:text>
     </xsl:if>
  
     <xsl:if test="@fixes-bug">
      <xsl:text> Fixes </xsl:text>
      <link href="{$bugzilla}{@fixes-bug}">
       <xsl:text>bug </xsl:text><xsl:value-of select="@fixes-bug"/>
      </link>
      <xsl:text>.</xsl:text>
     </xsl:if>
    </li>
   </xsl:template>
  
  </xsl:stylesheet>
  
  
  

Mime
View raw message