Class Parser


  • public final class Parser
    extends java.lang.Object
    Contains methods to parse an XML document into a JNLPFile. Implements JNLP specification version 1.0.
    Version:
    $Revision: 1.13 $
    • Field Detail

      • LOG

        private static final Logger LOG
      • MAINCLASS

        private static java.lang.String MAINCLASS
      • anyWhiteSpace

        private static final java.util.regex.Pattern anyWhiteSpace
      • file

        private final JNLPFile file
        the file reference
      • root

        private final XmlNode root
        the root node
      • spec

        private final VersionString spec
        The versions of the specification that this JNLP file requires. The value of the attribute is specified as a version string, see JSR-56, section 3.1
      • base

        private final java.net.URL base
        the base URL that all hrefs are relative to
      • codebase

        private java.net.URL codebase
        the codebase URL
      • fileLocation

        private final java.net.URL fileLocation
        the file URL
      • strict

        private final boolean strict
        whether to throw errors on non-fatal errors.
      • allowExtensions

        private final boolean allowExtensions
        whether to allow extensions to the JNLP specification
    • Constructor Detail

      • Parser

        public Parser​(JNLPFile file,
                      java.net.URL base,
                      XmlNode root,
                      ParserSettings settings)
               throws ParseException
        Create a parser for the JNLP file. If the location parameters is not null it is used as the default codebase (does not override value of jnlp element's href attribute).

        The root node may be normalized as a side effect of this constructor.

        Parameters:
        file - the (uninitialized) file reference
        base - if codebase is not specified, a default base for relative URLs
        root - the root node
        settings - the parser settings to use when parsing the JNLP file
        Throws:
        ParseException - if the JNLP file is invalid
      • Parser

        public Parser​(JNLPFile file,
                      java.net.URL base,
                      XmlNode root,
                      ParserSettings settings,
                      java.net.URL codebase)
               throws ParseException
        Create a parser for the JNLP file. If the location parameters is not null it is used as the default codebase (does not override value of jnlp element's href attribute).

        The root node may be normalized as a side effect of this constructor.

        Parameters:
        file - the (uninitialized) file reference
        base - if codebase is not specified, a default base for relative URLs
        root - the root node
        settings - the parser settings to use when parsing the JNLP file
        codebase - codebase to use if we did not parse one from JNLP file.
        Throws:
        ParseException - if the JNLP file is invalid
    • Method Detail

      • addSlash

        private java.net.URL addSlash​(java.net.URL source)
        Returns a URL with a trailing / appended to it if there is no trailing slash on the specified URL.
      • getFileVersion

        public VersionId getFileVersion()
        Returns the version of the application being launched, as well as the version of the JNLP file itself.
        Returns:
        version of file
      • getFileLocation

        public java.net.URL getFileLocation()
        Returns the file location.
        Returns:
        url of source file
      • getCodeBase

        public java.net.URL getCodeBase()
        Returns:
        the codebase.
      • getSpecVersion

        public VersionString getSpecVersion()
        Returns the versions of the specification that this JNLP file requires. The value of the attribute is specified as a version string, see JSR-56, section 3.1
        Returns:
        the specification version.
      • getResources

        public java.util.List<ResourcesDesc> getResources​(XmlNode parent,
                                                          boolean j2se)
                                                   throws ParseException
        Parameters:
        parent - the parent node (either jnlp or j2se)
        j2se - true if the resources are located under a j2se or java node
        Returns:
        all of the ResourcesDesc elements under the specified node (jnlp or j2se).
        Throws:
        ParseException - if the JNLP file is invalid
      • getResourcesDesc

        private ResourcesDesc getResourcesDesc​(XmlNode node,
                                               boolean j2se)
                                        throws ParseException
        Parameters:
        node - the resources node
        j2se - true if the resources are located under a j2se or java node
        Returns:
        the ResourcesDesc element at the specified node.
        Throws:
        ParseException - if the JNLP file is invalid
      • getJRE

        private JREDesc getJRE​(XmlNode node)
                        throws ParseException
        Parameters:
        node - the j2se/java node
        Returns:
        the JRE element at the specified node.
        Throws:
        ParseException - if the JNLP file is invalid
      • checkJreVersionWithSystemProperty

        private static void checkJreVersionWithSystemProperty​(VersionString version,
                                                              boolean strict)
      • getJAR

        private JARDesc getJAR​(XmlNode node)
                        throws ParseException
        Returns the JAR element at the specified node.
        Parameters:
        node - the jar or nativelib node
        Throws:
        ParseException - if the JNLP file is invalid
      • checkForInformation

        void checkForInformation()
                          throws RequiredElementException
        Make sure a title and vendor are present and nonempty and localized as best matching as possible for the JVM's current locale. Fallback to a generalized title and vendor otherwise. If none is found, throw an exception. Additionally prints homepage, description, title and vendor to stdout if in Debug mode.
        Throws:
        RequiredElementException
      • getInformationDescs

        public java.util.List<InformationDesc> getInformationDescs​(XmlNode parent)
                                                            throws ParseException
        Search through the information elements in the order specified in the JNLP file (resp. the specified node).

        For each information element, it checks if the value specified in the locale attribute matches the current locale. If a match is found, the values specified in that information element will be used, possibly overriding values found in previous information elements. Thus, the locale-independent information needs only to be specified once, in the information element without the locale attribute.

        Parameters:
        parent - the parent node containing the information elements in the order specified in the JNLP file
        Returns:
        all of the information elements under the specified node.
        Throws:
        ParseException - if the JNLP file is invalid
      • getInformationDesc

        private InformationDesc getInformationDesc​(XmlNode node)
                                            throws ParseException
        Returns the information element at the specified node.
        Parameters:
        node - the node containing the information element as specified in the JNLP file
        Returns:
        the information element at the specified node.
        Throws:
        ParseException - if the JNLP file is invalid
      • addInfo

        protected void addInfo​(InformationDesc info,
                               XmlNode node,
                               java.lang.String mod,
                               java.lang.Object value)
        Adds a key,value pair to the information object.
        Parameters:
        info - the information object
        node - node name to be used as the key
        mod - key name appended with "-"+mod if not null
        value - the info object to add (icon or string)
      • getSecurity

        public SecurityDesc getSecurity​(XmlNode parent)
                                 throws ParseException
        Parameters:
        parent - the parent node
        Returns:
        the security descriptor element. If no security element was specified in the JNLP file then a SecurityDesc with applet permissions is returned.
        Throws:
        ParseException - if the JNLP file is invalid
      • isTrustedEnvironment

        private boolean isTrustedEnvironment()
        Returns whether the JNLP file requests a trusted execution environment.
      • getEntryPointDesc

        public EntryPoint getEntryPointDesc​(XmlNode parent)
                                     throws ParseException
        Load the entry point descriptor element.
        Parameters:
        parent - the parent node
        Returns:
        the entry point descriptor element, never null
        Throws:
        ParseException - if the JNLP file is invalid
        See Also:
        EntryPoint
      • tryRelativeAbsoluteSize

        private static int tryRelativeAbsoluteSize​(java.lang.String wh,
                                                   java.lang.String readedSize)
      • getInstallerDesc

        InstallerDesc getInstallerDesc​(XmlNode node)
        Parameters:
        node -
        Returns:
        the installer descriptor.
      • getMenu

        private MenuDesc getMenu​(XmlNode node)
        Returns the menu element at the specified node.
        Returns:
        the menu element at the specified node
      • splitString

        private java.lang.String[] splitString​(java.lang.String source)
        Returns:
        an array of substrings separated by spaces (spaces escaped with backslash do not separate strings). This method splits strings as per the spec except that it does replace escaped other characters with their own value.
      • getLocales

        private java.util.Locale[] getLocales​(XmlNode node)
                                       throws ParseException
        Returns the locales for which the information element should be used. Several locales can be specified, separated with spaces.
        Parameters:
        node - the node with a locale attribute
        Returns:
        the Locale object(s) from a node's locale attribute.
        Throws:
        ParseException
      • getVersionString

        private VersionString getVersionString​(XmlNode node,
                                               java.lang.String attributeName,
                                               java.lang.String defaultValue)
        Parameters:
        node - the node
        attributeName - the attribute name
        defaultValue - default if no such attribute
        Returns:
        a version-string from the specified attribute and default value.
      • getOptionalMainClass

        private java.lang.String getOptionalMainClass​(XmlNode node)
      • cleanMainClassAttribute

        private java.lang.String cleanMainClassAttribute​(java.lang.String main)
                                                  throws ParseException
        Throws:
        ParseException