Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
  * Conditions Of Use
  *
  * This software was developed by employees of the National Institute of
  * Standards and Technology (NIST), an agency of the Federal Government.
  * Pursuant to title 15 Untied States Code Section 105, works of NIST
  * employees are not subject to copyright protection in the United States
  * and are considered to be in the public domain.  As a result, a formal
  * license is not needed to use the software.
 *
 * This software is provided by NIST as a service and is expressly
 * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
 * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
 * AND DATA ACCURACY.  NIST does not warrant or make any representations
 * regarding the use of the software or the results thereof, including but
 * not limited to the correctness, accuracy, reliability or usefulness of
 * the software.
 *
 * Permission to use this software is contingent upon your acceptance
 * of the terms of this agreement
 *
 * .
 *
 */
 package gov.nist.javax.sip.parser;
 
 import java.util.Map;
 
A factory class that does a name lookup on a registered parser and returns a header parser for the given name.

Author(s):
M. Ranganathan
Version:
1.2 $Revision: 1.18 $ $Date: 2010-05-06 14:07:44 $
public class ParserFactory {
	//jeand : moving to concurrent structures to avoid blocking witnessed during profiling
    private static Map<String,Class<? extends HeaderParser>> parserTable;
    private static Class[] constructorArgs;
    static {
         = new ConcurrentHashMap<String,Class<? extends HeaderParser>>(90);
         = new Class[1];
        [0] = String.class;
        .put(
            ..toLowerCase(),
            InReplyToParser.class);
        .put(
            ..toLowerCase(),
            AcceptEncodingParser.class);
        .put(
            ..toLowerCase(),
            AcceptLanguageParser.class);
        .put("t"ToParser.class);
        .put(..toLowerCase(), ToParser.class);
        .put("f"FromParser.class);
        .put("v"ViaParser.class);
        .put("m"ContactParser.class);
        .put(
            ..toLowerCase(),
            ContentTypeParser.class);
        .put("c"ContentTypeParser.class);
        .put(
            ..toLowerCase(),
            ContentLengthParser.class);
        .put("l"ContentLengthParser.class);
        .put(
            ..toLowerCase(),
            AuthorizationParser.class);
        .put(
            ..toLowerCase(),
            WWWAuthenticateParser.class);
        .put("i"CallIDParser.class);
        .put(
            ..toLowerCase(),
            RecordRouteParser.class);
        .put(
            ..toLowerCase(),
            ProxyAuthorizationParser.class);
        .put(
            ..toLowerCase(),
            ProxyAuthenticateParser.class);
        .put(
            ..toLowerCase(),
            RetryAfterParser.class);
        .put(
            ..toLowerCase(),
            ProxyRequireParser.class);
        .put(
            ..toLowerCase(),
            TimeStampParser.class);
        .put(
            ..toLowerCase(),
            UnsupportedParser.class);
        .put(
            ..toLowerCase(),
            UserAgentParser.class);
        .put(
            ..toLowerCase(),
            SupportedParser.class);
        // bug fix by Steve Crosley
        .put("k"SupportedParser.class);
        .put"s"SubjectParser.class); // JvB: added
        .put(
            ..toLowerCase(),
            SubscriptionStateParser.class);
        .put(
            ..toLowerCase(),
            MaxForwardsParser.class);
        .put(
            ..toLowerCase(),
            MimeVersionParser.class);
        .put(
            ..toLowerCase(),
            MinExpiresParser.class);
        .put(
            ..toLowerCase(),
            OrganizationParser.class);
        .put(
            ..toLowerCase(),
            PriorityParser.class);
        .put("o"EventParser.class);
        .put(
            ..toLowerCase(),
            ErrorInfoParser.class);
        .put(
            ..toLowerCase(),
            ContentLanguageParser.class);
        .put(
            ..toLowerCase(),
            ContentEncodingParser.class);
        .put("e"ContentEncodingParser.class);
        .put(
            ..toLowerCase(),
            ContentDispositionParser.class);
        .put(
            ..toLowerCase(),
            CallInfoParser.class);
        .put(
            ..toLowerCase(),
            AuthenticationInfoParser.class);
        .put(
            ..toLowerCase(),
            AllowEventsParser.class);
        .put("u"AllowEventsParser.class);
        .put(
            ..toLowerCase(),
            AlertInfoParser.class);
        // Was missing (bug noticed by Steve Crossley)
        .put("r"ReferToParser.class);
        // JvB: added to support RFC3903 PUBLISH
        //IMS headers
        // Per RFC 3892 (pmusgrave)
        .put("b"ReferToParser.class);
        // Per RFC4028 Session Timers (pmusgrave)
        .put("x"SessionExpiresParser.class);
        .put(..toLowerCase(), MinSEParser.class);
        // (RFC4028 does not give a short form header for MinSE)
        // Per RFC3891 (pmusgrave)
        // Per RFC3911 (jean deruelle)
        .put(..toLowerCase(), JoinParser.class);
        
        //http://tools.ietf.org/html/draft-worley-references-05
    }

    
create a parser for a header. This is the parser factory.
    public static HeaderParser createParser(String line)
        throws ParseException {
        String headerName = Lexer.getHeaderName(line);
        String headerValue = Lexer.getHeaderValue(line);
        if (headerName == null || headerValue == null)
            throw new ParseException("The header name or value is null", 0);
        Class parserClass = (Class.get(SIPHeaderNamesCache.toLowerCase(headerName));
        if (parserClass != null) {
            try {
                Constructor cons = (Constructor.get(parserClass);
                if (cons == null) {
                    cons = parserClass.getConstructor();
                    .putIfAbsent(parserClasscons);
                }
                Object[] args = new Object[1];
                args[0] = line;
                HeaderParser retval = (HeaderParsercons.newInstance(args);
                return retval;
            } catch (Exception ex) {
                InternalErrorHandler.handleException(ex);
                return null// to placate the compiler.
            }
        } else {
            // Just generate a generic SIPHeader. We define
            // parsers only for the above.
            return new HeaderParser(line);
        }
    }
/*
 * $Log: not supported by cvs2svn $
 * Revision 1.17  2010/01/12 00:05:25  mranga
 * Add support for References header draft-worley-references-05
 *
 * Revision 1.16  2009/07/17 18:58:01  emcho
 * Converts indentation tabs to spaces so that we have a uniform indentation policy in the whole project.
 *
 * Revision 1.15  2009/01/22 19:33:48  deruelle_jean
 * Add support for JOIN (RFC 3911)
 * Issue number:  186
 * Obtained from:
 * Submitted by:  Jean Deruelle
 * Reviewed by:   Ranga, The high priest and grand poobah of Jain-SIP
 *
 * Revision 1.14  2007/03/07 14:29:46  belangery
 * Yet another bunch of improvements in the parsing code.
 *
 * Revision 1.13  2007/02/23 14:56:06  belangery
 * Added performance improvement around header name lowercase conversion.
 *
 * Revision 1.12  2007/01/08 19:24:21  mranga
 * Issue number:
 * Obtained from:
 * Submitted by:  Miguel Freitas
 * Reviewed by:   mranga
 *
 * Miguel -- please implement a deep clone method for the IMS headers.
 *
 * CVS: ----------------------------------------------------------------------
 * CVS: Issue number:
 * CVS:   If this change addresses one or more issues,
 * CVS:   then enter the issue number(s) here.
 * CVS: Obtained from:
 * CVS:   If this change has been taken from another system,
 * CVS:   then name the system in this line, otherwise delete it.
 * CVS: Submitted by:
 * CVS:   If this code has been contributed to the project by someone else; i.e.,
 * CVS:   they sent us a patch or a set of diffs, then include their name/email
 * CVS:   address here. If this is your work then delete this line.
 * CVS: Reviewed by:
 * CVS:   If we are doing pre-commit code reviews and someone else has
 * CVS:   reviewed your changes, include their name(s) here.
 * CVS:   If you have not had it reviewed then delete this line.
 *
 * Revision 1.11  2006/10/12 11:57:54  pmusgrave
 * Issue number:  79, 80
 * Submitted by:  pmusgrave@newheights.com
 * Reviewed by:   mranga
 *
 * Revision 1.10  2006/09/29 19:40:50  jbemmel
 * fixed missing IMS header parsing plumbing
 *
 * Revision 1.9  2006/09/11 18:41:32  mranga
 * Issue number:
 * Obtained from:
 * Submitted by:  mranga
 * Reviewed by:
 * Tighter integration of IMS headers.
 * CVS: ----------------------------------------------------------------------
 * CVS: Issue number:
 * CVS:   If this change addresses one or more issues,
 * CVS:   then enter the issue number(s) here.
 * CVS: Obtained from:
 * CVS:   If this change has been taken from another system,
 * CVS:   then name the system in this line, otherwise delete it.
 * CVS: Submitted by:
 * CVS:   If this code has been contributed to the project by someone else; i.e.,
 * CVS:   they sent us a patch or a set of diffs, then include their name/email
 * CVS:   address here. If this is your work then delete this line.
 * CVS: Reviewed by:
 * CVS:   If we are doing pre-commit code reviews and someone else has
 * CVS:   reviewed your changes, include their name(s) here.
 * CVS:   If you have not had it reviewed then delete this line.
 *
 * Revision 1.8  2006/08/15 21:44:50  mranga
 * Issue number:
 * Obtained from:
 * Submitted by:  mranga
 * Reviewed by:   mranga
 * Incorporating the latest API changes from Phelim
 * CVS: ----------------------------------------------------------------------
 * CVS: Issue number:
 * CVS:   If this change addresses one or more issues,
 * CVS:   then enter the issue number(s) here.
 * CVS: Obtained from:
 * CVS:   If this change has been taken from another system,
 * CVS:   then name the system in this line, otherwise delete it.
 * CVS: Submitted by:
 * CVS:   If this code has been contributed to the project by someone else; i.e.,
 * CVS:   they sent us a patch or a set of diffs, then include their name/email
 * CVS:   address here. If this is your work then delete this line.
 * CVS: Reviewed by:
 * CVS:   If we are doing pre-commit code reviews and someone else has
 * CVS:   reviewed your changes, include their name(s) here.
 * CVS:   If you have not had it reviewed then delete this line.
 *
 * Revision 1.7  2006/07/13 09:02:06  mranga
 * Issue number:
 * Obtained from:
 * Submitted by:  jeroen van bemmel
 * Reviewed by:   mranga
 * Moved some changes from jain-sip-1.2 to java.net
 *
 * CVS: ----------------------------------------------------------------------
 * CVS: Issue number:
 * CVS:   If this change addresses one or more issues,
 * CVS:   then enter the issue number(s) here.
 * CVS: Obtained from:
 * CVS:   If this change has been taken from another system,
 * CVS:   then name the system in this line, otherwise delete it.
 * CVS: Submitted by:
 * CVS:   If this code has been contributed to the project by someone else; i.e.,
 * CVS:   they sent us a patch or a set of diffs, then include their name/email
 * CVS:   address here. If this is your work then delete this line.
 * CVS: Reviewed by:
 * CVS:   If we are doing pre-commit code reviews and someone else has
 * CVS:   reviewed your changes, include their name(s) here.
 * CVS:   If you have not had it reviewed then delete this line.
 *
 * Revision 1.5  2006/06/19 06:47:27  mranga
 * javadoc fixups
 *
 * Revision 1.4  2006/06/16 15:26:28  mranga
 * Added NIST disclaimer to all public domain files. Clean up some javadoc. Fixed a leak
 *
 * Revision 1.3  2005/10/27 20:49:00  jeroen
 * added support for RFC3903 PUBLISH
 *
 * Revision 1.2  2005/10/14 19:59:00  jeroen
 * bugfix: missing parser for shortform of Subject (s)
 *
 * Revision 1.1.1.1  2005/10/04 17:12:35  mranga
 *
 * Import
 *
 *
 * Revision 1.4  2005/04/04 09:29:03  dmuresan
 * Replaced new String().getClass() with String.class.
 *
 * Revision 1.3  2004/01/22 13:26:31  sverker
 * Issue number:
 * Obtained from:
 * Submitted by:  sverker
 * Reviewed by:   mranga
 *
 * Major reformat of code to conform with style guide. Resolved compiler and javadoc warnings. Added CVS tags.
 *
 * CVS: ----------------------------------------------------------------------
 * CVS: Issue number:
 * CVS:   If this change addresses one or more issues,
 * CVS:   then enter the issue number(s) here.
 * CVS: Obtained from:
 * CVS:   If this change has been taken from another system,
 * CVS:   then name the system in this line, otherwise delete it.
 * CVS: Submitted by:
 * CVS:   If this code has been contributed to the project by someone else; i.e.,
 * CVS:   they sent us a patch or a set of diffs, then include their name/email
 * CVS:   address here. If this is your work then delete this line.
 * CVS: Reviewed by:
 * CVS:   If we are doing pre-commit code reviews and someone else has
 * CVS:   reviewed your changes, include their name(s) here.
 * CVS:   If you have not had it reviewed then delete this line.
 *
 */
New to GrepCode? Check out our FAQ X