You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cr...@apache.org on 2002/09/09 19:53:18 UTC

cvs commit: xml-cocoon2/src/scratchpad/webapp/samples/soap-server sitemap.xmap status.xsl status.xsp

crafterm    2002/09/09 10:53:18

  Modified:    .        build.xml changes.xml
  Added:       src/scratchpad/lib LICENSE.axis LICENSE.commons-discovery
                        LICENSE.wsdl4j axis-20020828.jar
                        axis-jaxrpc-20020828.jar axis-saaj-20020828.jar
                        commons-discovery.jar excalibur-util-1.0.jar
                        wsdl4j.jar
               src/scratchpad/src/org/apache/cocoon/components/axis
                        SoapServer.java SoapServerImpl.java
                        soapserver.xconf soapserver.xroles
               src/scratchpad/src/org/apache/cocoon/reading
                        AxisRPCReader.java
               src/scratchpad/src/org/apache/cocoon/webservices
                        AbstractComposableService.java
                        AbstractLogEnabledService.java
               src/scratchpad/src/org/apache/cocoon/webservices/cache
                        Cache.java DeploymentDescriptor.wsdd
               src/scratchpad/src/org/apache/cocoon/webservices/memory
                        DeploymentDescriptor.wsdd Memory.java
               src/scratchpad/src/org/apache/cocoon/webservices/system
                        DeploymentDescriptor.wsdd System.java
               src/scratchpad/webapp/samples/soap-server sitemap.xmap
                        status.xsl status.xsp
  Log:
  Initial import of AxisRPCReader sources
  
  Revision  Changes    Path
  1.263     +22 -2     xml-cocoon2/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/build.xml,v
  retrieving revision 1.262
  retrieving revision 1.263
  diff -u -r1.262 -r1.263
  --- build.xml	6 Sep 2002 00:10:49 -0000	1.262
  +++ build.xml	9 Sep 2002 17:53:16 -0000	1.263
  @@ -453,9 +453,13 @@
                  property="jxpath.present" 
                  classname="org.apache.commons.jxpath.JXPathContext"/>
      
  - <available classpathref="classpath" 
  +    <available classpathref="classpath" 
                  property="httpclient.present" 
                  classname="org.apache.commons.httpclient.HttpClient"/>
  +
  +    <available classpathref="classpath" 
  +               property="activation.present" 
  +               classname="javax.activation.DataSource"/>
     </target>
     
     <target name="prepare-jdbc" depends="filter-jdbc,nofilter-jdbc"/>
  @@ -734,11 +738,22 @@
       </antcall>
     </target>  
   
  +  <!-- Outputs a warning if javax.activation.* classes are missing during compilation -->
  +  <target name="activation-warn" unless="activation.present" depends="optional-tests">
  +    <antcall target="op-warning">
  +      <param name="thing" value="Activation"/>
  +      <param name="recovery" 
  +        value="Get the SUN Activation package and place the jar in the lib/local dir"/>
  +      <param name="message"
  +             value="The SUN Activation package is required for the AxisRPCReader class"/>
  +    </antcall>
  +  </target>  
  +
     <!-- =================================================================== -->
     <!-- Print out warnings for optional components                          -->
     <!-- =================================================================== -->
     <target name="optional-warnings" 
  -          depends="bsf-warn, rhino-warn, jfor-warn, xmldb-warn, php-warn, naming-warn, svg-warn, tidy-warn, maybeupload-warn, lucene-warn, deli-warn, velocity-warn, hsqldb-warn, resolver-warn, jisp-warn, pizza-warn, poi-warn, commons-logging-warn, jxpath-warn, httpclient-warn">
  +          depends="bsf-warn, rhino-warn, jfor-warn, xmldb-warn, php-warn, naming-warn, svg-warn, tidy-warn, maybeupload-warn, lucene-warn, deli-warn, velocity-warn, hsqldb-warn, resolver-warn, jisp-warn, pizza-warn, poi-warn, commons-logging-warn, jxpath-warn, httpclient-warn, activation-warn">
     </target>
   
   
  @@ -886,6 +901,10 @@
           <exclude name="**/DbXML*.java" unless="xmldb.present"/>
   
           <exclude name="**/servlet/*Filter*.java" unless="servlet23.present"/>
  +
  +        <exclude name="**/components/axis/**" unless="activation.present"/>
  +        <exclude name="**/reading/AxisRPCReader.java" unless="activation.present"/>
  +        <exclude name="**/webservices/**" unless="activation.present"/>
         </fileset>
       </copy>
     </target>
  @@ -956,6 +975,7 @@
         <fileset dir="${build.scratchpad.src}">
           <include name="**/Manifest.mf"/>
           <include name="**/*.xsl"/>
  +        <include name="**/*.wsdd"/>
           <include name="**/*.roles"/>
           <include name="META-INF/**"/>
         </fileset>
  
  
  
  1.244     +6 -1      xml-cocoon2/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/changes.xml,v
  retrieving revision 1.243
  retrieving revision 1.244
  diff -u -r1.243 -r1.244
  --- changes.xml	9 Sep 2002 15:48:46 -0000	1.243
  +++ changes.xml	9 Sep 2002 17:53:16 -0000	1.244
  @@ -40,6 +40,11 @@
    </devs>
   
    <release version="@version@" date="@date@">
  +  <action dev="MC" type="add" fixes-bug="12304">
  +    Added AxisRPCReader to scratchpad. This reader essentially allows you
  +    to serve SOAP requests from your Cocoon application. Sample webapp with
  +    status page is also included.
  +  </action>
     <action dev="MC" type="update" fixes-bug="12236">
       Updated Jakarta Commons HTTP client jar. Fixes problems with SOAP XSP
       taglib.
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/LICENSE.axis
  
  Index: LICENSE.axis
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, 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 "Axis" 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 (INCLUDING, 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/>.
   */
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/LICENSE.commons-discovery
  
  Index: LICENSE.commons-discovery
  ===================================================================
  /*
   * $Header: /home/cvs/xml-cocoon2/src/scratchpad/lib/LICENSE.commons-discovery,v 1.1 2002/09/09 17:53:17 crafterm Exp $
   * $Revision: 1.1 $
   * $Date: 2002/09/09 17:53:17 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, 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 acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Commons", 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 names without prior written
   *    permission of the Apache Group.
   *
   * 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 (INCLUDING, 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/>.
   *
   */
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/LICENSE.wsdl4j
  
  Index: LICENSE.wsdl4j
  ===================================================================
  Common Public License  
  
  Common Public License Version 0.5 
  
  THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 
  
  
  1. DEFINITIONS 
  
  "Contribution" means: 
  
  a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and 
  b) in the case of each subsequent Contributor:
  i) changes to the Program, and
  ii) additions to the Program;
  where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
  
  "Contributor" means any person or entity that distributes the Program. 
  
  
  "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. 
  
  
  "Program" means the Contributions distributed in accordance with this Agreement. 
  
  
  "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 
  
  
  2. GRANT OF RIGHTS 
  
  a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
  b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
  c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
  d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 
  3. REQUIREMENTS 
  
  A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: 
  
  a) it complies with the terms and conditions of this Agreement; and
  b) its license agreement:
  i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; 
  ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; 
  iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
  iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. 
  When the Program is made available in source code form: 
  
  a) it must be made available under this Agreement; and 
  b) a copy of this Agreement must be included with each copy of the Program. 
  
  Contributors may not remove or alter any copyright notices contained within the Program. 
  
  
  
  Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 
  
  
  4. COMMERCIAL DISTRIBUTION 
  
  Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. 
  
  
  For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 
  
  
  5. NO WARRANTY 
  
  EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 
  
  
  6. DISCLAIMER OF LIABILITY 
  
  EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 
  
  
  7. GENERAL 
  
  If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. 
  
  
  If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. 
  
  
  All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. 
  
  
  Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. 
  
  
  This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. 
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/axis-20020828.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/axis-jaxrpc-20020828.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/axis-saaj-20020828.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/commons-discovery.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/excalibur-util-1.0.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-cocoon2/src/scratchpad/lib/wsdl4j.jar
  
  	<<Binary file>>
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/axis/SoapServer.java
  
  Index: SoapServer.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 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 Cocoon" 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 and was  originally created by
   Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.axis;
  
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.ServletContext;
  
  import org.apache.avalon.framework.activity.Startable;
  import org.apache.avalon.framework.component.Component;
  
  import org.apache.axis.MessageContext;
  
  /**
   * <code>SoapServer</code> interface.
   *
   * <p>
   *  This interface describes the operations provided by any Axis
   *  Soap Server implementations.
   * </p>
   *
   * <p>
   *  Example use:
   *
   *  <pre>
   *    SoapServer server = (SoapServer) manager.lookup(SoapServer.ROLE);
   *    MessageContext message = server.createMessageContext(req, res, con);
   *    server.invoke(message);
   *    manager.release(server);
   *    // message sent back to sender
   *  </pre>
   * </p>
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version CVS $Id: SoapServer.java,v 1.1 2002/09/09 17:53:17 crafterm Exp $
   */
  public interface SoapServer extends Component, Startable
  {
      /**
       * Component's ROLE definition
       */
      String ROLE = SoapServer.class.getName();
  
      /**
       * Constant used to key message context entries for an avalon logger
       */
      String LOGGER = "axis-message-context-logger";
  
      /**
       * Constant used to key message context entries for a component manager
       */
      String COMPONENT_MANAGER = "axis-message-context-cm";
  
      /**
       * Invoke a particular message context on this server. This method
       * takes the given message, invokes it on the server and sets
       * the response inside it for the caller to retrieve.
       *
       * @param message a <code>MessageContext</code> instance
       * @exception Exception if an error occurs
       */
      void invoke(MessageContext message)
          throws Exception;
  
      /**
       * Method to create a new message context, based on this Axis
       * server instance, and the caller's request, response, and 
       * context objects.
       *
       * @param req a <code>HttpServletRequest</code> instance
       * @param res a <code>HttpServletResponse</code> instance
       * @param con a <code>ServletContext</code> instance
       * @return a <code>MessageContext</code> instance
       */
      MessageContext createMessageContext(
          HttpServletRequest req,
          HttpServletResponse res,
          ServletContext con
      );
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/axis/SoapServerImpl.java
  
  Index: SoapServerImpl.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 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 Cocoon" 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 and was  originally created by
   Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.components.axis;
  
  import java.io.ByteArrayOutputStream;
  import java.io.File;
  import java.io.InputStreamReader;
  import java.io.IOException;
  import java.io.OutputStream;
  
  import java.util.ArrayList;
  import java.util.Enumeration;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.Map;
  import java.util.List;
  
  import javax.servlet.ServletContext;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  import javax.servlet.http.HttpServlet;
  
  import javax.xml.soap.SOAPException;
  
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.activity.Startable;
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.component.Composable;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.ContextException;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.thread.ThreadSafe;
  
  import org.apache.avalon.excalibur.xml.Parser;
  import org.apache.excalibur.source.Source;
  import org.apache.excalibur.source.SourceResolver;
  
  import org.apache.cocoon.util.IOUtils;
  
  import org.apache.axis.AxisEngine;
  import org.apache.axis.Constants;
  import org.apache.axis.EngineConfiguration;
  import org.apache.axis.Message;
  import org.apache.axis.MessageContext;
  import org.apache.axis.configuration.FileProvider;
  import org.apache.axis.deployment.wsdd.WSDDDeployment;
  import org.apache.axis.deployment.wsdd.WSDDDocument;
  import org.apache.axis.deployment.wsdd.WSDDService;
  import org.apache.axis.description.OperationDesc;
  import org.apache.axis.description.ServiceDesc;
  import org.apache.axis.handlers.soap.SOAPService;
  import org.apache.axis.security.servlet.ServletSecurityProvider;
  import org.apache.axis.server.AxisServer;
  import org.apache.axis.transport.http.AxisHttpSession;
  import org.apache.axis.transport.http.HTTPConstants;
  import org.apache.axis.transport.http.HTTPTransport;
  import org.apache.axis.transport.http.ServletEndpointContextImpl;
  import org.apache.axis.utils.XMLUtils;
  
  import org.w3c.dom.Document;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;
  
  /**
   * SOAP Server Implementation
   *
   * <p>
   *  This server accepts a SOAP Request, and generates the resultant
   *  response as output. Essentially, this reader allows you to serve SOAP
   *  requests from your Cocoon application.
   * </p>
   *
   * <p>
   *  Code originates from the Apache
   *  <a href="http://xml.apache.org/axis">AXIS</a> project,
   *  <code>org.apache.axis.http.transport.AxisServlet</code>.
   * </p>
   *
   * Ported to Cocoon by:
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   *
   * Original <code>AxisServlet</code> authors:
   *
   * @author <a href="mailto:">Steve Loughran</a>
   * @author <a href="mailto:dug@us.ibm.com">Doug Davis</a>
   * 
   * @version CVS $Id: SoapServerImpl.java,v 1.1 2002/09/09 17:53:17 crafterm Exp $
   */
  public class SoapServerImpl extends AbstractLogEnabled
      implements SoapServer, Composable, Configurable, Contextualizable, Initializable,
                 Startable, ThreadSafe
  {
      /**
       * Constant describing the default location of the server configuration file
       */
      public static final String DEFAULT_SERVER_CONFIG
          = "resource://org/apache/axis/server/server-config.wsdd";
  
      // transport name
      private String m_transportName;
  
      // security provider reference
      private ServletSecurityProvider m_securityProvider;
  
      // JWS output directory
      private String m_jwsClassDir;
  
      // per-instance cache of the axis server
      private AxisServer m_axisServer;
  
      // axis server configuration
      private FileProvider m_engineConfig;
  
      // location of attachments
      private String m_attachmentDir;
  
      // server configuration
      private Source m_serverWSDD;
  
      // array containing locations to descriptors this reader should manage
      private WSDDDocument[] m_descriptors;
  
      // context reference
      private Context m_context;
  
      // component manager reference
      private ComponentManager m_manager;
  
      /**
       * Contextualize this Reader.
       *
       * @param context a <code>Context</code> instance
       * @exception ContextException if an error occurs
       */
      public void contextualize(final Context context)
          throws ContextException
      {
          m_context = context;
      }
  
      /**
       * Compose this server
       *
       * @param manager a <code>ComponentManager</code> value
       * @exception ComponentException if an error occurs
       */
      public void compose(ComponentManager manager)
          throws ComponentException
      {
          m_manager = manager;
      }
  
      /**
       * Configures this reader.
       *
       * <p>
       *  Sets the following optional configuration settings:
       *
       *  <ul>
       *   <li>Server WSDD configuration
       *   <li>Attachment directory
       *   <li>JWS directory
       *   <li>Security provider
       *   <li>Transport name
       *   <li>Mananged services
       *  </ul>
       * </p>
       *
       * <p>
       *  The following format is used:
       *  <pre>
       *   &lt;soap-server&gt;
       *    &lt;server-wsdd src="..."/&gt;
       *    &lt;attachment-dir src="..."/&gt;
       *    &lt;jws-dir src="..."/&gt;
       *    &lt;security-provider enabled="..."/&gt;
       *    &lt;transport name="..."/&gt;
       *    &lt;managed-services&gt;
       *     &lt;descriptor src="..."/&gt;
       *     &lt;descriptor src="..."/&gt;
       *    &lt;/managed-services&gt;
       *   &lt;/soap-server&gt;
       *  </pre>
       * </p>
       *
       * @param config a <code>Configuration</code> instance
       * @exception ConfigurationException if an error occurs
       */
      public void configure(final Configuration config)
          throws ConfigurationException
      {
          try
          {
              if (config != null)
              {
                  setServerConfig(config);
                  setAttachmentDir(config);
                  setJWSDir(config);
                  setSecurityProvider(config);
                  setTransportName(config);
                  setManagedServices(config);
              }
  
              if (getLogger().isDebugEnabled())
              {
                  getLogger().debug("SoapServerImpl.configure() complete");
              }
          }
          catch (final Exception e)
          {
              throw new ConfigurationException("Error during configuration", e);
          }
      }
  
      /**
       * Helper method to set the axis server configuration.
       *
       * @param config a <code>Configuration</code> instance
       * @exception Exception if an error occurs
       */
      public void setServerConfig(final Configuration config)
          throws Exception
      {
          final Configuration wsdd = config.getChild("server-wsdd");
          SourceResolver resolver = null;
  
          try
          {
              resolver = (SourceResolver) m_manager.lookup(SourceResolver.ROLE);
              m_serverWSDD =
                  resolver.resolveURI(
                      wsdd.getAttribute("src", DEFAULT_SERVER_CONFIG)
                  );
          }
          finally
          {
              if (resolver != null) m_manager.release(resolver);
          }
      }
  
      /**
       * Helper method to set the attachment dir. If no attachment directory has
       * been specified, then its set up to operate out of the Cocoon workarea.
       *
       * @param config a <code>Configuration</code> instance
       * @exception ConfigurationException if a configuration error occurs
       * @exception ContextException if a context error occurs
       */
      private void setAttachmentDir(final Configuration config)
          throws ConfigurationException, ContextException
      {
          final Configuration dir = config.getChild("attachment-dir");
          m_attachmentDir = dir.getAttribute("src", null);
  
          if (m_attachmentDir == null)
          {
              File workDir =
                  (File) m_context.get(org.apache.cocoon.Constants.CONTEXT_WORK_DIR);
              File attachmentDir =
                  IOUtils.createFile(workDir, "attachments" + File.separator);
              m_attachmentDir = IOUtils.getFullFilename(attachmentDir);
          }
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("attachment directory = " + m_attachmentDir);
          }
      }
  
      /**
       * Helper method to set the JWS class dir. If no directory is specified then
       * the directory <i>axis-jws</i> is used, under the Cocoon workarea.
       *
       * @param config a <code>Configuration</code> instance
       * @exception ConfigurationException if a configuration error occurs
       * @exception ContextException if a context error occurs
       */
      private void setJWSDir(final Configuration config)
          throws ConfigurationException, ContextException
      {
          final Configuration dir = config.getChild("jws-dir");
          m_jwsClassDir = dir.getAttribute("src", null);
  
          if (m_jwsClassDir == null)
          {
              File workDir =
                  (File) m_context.get(org.apache.cocoon.Constants.CONTEXT_WORK_DIR);
              File jwsClassDir =
                  IOUtils.createFile(workDir, "axis-jws" + File.separator);
              m_jwsClassDir = IOUtils.getFullFilename(jwsClassDir);
          }
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("jws class directory = " + m_jwsClassDir);
          }
      }
  
      /**
       * Helper method to set the security provider.
       *
       * @param config a <code>Configuration</code> instance
       * @exception ConfigurationException if an error occurs
       */
      private void setSecurityProvider(final Configuration config)
          throws ConfigurationException
      {
          final Configuration secProvider =
              config.getChild("security-provider", false);
  
          if (secProvider != null)
          {
              final String attr = secProvider.getAttribute("enabled");
              final boolean providerIsEnabled =
                  "true".equalsIgnoreCase(attr) || "yes".equalsIgnoreCase(attr);
  
              if (providerIsEnabled)
                  m_securityProvider = new ServletSecurityProvider();
          }
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("security provider = " + m_securityProvider);
          }
      }
  
      /**
       * Helper method to set the transport name
       *
       * @param config a <code>Configuration</code> instance
       * @exception ConfigurationException if an error occurs
       */
      private void setTransportName(final Configuration config)
          throws ConfigurationException
      {
          final Configuration name = config.getChild("transport");
          m_transportName =
              name.getAttribute("name", HTTPTransport.DEFAULT_TRANSPORT_NAME);
      }
  
      /**
       * Helper method to obtain a list of managed services from the given
       * configuration (ie. locations of deployement descriptors to be 
       * deployed).
       *
       * @param config a <code>Configuration</code> value
       * @exception Exception if an error occurs
       */
      private void setManagedServices(final Configuration config)
          throws Exception
      {
          final Configuration m = config.getChild("managed-services", false);
          final List descriptors = new ArrayList();
  
          if (m != null)
          {
              SourceResolver resolver = null;
              Parser parser = null;
  
              try
              {
                  final Configuration[] services = m.getChildren("descriptor");
                  resolver = (SourceResolver) m_manager.lookup(SourceResolver.ROLE);
                  parser = (Parser) m_manager.lookup(Parser.ROLE);
  
                  for (int i = 0; i < services.length; ++i)
                  {
                      final String location = services[i].getAttribute("src");
                      Source source = resolver.resolveURI(location);
  
                      final Document d =
                          parser.parseDocument(
                              new InputSource(
                                  new InputStreamReader(source.getInputStream())
                              )
                          );
  
                      descriptors.add(new WSDDDocument(d));
                  }
              }
              finally
              {
                  if (resolver != null) m_manager.release(resolver);
                  if (parser != null) m_manager.release(parser);
              }
          }
  
          // convert the list of descriptors to an array, for easier iteration
          m_descriptors =
              (WSDDDocument[]) descriptors.toArray(new WSDDDocument[]{});
      }
  
      /**
       * Initialize this reader, creates AXIS server engine.
       *
       * @exception Exception if an error occurs
       */
      public void initialize()
          throws Exception
      {
          m_axisServer = createEngine();
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("SoapServerImpl.initialize() complete");
          }
      }
  
      /**
       * Starts this reader. Deploys all managed services as specified at
       * configuration time.
       *
       * @exception Exception if an error occurs
       */
      public void start()
          throws Exception
      {
          // deploy all configured services
          for (int i = 0; i < m_descriptors.length; ++i)
          {
              WSDDDeployment deployment = m_engineConfig.getDeployment();
              m_descriptors[i].deploy(deployment);
  
              if (getLogger().isDebugEnabled())
              {
                  getLogger().debug(
                      "Deployed Descriptor:\n" +
                      XMLUtils.DocumentToString(m_descriptors[i].getDOMDocument())
                  );
              }
          }
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("SoapServerImpl.start() complete");
          }
      }
  
      /**
       * Stops this reader. Undeploys all managed services this reader
       * currently manages (includes services dynamically added to the reader
       * during runtime).
       *
       * @exception Exception if an error occurs
       */
      public void stop()
          throws Exception
      {
          WSDDDeployment deployment = m_engineConfig.getDeployment();
          WSDDService[] services = deployment.getServices();
  
          // undeploy all deployed services
          for (int i = 0; i < services.length; ++i)
          {
              deployment.undeployService(services[i].getQName());
  
              if (getLogger().isDebugEnabled())
              {
                  getLogger().debug("Undeployed: " + services[i].toString());
              }
          }
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("SoapServerImpl.stop() complete");
          }
      }
  
      public void invoke(MessageContext message)
          throws Exception
      {
          m_axisServer.invoke(message);
      }
  
      /**
       * Place the Request message in the MessagContext object - notice
       * that we just leave it as a 'ServletRequest' object and let the
       * Message processing routine convert it - we don't do it since we
       * don't know how it's going to be used - perhaps it might not
       * even need to be parsed.
       */
      public MessageContext createMessageContext(
          HttpServletRequest req,
          HttpServletResponse res,
          ServletContext con
      )
      {
          MessageContext msgContext = new MessageContext(m_axisServer);
          String webInfPath = con.getRealPath("/WEB-INF");
          String homeDir = con.getRealPath("/");
  
          // Set the Transport
          msgContext.setTransportName(m_transportName);
  
          // Save some HTTP specific info in the bag in case someone needs it
          msgContext.setProperty(Constants.MC_JWS_CLASSDIR, m_jwsClassDir);
          msgContext.setProperty(Constants.MC_HOME_DIR, homeDir);
          msgContext.setProperty(Constants.MC_RELATIVE_PATH, req.getServletPath());
          msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLET, this );
          msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST, req );
          msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETRESPONSE, res );
          msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETLOCATION, webInfPath);
          msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETPATHINFO,
                                 req.getPathInfo() );
          msgContext.setProperty(HTTPConstants.HEADER_AUTHORIZATION,
                                 req.getHeader(HTTPConstants.HEADER_AUTHORIZATION));
          msgContext.setProperty(Constants.MC_REMOTE_ADDR, req.getRemoteAddr());
  
          // Add Avalon specifics to MessageContext
          msgContext.setProperty(LOGGER, getLogger());
          msgContext.setProperty(COMPONENT_MANAGER, m_manager);
  
          // Set up a javax.xml.rpc.server.ServletEndpointContext
          ServletEndpointContextImpl sec =
                  new ServletEndpointContextImpl(new AxisHttpSession(req),
                                                 msgContext,
                                                 req.getUserPrincipal(),
                                                 con);
  
          msgContext.setProperty(Constants.MC_SERVLET_ENDPOINT_CONTEXT, sec);
  
          // Save the real path
          String realpath = con.getRealPath(req.getServletPath());
  
          if (realpath != null)
          {
              msgContext.setProperty(Constants.MC_REALPATH, realpath);
          }
  
          msgContext.setProperty(Constants.MC_CONFIGPATH, webInfPath);
  
          if (m_securityProvider != null)
              msgContext.setProperty("securityProvider", m_securityProvider);
  
          // write out the contents of the message context for debugging purposes
          if (getLogger().isDebugEnabled())
          {
              debugMessageContext(msgContext);
          }
  
          return msgContext;
      }
  
      /**
       * Helper method to log the contents of a given message context 
       *
       * @param context a <code>MessageContext</code> instance
       */
      private void debugMessageContext(final MessageContext context)
      {
          for (final Iterator i = context.getPropertyNames();
               i.hasNext();
          )
          {
              final String key = (String) i.next();
              getLogger().debug(
                  "MessageContext: Key:" + key + ": Value: " + context.getProperty(key)
              );
          }
      }
  
  
      /**
       * This is a uniform method of initializing AxisServer in a servlet
       * context.
       */
      public AxisServer createEngine()
          throws Exception
      {
          AxisServer engine = AxisServer.getServer(getEngineEnvironment());
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("Axis engine created");
          }
  
          return engine;
      }
  
      protected Map getEngineEnvironment()
          throws Exception
      {
          Map env = new HashMap();
  
          // use FileProvider directly with a Avalon Source object instead of going
          // through the EngineConfigurationFactoryServlet class
          m_engineConfig = new FileProvider(m_serverWSDD.getInputStream());
  
          env.put(EngineConfiguration.PROPERTY_NAME, m_engineConfig);
          env.put(AxisEngine.ENV_ATTACHMENT_DIR, m_attachmentDir);
          // REVISIT(MC): JNDI Factory support ?
          //env.put(AxisEngine.ENV_SERVLET_CONTEXT, context);
  
          return env;
      }
  
      /**
       * Helper method to convert a <code>Message</code> structure
       * into a <code>String</code>.
       *
       * @param msg a <code>Message</code> value
       * @return a <code>String</code> value
       */
      private String messageToString(final Message msg)
      {
          try
          {
              OutputStream os = new ByteArrayOutputStream();
              msg.writeTo(os);
              return os.toString();
          }
          catch (Exception e)
          {
              if (getLogger().isWarnEnabled())
              {
                  getLogger().warn(
                      "Warning, could not convert message (" + msg + ") into string", e
                  );
              }
  
              return null;
          }
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/axis/soapserver.xconf
  
  Index: soapserver.xconf
  ===================================================================
  <?xml version="1.0"?>
  <xconf xpath="/cocoon" unless="component[@role='org.apache.cocoon.components.axis.SoapServer']">
  
   <component role="org.apache.cocoon.components.axis.SoapServer"
              class="org.apache.cocoon.components.axis.SoapServerImpl"
              logger="core.source.soapserver">
     <managed-services>
       <descriptor src="resource://org/apache/cocoon/webservices/memory/DeploymentDescriptor.wsdd"/>
       <descriptor src="resource://org/apache/cocoon/webservices/system/DeploymentDescriptor.wsdd"/>
       <descriptor src="resource://org/apache/cocoon/webservices/cache/DeploymentDescriptor.wsdd"/>
     </managed-services>
   </component>
  </xconf>
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/components/axis/soapserver.xroles
  
  Index: soapserver.xroles
  ===================================================================
  <?xml version="1.0"?>
  
  <!-- not yet used -->
  <xroles xpath="/role-list" unless="role[@name='org.apache.cocoon.components.axis.SoapServer']">
  
    <role name="org.apache.cocoon.components.axis.SoapServer"
          shorthand="soap-server"
          default-class="org.apache.cocoon.components.axis.SoapServerImpl"/>
  </xroles>
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/reading/AxisRPCReader.java
  
  Index: AxisRPCReader.java
  ===================================================================
  /*
  
   ============================================================================
                     The Apache Software License, Version 1.1
   ============================================================================
  
   Copyright (C) 1999-2002 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 Cocoon" 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 and was  originally created by
   Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
   Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.reading;
  
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  
  import java.util.Map;
  
  import javax.servlet.ServletContext;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import javax.xml.soap.SOAPException;
  
  import org.apache.avalon.framework.activity.Disposable;
  import org.apache.avalon.framework.activity.Startable;
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.component.Composable;
  import org.apache.avalon.framework.parameters.Parameters;
  
  import org.apache.avalon.excalibur.xml.Parser;
  import org.apache.excalibur.source.Source;
  import org.apache.excalibur.source.SourceResolver;
  
  import org.apache.cocoon.components.axis.SoapServer;
  import org.apache.cocoon.environment.http.HttpEnvironment;
  import org.apache.cocoon.environment.ObjectModelHelper;
  import org.apache.cocoon.ProcessingException;
  
  import org.apache.axis.AxisFault;
  import org.apache.axis.Message;
  import org.apache.axis.MessageContext;
  import org.apache.axis.transport.http.AxisHttpSession;
  import org.apache.axis.transport.http.HTTPConstants;
  
  import org.xml.sax.SAXException;
  
  /**
   * SOAP Reader
   *
   * <p>
   *  This reader accepts a SOAP Request, and generates the resultant
   *  response as output. Essentially, this reader allows you to serve SOAP
   *  requests from your Cocoon application.
   * </p>
   *
   * <p>
   *  Code originates from the Apache
   *  <a href="http://xml.apache.org/axis">AXIS</a> project,
   *  <code>org.apache.axis.http.transport.AxisServlet</code>.
   * </p>
   *
   * Ported to Cocoon by:
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   *
   * Original <code>AxisServlet</code> authors:
   *
   * @author <a href="mailto:">Steve Loughran</a>
   * @author <a href="mailto:dug@us.ibm.com">Doug Davis</a>
   */
  public class AxisRPCReader extends ComposerReader
      implements Disposable
  {
  	    
      // soap server reference
      private SoapServer m_server;
  
      /**
       * Compose this reader
       *
       * @param manager a <code>ComponentManager</code> instance
       * @exception ComponentException if an error occurs
       */
      public void compose(final ComponentManager manager)
          throws ComponentException
      {
          super.compose(manager);
  
          // set soap server reference
          m_server = (SoapServer) manager.lookup(SoapServer.ROLE);
      }
  
      /**
       * Axis RPC Router <code>setup</code> method.
       *
       * <p>
       *  This method sets the reader up for use. Essentially it checks that
       *  its been invoked in a HTTP-POST environment, reads some optional
       *  configuration variables, and obtains several component references to
       *  be used later.
       * </p>
       *
       * @param resolver <code>SourceResolver</code> instance
       * @param objectModel request/response/context data
       * @param src source <code>String</code> instance
       * @param parameters sitemap invocation time customization parameters
       * @exception ProcessingException if an error occurs
       * @exception IOException if an error occurs
       * @exception SAXException if an error occurs
       */
      public void setup(
          final org.apache.cocoon.environment.SourceResolver resolver, 
          final Map objectModel,
          final String src,
          final Parameters parameters
      )
          throws ProcessingException, IOException, SAXException
      {
          super.setup(resolver, objectModel, src, parameters); 
  
          checkHTTPPost(objectModel);
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("AxisRPCReader.setup() complete");
          }
      }
  
      /**
       * Helper method to ensure that given a HTTP-POST.
       *
       * @param objectModel Request/Response/Context map.
       * @exception ProcessingException if a non HTTP-POST request has been made.
       */
      private void checkHTTPPost(final Map objectModel)
          throws ProcessingException
      {
          String method = ObjectModelHelper.getRequest(objectModel).getMethod();
  
          if (!"POST".equalsIgnoreCase(method))
              throw new ProcessingException(
                  "Reader only supports HTTP-POST (supplied was " + method + ")"
              );
      }
  
      /**
       * Axis RPC Router <code>generate</code> method.
       *
       * <p>
       *  This method reads the SOAP request in from the input stream, invokes
       *  the requested method and sends the result back to the requestor
       * </p>
       *
       * @exception IOException if an IO error occurs
       * @exception SAXException if a SAX error occurs
       * @exception ProcessingException if a processing error occurs
       */
      public void generate()
          throws IOException, SAXException, ProcessingException
      {
          HttpServletRequest req =
              (HttpServletRequest) objectModel.get(HttpEnvironment.HTTP_REQUEST_OBJECT);
          HttpServletResponse res =
              (HttpServletResponse) objectModel.get(HttpEnvironment.HTTP_RESPONSE_OBJECT);
          ServletContext con =
              (ServletContext) objectModel.get(HttpEnvironment.HTTP_SERVLET_CONTEXT);
  
          String soapAction = null;
          MessageContext msgContext = null;
          Message responseMsg = null;
  
          try
          {
              res.setBufferSize(1024 * 8); // provide performance boost.
  
              // Get message context w/ various properties set
              msgContext = m_server.createMessageContext(req, res, con);
  
              // Get request message
              Message requestMsg =
                  new Message(
                      req.getInputStream(), false,
                      req.getHeader(HTTPConstants.HEADER_CONTENT_TYPE),
                      req.getHeader(HTTPConstants.HEADER_CONTENT_LOCATION)
                  );
  
              if (getLogger().isDebugEnabled())
              {
                  getLogger().debug("Request message:\n" + messageToString(requestMsg));
              }
  
              // Set the request(incoming) message field in the context
              msgContext.setRequestMessage(requestMsg);
  
              try
              {
                  //
                  // Save the SOAPAction header in the MessageContext bag.
                  // This will be used to tell the Axis Engine which service
                  // is being invoked.  This will save us the trouble of
                  // having to parse the Request message - although we will
                  // need to double-check later on that the SOAPAction header
                  // does in fact match the URI in the body.
                  // (is this last stmt true??? (I don't think so - Glen))
                  //
                  soapAction = getSoapAction(req);
  
                  if (soapAction != null)
                  {
                      msgContext.setUseSOAPAction(true);
                      msgContext.setSOAPActionURI(soapAction);
                  }
  
                  // Create a Session wrapper for the HTTP session.
                  msgContext.setSession(new AxisHttpSession(req));
  
                  // Invoke the Axis engine...
                  if(getLogger().isDebugEnabled())
                  {
                      getLogger().debug("Invoking Axis Engine");
                  }
  
                  m_server.invoke(msgContext);
  
                  if(getLogger().isDebugEnabled())
                  {
                      getLogger().debug("Return from Axis Engine");
                  }
  
                  responseMsg = msgContext.getResponseMessage();
              } 
              catch (AxisFault e)
              {
                  if (getLogger().isErrorEnabled())
                  {
                      getLogger().error("Axis Fault", e);
                  }
  
                  // It's been suggested that a lack of SOAPAction
                  // should produce some other error code (in the 400s)...
                  int status = getHttpServletResponseStatus(e);
                  if (status == HttpServletResponse.SC_UNAUTHORIZED)
                  {
                      res.setHeader("WWW-Authenticate","Basic realm=\"AXIS\"");
                  }
  
                  res.setStatus(status);
                  responseMsg = new Message(e);
              }
              catch (Exception e)
              {
                  if (getLogger().isErrorEnabled())
                  {
                      getLogger().error("Error during SOAP call", e);
                  }
  
                  res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                  responseMsg = new Message(AxisFault.makeFault(e));
              }
          }
          catch (AxisFault fault)
          {
              if (getLogger().isErrorEnabled())
              {
                  getLogger().error("Axis fault occured while perforing request", fault);
              }
  
              responseMsg = new Message(fault);
          }
          catch (Exception e)
          {
              throw new ProcessingException("Exception thrown while performing request", e);
          }
  
          // Send response back
          if (responseMsg != null)
          {
              if (getLogger().isDebugEnabled())
              {
                  getLogger().debug("Sending response:\n" + messageToString(responseMsg));
              }
  
              sendResponse(getProtocolVersion(req), res, responseMsg);
          }
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("AxisRPCReader.generate() complete");
          }
      }
  
      /**
       * Extract information from AxisFault and map it to a HTTP Status code.
       *
       * @param af Axis Fault
       * @return HTTP Status code.
       */
      protected int getHttpServletResponseStatus(AxisFault af)
      {
          // This will raise a 401 for both "Unauthenticated" & "Unauthorized"...
          return af.getFaultCode().getLocalPart().startsWith("Server.Unauth")
                     ? HttpServletResponse.SC_UNAUTHORIZED
                     : HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
      }
  
      /**
       * write a message to the response, set appropriate headers for content
       * type..etc.
       * @param clientVersion client protocol, one of the HTTPConstants strings
       * @param res   response
       * @param responseMsg message to write
       * @throws AxisFault
       * @throws IOException if the response stream can not be written to
       */
      private void sendResponse(
          final String clientVersion, HttpServletResponse res, Message responseMsg
      )
          throws AxisFault, IOException
      {
          if (responseMsg == null)
          {
              res.setStatus(HttpServletResponse.SC_NO_CONTENT);
  
              if (getLogger().isDebugEnabled())
              {
                  getLogger().debug("No axis response, not sending one");
              }
          }
          else
          {
              if (getLogger().isDebugEnabled())
              {
                  getLogger().debug("Returned Content-Type:" + responseMsg.getContentType());
                  getLogger().debug("Returned Content-Length:" + responseMsg.getContentLength());
              }
  
              try
              {
                  res.setContentType(responseMsg.getContentType());
                  responseMsg.writeTo(res.getOutputStream());
              }
              catch (SOAPException e)
              {
                  getLogger().error("Exception sending response", e);
              }
          }
  
          if (!res.isCommitted())
          {
              res.flushBuffer(); // Force it right now.
          }
      }
  
      /**
       * Extract the SOAPAction header.
       * if SOAPAction is null then we'll we be forced to scan the body for it.
       * if SOAPAction is "" then use the URL
       * @param req incoming request
       * @return the action
       * @throws AxisFault
       */
      private String getSoapAction(HttpServletRequest req)
          throws AxisFault
      {
          String soapAction = (String)req.getHeader(HTTPConstants.HEADER_SOAP_ACTION);
  
          if (getLogger().isDebugEnabled())
          {
              getLogger().debug("HEADER_SOAP_ACTION:" + soapAction);
          }
  
          //
          // Technically, if we don't find this header, we should probably fault.
          // It's required in the SOAP HTTP binding.
          //
          if (soapAction == null)
          {
              throw new AxisFault(
                        "Client.NoSOAPAction",
                        "No SOAPAction header",
                        null, null
                    );
          }
  
          if (soapAction.length() == 0)
              soapAction = req.getContextPath(); // Is this right?
  
          return soapAction;
      }
  
      /**
       * Return the HTTP protocol level 1.1 or 1.0
       * by derived class.
       */
      private String getProtocolVersion(HttpServletRequest req){
          String ret = HTTPConstants.HEADER_PROTOCOL_V10;
          String prot = req.getProtocol();
          if (prot!= null) {
              int sindex= prot.indexOf('/');
              if (-1 != sindex) {
                  String ver= prot.substring(sindex+1);
                  if (HTTPConstants.HEADER_PROTOCOL_V11.equals(ver.trim())) {
                      ret = HTTPConstants.HEADER_PROTOCOL_V11;
                  }
              }
          }
          return ret;
      }
  
      /**
       * Helper method to convert a <code>Message</code> structure
       * into a <code>String</code>.
       *
       * @param msg a <code>Message</code> value
       * @return a <code>String</code> value
       */
      private String messageToString(final Message msg)
      {
          try
          {
              OutputStream os = new ByteArrayOutputStream();
              msg.writeTo(os);
              return os.toString();
          }
          catch (Exception e)
          {
              if (getLogger().isWarnEnabled())
              {
                  getLogger().warn(
                      "Warning, could not convert message (" + msg + ") into string", e
                  );
              }
  
              return null;
          }
      }
  
      /**
       * Dispose this reader. Release all held resources.
       */
      public void dispose()
      {
          manager.release(m_server);
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/webservices/AbstractComposableService.java
  
  Index: AbstractComposableService.java
  ===================================================================
  /*
  
  ============================================================================
                    The Apache Software License, Version 1.1
  ============================================================================
  
  Copyright (C) 1999-2002 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 Cocoon" 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 and was  originally created by
  Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
  Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.webservices;
  
  import javax.xml.rpc.ServiceException;
  
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.component.Composable;
  
  // FIXME(MC) or use Constants ?
  import org.apache.cocoon.components.axis.SoapServer;
  
  /**
   * Base class for providing Composable SOAP services
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version CVS $Id: AbstractComposableService.java,v 1.1 2002/09/09 17:53:17 crafterm Exp $
   */
  public abstract class AbstractComposableService
      extends AbstractLogEnabledService
      implements Composable {
  	    
      // component manager reference
      protected ComponentManager m_manager;
  
      /**
       * ServiceLifecycle <code>init</code> method. Updates an internal
       * reference to the given context object, and enables logging for
       * this service.
       *
       * @param context a javax.xml.rpc.ServiceLifecycle context
       *                <code>Object</code> instance
       * @exception ServiceException if an error occurs
       */
      public void init(final Object context) throws ServiceException {
          super.init(context);
  
          try {
              setComponentManager();
  
          } catch (ComponentException e) {
              throw new ServiceException("ComponentException generated", e);
          }
      }
  
      /**
       * Compose this service.
       *
       * @param manager a <code>ComponentManager</code> instance
       * @exception ComponentException if an error occurs
       */
      public void compose(final ComponentManager manager) throws ComponentException {
          m_manager = manager;
      }
  
      /**
       * Helper method to extract the ComponentManager reference
       * from the context.
       * @exception ComponentException if an error occurs
       */
      private void setComponentManager() throws ComponentException {
          compose(
              (ComponentManager) m_context.getProperty(
                  SoapServer.COMPONENT_MANAGER
              )
          );
      }
  
      /**
       * Called by the JAX-RPC runtime to signal the end of this service
       */
      public void destroy() {
          super.destroy();
  
          m_manager = null;
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/webservices/AbstractLogEnabledService.java
  
  Index: AbstractLogEnabledService.java
  ===================================================================
  /*
  
  ============================================================================
                    The Apache Software License, Version 1.1
  ============================================================================
  
  Copyright (C) 1999-2002 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 Cocoon" 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 and was  originally created by
  Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
  Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.webservices;
  
  import javax.xml.rpc.handler.MessageContext;
  import javax.xml.rpc.server.ServiceLifecycle;
  import javax.xml.rpc.server.ServletEndpointContext;
  import javax.xml.rpc.ServiceException;
  
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.logger.Logger;
  
  import org.apache.cocoon.components.axis.SoapServer; // or use Constants ?
  
  /**
   * Base class for providing LogEnabled SOAP services
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version CVS $Id: AbstractLogEnabledService.java,v 1.1 2002/09/09 17:53:17 crafterm Exp $
   */
  public abstract class AbstractLogEnabledService
      extends AbstractLogEnabled
      implements ServiceLifecycle {
  	    
      // servlet endpoint context reference
      protected ServletEndpointContext m_endPointContext;
  
      // message context reference
      protected MessageContext m_context;
  
      /**
       * ServiceLifecycle <code>init</code> method. Updates an internal
       * reference to the given context object, and enables logging for
       * this service.
       *
       * @param context a javax.xml.rpc.ServiceLifecycle context
       *                <code>Object</code> instance
       * @exception ServiceException if an error occurs
       */
      public void init(final Object context) throws ServiceException {
          setContext(context);
          setLogger();
      }
  
      /**
       * Helper method to set the internal context reference for future
       * use.
       *
       * @param context a javax.xml.rpc.ServiceLifecycle context
       *                <code>Object</code> instance
       * @exception ServiceException if an error occurs
       */
      private void setContext(final Object context) throws ServiceException {
          try {
              m_endPointContext = (ServletEndpointContext) context;
  
          } catch (final ClassCastException e) {
              throw new ServiceException(
                  "Service requires ServletEndPointContext, supplied was " + context, e
              );
          }
  
          m_context = m_endPointContext.getMessageContext();
      }
  
      /**
       * Helper method to obtain the Avalon <code>Logger</code> object out of 
       * the context object and enable logging for this service.
       */
      private void setLogger() {
          enableLogging((Logger) m_context.getProperty(SoapServer.LOGGER));
      }
  
      /**
       * Called by the JAX-RPC runtime to signal the end of this service
       */
      public void destroy() {
          m_context = null;
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/webservices/cache/Cache.java
  
  Index: Cache.java
  ===================================================================
  /*
  
  ============================================================================
                    The Apache Software License, Version 1.1
  ============================================================================
  
  Copyright (C) 1999-2002 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 Cocoon" 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 and was  originally created by
  Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
  Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.webservices.cache;
  
  import org.apache.avalon.framework.component.ComponentException;
  
  import org.apache.excalibur.store.Store;
  import org.apache.cocoon.webservices.AbstractComposableService;
  
  /**
   * Class which provides Cocoon cache related SOAP services.
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version CVS $Id: Cache.java,v 1.1 2002/09/09 17:53:18 crafterm Exp $
   */
  public class Cache extends AbstractComposableService {
  	
      /**
       * <code>clear</code> method clears the Cocoon cache.
       *
       * @exception ComponentException if an error occurs
       */
      public void clear() throws ComponentException {
          Store store = null;
  
          try {
              store = (Store) m_manager.lookup(Store.TRANSIENT_STORE);
              store.clear();
  
              if (getLogger().isDebugEnabled()) {
                  getLogger().debug("Cocoon cache cleared");
              }
          } finally {
              if (store != null)
                  m_manager.release(store);
          }
      }
  
      /**
       * <code>size</code> returns the count of objects in the store.
       *
       * @return the count of objects in the store, -1 if unavailable
       * @exception ComponentException if an error occurs
       */
      public int getSize() throws ComponentException {
          Store store = null;
  
          try {
              store = (Store) m_manager.lookup(Store.TRANSIENT_STORE);
              return store.size();
          } finally {
              if (store != null)
                  m_manager.release(store);
          }
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/webservices/cache/DeploymentDescriptor.wsdd
  
  Index: DeploymentDescriptor.wsdd
  ===================================================================
  <deployment xmlns="http://xml.apache.org/axis/wsdd/"
              xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  
   <service name="Cocoon-Cache" provider="java:RPC">
    <parameter name="className" value="org.apache.cocoon.webservices.cache.Cache"/>
    <parameter name="allowedMethods" value="clear getSize"/>
   </service>
  
  </deployment>
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/webservices/memory/DeploymentDescriptor.wsdd
  
  Index: DeploymentDescriptor.wsdd
  ===================================================================
  <deployment xmlns="http://xml.apache.org/axis/wsdd/"
              xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  
   <service name="Cocoon-JVM-Memory" provider="java:RPC">
    <parameter name="className" value="org.apache.cocoon.webservices.memory.Memory"/>
    <parameter name="allowedMethods" value="getFreeMemory getTotalMemory invokeGC"/>
   </service>
  
  </deployment>
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/webservices/memory/Memory.java
  
  Index: Memory.java
  ===================================================================
  /*
  
  ============================================================================
                    The Apache Software License, Version 1.1
  ============================================================================
  
  Copyright (C) 1999-2002 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 Cocoon" 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 and was  originally created by
  Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
  Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.webservices.memory;
  
  /**
   * Class which provides JVM memory related SOAP services.
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version CVS $Id: Memory.java,v 1.1 2002/09/09 17:53:18 crafterm Exp $
   */
  public class Memory {
  	
      // static reference to the runtime object.
      private static final Runtime runtime = Runtime.getRuntime();
  
      /**
       * <code>getFreeMemory</code> returns the amount of free memory
       * in the system.
       *
       * @return the amount of free memory in the system
       */
      public static long getFreeMemory() {
          return runtime.freeMemory();
      }
  
      /**
       * <code>getTotalMemory</code> returns the total amount of memory
       * in the JVM.
       *
       * @return the total amount of memory in the JVM
       */
      public static long getTotalMemory() {
          return runtime.totalMemory();
      }
  
      /**
       * <code>invokeGC</code> calls upon the JVM Garbage Collector to
       * recycle unused objects.
       */
      public static void invokeGC() {
          runtime.gc();
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/webservices/system/DeploymentDescriptor.wsdd
  
  Index: DeploymentDescriptor.wsdd
  ===================================================================
  <deployment xmlns="http://xml.apache.org/axis/wsdd/"
              xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  
   <service name="Cocoon-JVM-System" provider="java:RPC">
    <parameter name="className" value="org.apache.cocoon.webservices.system.System"/>
    <parameter name="allowedMethods" value="getProperties getArchitecture getCPUInfo getNumProcessors getOperatingSystem getOperatingSystemVersion"/>
   </service>
  
  </deployment>
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/src/org/apache/cocoon/webservices/system/System.java
  
  Index: System.java
  ===================================================================
  /*
  
  ============================================================================
                    The Apache Software License, Version 1.1
  ============================================================================
  
  Copyright (C) 1999-2002 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 Cocoon" 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 and was  originally created by
  Stefano Mazzocchi  <st...@apache.org>. For more  information on the Apache
  Software Foundation, please see <http://www.apache.org/>.
  
  */
  package org.apache.cocoon.webservices.system;
  
  import java.util.Properties;
  import org.apache.excalibur.util.SystemUtil;
  
  /**
   * Class which provides JVM system related SOAP services.
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version CVS $Id: System.java,v 1.1 2002/09/09 17:53:18 crafterm Exp $
   */
  public class System {
  	
      /**
       * <code>getProperties</code> returns the current System Properties object.
       *
       * @return a <code>Properties</code> instance
       */
      public Properties getProperties() {
          return java.lang.System.getProperties();
      }
  
      /**
       * <code>getArchitecture</code> returns the host architecture.
       *
       * @return host architecture
       */
      public String getArchitecture() {
          return SystemUtil.architecture();
      }
  
      /**
       * <code>getCPUInfo</code> returns host CPU information.
       *
       * @return host CPU information
       */
      public String getCPUInfo() {
          return SystemUtil.cpuInfo();
      }
  
      /**
       * <code>getNumProcessors</code> returns the number of processors in
       * this machine.
       *
       * @return number of processors
       */
      public int getNumProcessors() {
          return SystemUtil.numProcessors();
      }
  
      /**
       * <code>getOperatingSystem</code> returns the host operating system
       *
       * @return host operating system
       */
      public String getOperatingSystem() {
          return SystemUtil.operatingSystem();
      }
  
      /**
       * <code>getOperatingSystemVersion</code> returns the host operating system
       * version
       *
       * @return host operating system version
       */
      public String getOperatingSystemVersion() {
          return SystemUtil.osVersion();
      }
  }
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/webapp/samples/soap-server/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:transformers default="xslt"/>
  <map:serializers default="html"/>
  <map:matchers default="wildcard"/>
  <map:selectors default="browser"/>
  <map:actions/>
  
  <map:readers default="resource">
  
    <!-- Defines a SOAP RPC reader that will serve SOAP requests via HTTP-POST. -->
    <map:reader logger="sitemap.reader.soap-rpc" name="soap-rpc"
                src="org.apache.cocoon.reading.AxisRPCReader"/>
  
  </map:readers>
  
  </map:components>
  
  <!-- =========================== Pipelines ================================= -->
  
  <map:pipelines>
    
    <!-- sub-sitemap soap example pipeline -->
    <map:pipeline>
  
      <!-- Match SOAP RPC Router requests -->
      <map:match pattern="rpcrouter">
        <map:read type="soap-rpc" mime-type="text/xml"/>
      </map:match>
  
      <!-- Send all non qualified requests to the status page -->
      <map:match pattern="">
        <map:redirect-to uri="status.xsp"/>
      </map:match>
  
      <map:match pattern="status.xsp">
        <map:generate type="serverpages" src="status.xsp"/>
        <map:transform src="status.xsl"/>
        <map:serialize type="html"/>
      </map:match>
  
      <!-- Match any other xsp pages we've put in the directory -->
      <map:match pattern="*.xsp">
        <map:generate type="serverpages" src="{1}.xsp"/>
        <map:serialize type="xml"/>
      </map:match>
  
    </map:pipeline>
  </map:pipelines>
  
  </map:sitemap>
  
  <!-- end of file -->
  
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/webapp/samples/soap-server/status.xsl
  
  Index: status.xsl
  ===================================================================
  <?xml version="1.0" encoding="iso-8859-1"?>
  
  <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
      xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
      xmlns:a="http://xml.apache.org/axis/wsdd/">
      
      <xsl:template match="/page/soapenv:Envelope/soapenv:Body/a:deployment">
          <html>
              <head>
                  <title>SOAP Server</title>
              </head>
          <body>
              <center><h1>Cocoon SOAP Server Status</h1></center>
  
              <hr/>
  
              <p>Welcome to the Cocoon SOAP server status page</p>
  
              <p>
                  The SOAP server is currently active and the following
                  services are deployed:
              </p>
  
              <p>
                  <ul>
                      <xsl:apply-templates select="a:service"/>
                  </ul>
              </p>
          </body>
  	</html>
      </xsl:template>
      
      <xsl:template match="a:service">
          <li>
              <p><b><xsl:value-of select="@name"/></b></p>
  
              <p>
                  Class:
  
                  <xsl:apply-templates select="a:parameter[@name='className']"/>
  
                  <br/>
  
                  Provider:
  
                  <i><xsl:value-of select="@provider"/></i>
  
                  <br/>
  
                  Methods:
  
                  <xsl:apply-templates select="a:parameter[@name='allowedMethods']"/>
              </p>
          </li>
      </xsl:template>
  
      <xsl:template match="a:parameter">
          <i><xsl:value-of select="@value"/></i>
      </xsl:template>
  
  </xsl:stylesheet>
  
  
  
  1.1                  xml-cocoon2/src/scratchpad/webapp/samples/soap-server/status.xsp
  
  Index: status.xsp
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <xsp:page
    language="java"
    xmlns:xsp="http://apache.org/xsp"
    xmlns:xsp-request="http://apache.org/xsp/request/2.0"
    xmlns:xscript="http://apache.org/xsp/xscript/1.0"
    xmlns:soap="http://apache.org/xsp/soap/3.0">
  <page>
    <soap:call method="AdminService" url="rpcrouter">
      <m:list xmlns:m="http://xml.apache.org/axis/wsdd/"/>
    </soap:call>
  </page>
  </xsp:page>
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org