tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cos...@locus.apache.org
Subject cvs commit: jakarta-tomcat/src/share/org/apache/tomcat/util XmlHelper.java
Date Tue, 25 Jan 2000 01:11:57 GMT
costin      00/01/24 17:11:57

  Modified:    src/etc  SimpleStartup.java
               src/share/org/apache/tomcat/core Context.java
                        ContextManager.java RequestDispatcherImpl.java
                        ResponseImpl.java
               src/share/org/apache/tomcat/shell Startup.java
               src/share/org/apache/tomcat/util XmlHelper.java
  Added:       src/share/org/apache/tomcat/core TomcatException.java
  Log:
  - Added ApacheConfig - it will generate apache.conf ( part of "automated
  configuration" process ).
  Still needed:
  - generate apache configs for authentication
  -  use the information that we pass !
  - what to do with people who want to hand-edit the files ?
  ( right now they can use manual config or automatic, but not both )
  
  - Added TomcatException ( Thanks Conor MacNeill <conor@m64.com>)
  
  Submitted by:   Conor MacNeill <conor@m64.com>
  
  Revision  Changes    Path
  1.3       +108 -132  jakarta-tomcat/src/etc/SimpleStartup.java
  
  Index: SimpleStartup.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/etc/SimpleStartup.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SimpleStartup.java	1999/10/12 05:42:09	1.2
  +++ SimpleStartup.java	2000/01/25 01:11:53	1.3
  @@ -1,148 +1,124 @@
  -/*
  - * $Header: /home/cvs/jakarta-tomcat/src/etc/SimpleStartup.java,v 1.2 1999/10/12 05:42:09
craigmcc Exp $
  - * $Revision: 1.2 $
  - * $Date: 1999/10/12 05:42:09 $
  - *
  - * ====================================================================
  - *
  - * 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 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", "Tomcat", 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/>.
  - *
  - * [Additional notices, if required by prior licensing conditions]
  - *
  - */ 
  -
  -
  -import org.apache.tomcat.core.*;
  -import org.apache.tomcat.server.*;
  -import java.net.*;
  +From MAILER-DAEMON Thu Jan 20 00:37:28 2000
  +Date: Thu, 20 Jan 2000 00:37:28 -0800 (PST)
  +From: Mail System Internal Data <MAILER-DAEMON@costin>
  +Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
  +X-IMAP: 0948357448 0000000000
  +Status: RO
  +
  +This text is part of the internal format of your mail folder, and is not
  +a real message.  It is created automatically by the mail system software.
  +If deleted, important folder data will be lost, and it will be re-created
  +with the data reset to initial values.
  +
  +From costin  Thu Jan 20 00:14:35 2000
  +Received: from localhost
  +	by localhost with IMAP (fetchmail-5.1.0)
  +	for costin@localhost (single-drop); Thu, 20 Jan 2000 00:14:35 -0800 (PST)
  +Received: from locus.apache.org ([63.211.145.10])
  +	by costin.dnt.ro (8.9.3+Sun/8.9.1) with SMTP id HAA12921
  +	for <costin@costin.dnt.ro>; Thu, 20 Jan 2000 07:18:42 -0800 (PST)
  +Received: (qmail 77679 invoked by uid 500); 20 Jan 2000 15:18:38 -0000
  +Mailing-List: contact tomcat-dev-help@jakarta.apache.org; run by ezmlm
  +Precedence: bulk
  +X-No-Archive: yes
  +list-help: <mailto:tomcat-dev-help@jakarta.apache.org>
  +list-unsubscribe: <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
  +list-post: <mailto:tomcat-dev@jakarta.apache.org>
  +Reply-To: tomcat-dev@jakarta.apache.org
  +Delivered-To: mailing list tomcat-dev@jakarta.apache.org
  +Delivered-To: moderator for tomcat-dev@jakarta.apache.org
  +Received: (qmail 467 invoked from network); 20 Jan 2000 04:35:34 -0000
  +X-Authentication-Warning: csmail.net: Host ppp-62.newinet.net [208.11.194.62] claimed to
be dustin
  +Message-ID: <001a01bf6300$1ea93a20$3ec20bd0@sourcestream.com>
  +From: "Dustin Callaway" <callaway@sourcestream.com>
  +To: <tomcat-dev@jakarta.apache.org>
  +Subject: SimpleStartup.java fix...
  +Date: Wed, 19 Jan 2000 21:37:50 -0700
  +MIME-Version: 1.0
  +Content-Type: multipart/alternative;
  +	boundary="----=_NextPart_000_0017_01BF62C5.6F91AAC0"
  +X-Priority: 3
  +X-MSMail-Priority: Normal
  +X-Mailer: Microsoft Outlook Express 5.00.2314.1300
  +X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2314.1300
  +Content-Length: 1982
  +Status: RO
  +X-Status: 
  +X-Keywords:
  +
  +------=_NextPart_000_0017_01BF62C5.6F91AAC0
  +Content-Type: text/plain;
  +	charset="iso-8859-1"
  +Content-Transfer-Encoding: quoted-printable
  +
  +The following SimpleStartup.java class starts the Tomcat HttpServer from =
  +within a Java application. This allows for servlet debugging from within =
  +an IDE. Many thanks to Jim Rudnicki for the sample code (which I just =
  +cleaned up and simplified). Place this application in the /tomcat =
  +directory and run it from there.
   
  +
  +import org.apache.tomcat.server.HttpServer;
  +import java.net.URL;
  +
   /**
  - * This is a very simple example of how to start up the HttpServer
  - * from any Java based program. Note that this example uses APIs
  - * which are not yet finalized and subject to change. Use such
  - * information at your own risk.
  + * SimpleStartup starts the Tomcat HttpServer in a Java
  + * application to allow for debugging within an IDE.
    */
  +public class SimpleStartup
  +{
  +  public static void main(String[] args)
  +  {
  +    try
  +    {
  +      HttpServer server =3D new HttpServer(8080, null, null);
   
  -public class SimpleStartup {
  +      URL url =3D resolveURL("webpages");
  +      server.getContextManager().setDocumentBase(url);
   
  -    /**
  -     * The application main program.
  -     *
  -     * @param args The command line arguments submitted to this program
  -     */
  -    public static void main(String[] args) {
  -	int port = 8080;
  -	InetAddress inet = null; // null uses all inets on the machine
  -	String hostname = null;
  -	HttpServer server = new HttpServer(port, inet, hostname);
  -	try {
  -	    URL url = resolveURL("webpages");
  -	    server.setDocumentBase(url);
  -	    System.out.println("Starting with docbase of: " + url);
  -	    server.start();
  -	} catch (MalformedURLException mue) {
  -	    System.out.println("Malformed URL Exception for doc root");
  -	    System.out.println(mue.getMessage());
  -	} catch (HttpServerException hse) {
  -	    System.out.println("Server threw an exception while running");
  -	    System.out.println(hse.getMessage());
  -	}
  +      url =3D resolveURL("examples");
  +      server.addContext("/examples", url);
   
  -	// when you want to stop the server, simply call
  -	// server.stop();
  +      server.start(); //start the server
       }
  -    
  -
  -    /**
  -     * Convert the specified String into a URL, according to the following
  -     * rules:
  -     * <ul>
  -     * <li>If the string contains the magic characters <code>:/</code>,
  -     *     assume that it is an actual URL and do nothing.
  -     * <li>If the string starts with a <code>/</code> character, assume
that
  -     *     it is an absolute pathname on the local filesystem.
  -     * <li>Otherwise, assume that the string represents a directory
  -     *     or file in the current working directory.
  -     * </ul>
  -     *
  -     * @param s The string to be converted
  -     */
  -    private static URL resolveURL(String s) throws MalformedURLException {
  -	// if the string contains the magic :/, then we assume
  -	// that it's a real URL and do nothing
  -	
  -	if (s.indexOf(":/") > -1) {
  -	    return new URL(s);
  -	}
  -	    
  -	// otherwise, we assume that we've got a file name and
  -	// need to construct a file url appropriatly.
  -	
  -	if (s.startsWith("/")) {
  -	    return new URL("file", null, s);
  -	} else {
  -	    String pwd = System.getProperty("user.dir");
  -	    return new URL("file", null, pwd + "/" + s);
  -	}
  +    catch (Exception e)
  +    {
  +      System.out.println("Error: " + e);
       }
  -
  -
  -}
  +  }
   
   
  +  private static URL resolveURL(String s) throws Exception
  +  {
  +    // if the string contains :/, then we assume that it's a real URL =
  +and do nothing
  +    if (s.indexOf(":/") > -1)
  +    {
  +        return new URL(s);
  +    }
   
  +    // otherwise, we assume that we've got a file name and
  +    // need to construct a file url appropriatly.
  +    if (s.startsWith("/"))
  +    {
  +      return new URL("file", null, s);
  +    }
  +    else
  +    {
  +      String pwd =3D System.getProperty("user.dir");
  +      return new URL("file", null, pwd + "/" + s);
  +    }
  +  }
  +}
   
   
  +That's it. Register your servlet in the web.xml file, set a breakpoint =
  +in your servlet using an IDE (JBuilder, Visual Cafe, etc.), and invoke =
  +the servlet from a browser (execution should stop at your breakpoint). =
  +Thanks for the tip, Jim!
   
  +Dustin Callaway
  +(callaway@sourcestream.com)
   
  +------=_NextPart_000_0017_01BF62C5.6F91AAC0--
   
  
  
  
  1.34      +1 -0      jakarta-tomcat/src/share/org/apache/tomcat/core/Context.java
  
  Index: Context.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/Context.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- Context.java	2000/01/15 03:52:56	1.33
  +++ Context.java	2000/01/25 01:11:54	1.34
  @@ -155,6 +155,7 @@
       int debug=0;
       
       public Context() {
  +	//	System.out.println("New Context ");
       }
   	
       // -------------------- Settable context properties --------------------
  
  
  
  1.24      +26 -1     jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java
  
  Index: ContextManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ContextManager.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- ContextManager.java	2000/01/15 23:30:19	1.23
  +++ ContextManager.java	2000/01/25 01:11:54	1.24
  @@ -114,6 +114,9 @@
       int port;
   
       String workDir;
  +
  +    // Instalation directory  
  +    String home;
       
       Vector connectors=new Vector();
   
  @@ -152,7 +155,7 @@
   	    // XXX find a better exception 
   	    throw new IllegalArgumentException("No default context " + defaultContext);
   	}
  -
  +	
   	if( requestInterceptors.size() == 0 ) {
   	    // nothing set up by starter, add default ones
   	    if(debug>0) log("Setting default interceptors " + requestInterceptors);
  @@ -170,6 +173,11 @@
               Context context = getContext((String)enum.nextElement());
               context.init();
   	}
  +
  +	// XXX make it configurable - all actions in this method will
  +	// be replaced with Interceptors or Tasks. 
  +	org.apache.tomcat.task.ApacheConfig apacheConfig=new org.apache.tomcat.task.ApacheConfig();
  +	apacheConfig.execute( this );
       }
   
       public void stop() throws Exception {
  @@ -212,6 +220,7 @@
        * @param ctx context to be added.
        */
       public void addContext( Context ctx ) {
  +	//	System.out.println("Add context ");
   	ctx.setContextManager( this );
   	// assert "valid path" 
   
  @@ -259,6 +268,22 @@
       }
       
       // -------------------- Defaults for all contexts --------------------
  +    /** The root directory of tomcat
  +     */
  +    public String getHome() {
  +	if( home != null ) return home;
  +	// XXX check if TOMCAT_HOME env is set 
  +
  +	// Convert "." to absolute path
  +	home=new File("").getAbsolutePath();
  +	return home;
  +    }
  +    
  +    /** Set instalation directory
  +     */
  +    public void setHome(String home) {
  +	this.home=home;
  +    }
       
       /**
        * Sets the port number on which this server listens.
  
  
  
  1.13      +4 -2      jakarta-tomcat/src/share/org/apache/tomcat/core/RequestDispatcherImpl.java
  
  Index: RequestDispatcherImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/RequestDispatcherImpl.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- RequestDispatcherImpl.java	2000/01/21 23:20:34	1.12
  +++ RequestDispatcherImpl.java	2000/01/25 01:11:54	1.13
  @@ -202,7 +202,6 @@
   	subRequest.setResponse( realResponse );
   	
   	context.getContextManager().processRequest(subRequest);
  -
   	// Now subRequest containse the processed and aliased paths, plus
   	// the wrapper that will handle the request.
   
  @@ -243,7 +242,10 @@
   
   	addQueryString( realRequest, queryString );
   
  -	// now it's really strange: we call the wrapper on the subrequest
  +// 	System.out.println("Lookup : " + subRequest );
  +// 	System.out.println();
  +// 	System.out.println("Req: " + realRequest);
  + 	// now it's really strange: we call the wrapper on the subrequest
   	// for the realRequest ( since the real request will still have the
   	// original handler/wrapper )
   	subRequest.getWrapper().handleRequest(realRequest.getFacade() , iResponse);
  
  
  
  1.8       +8 -3      jakarta-tomcat/src/share/org/apache/tomcat/core/ResponseImpl.java
  
  Index: ResponseImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ResponseImpl.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ResponseImpl.java	2000/01/15 23:30:21	1.7
  +++ ResponseImpl.java	2000/01/25 01:11:54	1.8
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ResponseImpl.java,v
1.7 2000/01/15 23:30:21 costin Exp $
  - * $Revision: 1.7 $
  - * $Date: 2000/01/15 23:30:21 $
  + * $Header: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/core/ResponseImpl.java,v
1.8 2000/01/25 01:11:54 costin Exp $
  + * $Revision: 1.8 $
  + * $Date: 2000/01/25 01:11:54 $
    *
    * ====================================================================
    *
  @@ -594,6 +594,11 @@
   	try {
   	    PrintWriter out = getWriter();
   	    out.close();
  +	} catch (IOException err) {
  +	    if("Broken pipe".equals( err.getMessage()))
  +		System.out.println("Broken pipe");
  +	    else
  +		throw err;
   	} catch (IllegalStateException ise) {
   	    ServletOutputStream out = getOutputStream();
   	    out.close();
  
  
  
  1.1                  jakarta-tomcat/src/share/org/apache/tomcat/core/TomcatException.java
  
  Index: TomcatException.java
  ===================================================================
  /*
   * ====================================================================
   *
   * 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 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", "Tomcat", 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/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */
  
  
  package org.apache.tomcat.core;
  
  
  /**
   * General Tomcat exception
   *
   * @author Conor MacNeill [conor@m64.com]
   */
  public class TomcatException extends Exception {
  
      private Throwable rootCause;
  
      public TomcatException() {
          super();
      }
  
      public TomcatException(String msg) {
          super(msg);
      }
  
      /**
       * Create a connector exception to encapsulate some underlying eception.
       */
      public TomcatException(Throwable rootCause) {
          super("Root cause - " + rootCause.getLocalizedMessage());
          this.rootCause = rootCause;
      }
  
      /**
       * Create a connector exception to encapsulate some underlying eception.
       */
      public TomcatException(String msg, Throwable rootCause) {
          super(msg);
          this.rootCause = rootCause;
      }
  
      /**
       * Get the underlying exception that caused this ConnectorException.
       *
       * @return the <code>Throwable</code>
       *         that caused this connector exception
       */
      public Throwable getRootCause() {
          return rootCause;
      }
  }
  
  
  
  1.13      +4 -1      jakarta-tomcat/src/share/org/apache/tomcat/shell/Startup.java
  
  Index: Startup.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/shell/Startup.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- Startup.java	2000/01/15 06:45:46	1.12
  +++ Startup.java	2000/01/25 01:11:55	1.13
  @@ -79,6 +79,7 @@
   
   public class Startup {
   
  +    boolean isRmi=false; 
       protected StringManager sm =
           StringManager.getManager(Constants.Package);
       
  @@ -113,7 +114,9 @@
   
   	ServerConfig serverConfig = config.getServerConfig();
   
  -        Registry registry= createRegistry(serverConfig.getAdminPort());
  +	Registry registry=null;
  +	if( isRmi )
  +	    registry = createRegistry(serverConfig.getAdminPort());
   	Enumeration contextManagers = serverConfig.getContextManagers();
   
   	while (contextManagers.hasMoreElements()) {
  
  
  
  1.4       +4 -4      jakarta-tomcat/src/share/org/apache/tomcat/util/XmlHelper.java
  
  Index: XmlHelper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/XmlHelper.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XmlHelper.java	2000/01/15 06:45:47	1.3
  +++ XmlHelper.java	2000/01/25 01:11:56	1.4
  @@ -255,14 +255,14 @@
   	    if( attributes.getValue("type") != null )
   		elem=helper.getObjectForTag( tag + "." + attributes.getValue("type"));
   
  -	    // Normal tag <foo> - mapped to org.bar.Foo, will construct a new Foo.
  -	    if( elem==null)
  -		elem=helper.getObjectForTag( tag );
  -
   	    // Another attempt - if className exists, use it as java type
   	    if( attributes.getValue("className") != null )
   		elem=helper.getObjectForClassName( attributes.getValue( "className" ));
   	    
  +	    // Normal tag <foo> - mapped to org.bar.Foo, will construct a new Foo.
  +	    if( elem==null)
  +		elem=helper.getObjectForTag( tag );
  +
   	    if( elem ==null ) {
   		System.out.println("Can't map " + tag );
   		return;
  
  
  

Mime
View raw message