jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java
author alanb
Fri, 16 Dec 2016 05:46:58 +0000
changeset 42803 d78543be1ebb
parent 42392 f1d47e36de0c
child 43254 0dd6e35cf667
permissions -rw-r--r--
8170987: Module system implementation refresh (12/2016) Reviewed-by: mchung
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
     1
/*
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
     2
 * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
     3
 */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
     4
/*
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
     5
 * Licensed to the Apache Software Foundation (ASF) under one or more
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
     6
 * contributor license agreements.  See the NOTICE file distributed with
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
     7
 * this work for additional information regarding copyright ownership.
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
     8
 * The ASF licenses this file to You under the Apache License, Version 2.0
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
     9
 * (the "License"); you may not use this file except in compliance with
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
    10
 * the License.  You may obtain a copy of the License at
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    11
 *
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
    12
 *      http://www.apache.org/licenses/LICENSE-2.0
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    13
 *
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    14
 * Unless required by applicable law or agreed to in writing, software
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    15
 * distributed under the License is distributed on an "AS IS" BASIS,
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    17
 * See the License for the specific language governing permissions and
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    18
 * limitations under the License.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    19
 */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    20
/*
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    21
 * $Id: TemplatesImpl.java,v 1.8 2007/03/26 20:12:27 spericas Exp $
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    22
 */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    23
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    24
package com.sun.org.apache.xalan.internal.xsltc.trax;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    25
17534
21dc0b2762da 8011653: Upgrade JDK8 to JAXP 1.5
joehw
parents: 16953
diff changeset
    26
import com.sun.org.apache.xalan.internal.XalanConstants;
29945
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
    27
import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
    28
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
    29
import com.sun.org.apache.xalan.internal.xsltc.DOM;
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
    30
import com.sun.org.apache.xalan.internal.xsltc.Translet;
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
    31
import com.sun.org.apache.xalan.internal.xsltc.compiler.Constants;
29945
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
    32
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
    33
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    34
import java.io.IOException;
33350
97bf4aeb431d 8079323: Serialization compatibility for Templates: need to exclude Hashtable from serialization
joehw
parents: 33349
diff changeset
    35
import java.io.NotSerializableException;
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    36
import java.io.ObjectInputStream;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    37
import java.io.ObjectOutputStream;
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
    38
import java.io.ObjectStreamField;
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    39
import java.io.Serializable;
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    40
import java.lang.module.Configuration;
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    41
import java.lang.module.ModuleDescriptor;
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    42
import java.lang.module.ModuleFinder;
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    43
import java.lang.module.ModuleReference;
42803
d78543be1ebb 8170987: Module system implementation refresh (12/2016)
alanb
parents: 42392
diff changeset
    44
import java.lang.module.ModuleReader;
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    45
import java.lang.reflect.Layer;
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    46
import java.lang.reflect.Module;
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    47
import java.security.AccessController;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    48
import java.security.PrivilegedAction;
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    49
import java.util.Arrays;
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
    50
import java.util.HashMap;
29945
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
    51
import java.util.Map;
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    52
import java.util.Optional;
29945
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
    53
import java.util.Properties;
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
    54
import java.util.Set;
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    55
import javax.xml.XMLConstants;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    56
import javax.xml.transform.Templates;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    57
import javax.xml.transform.Transformer;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    58
import javax.xml.transform.TransformerConfigurationException;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    59
import javax.xml.transform.URIResolver;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    60
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
    61
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    62
/**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    63
 * @author Morten Jorgensen
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    64
 * @author G. Todd Millerj
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    65
 * @author Jochen Cordes <Jochen.Cordes@t-online.de>
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    66
 * @author Santiago Pericas-Geertsen
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    67
 */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    68
public final class TemplatesImpl implements Templates, Serializable {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    69
    static final long serialVersionUID = 673094361519270707L;
16953
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
    70
    public final static String DESERIALIZE_TRANSLET = "jdk.xml.enableTemplatesImplDeserialization";
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
    71
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    72
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    73
     * Name of the superclass of all translets. This is needed to
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    74
     * determine which, among all classes comprising a translet,
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    75
     * is the main one.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    76
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    77
    private static String ABSTRACT_TRANSLET
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    78
        = "com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet";
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    79
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    80
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    81
     * Name of the main class or default name if unknown.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    82
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    83
    private String _name = null;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    84
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    85
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    86
     * Contains the actual class definition for the translet class and
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    87
     * any auxiliary classes.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    88
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    89
    private byte[][] _bytecodes = null;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    90
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    91
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    92
     * Contains the translet class definition(s). These are created when
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    93
     * this Templates is created or when it is read back from disk.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    94
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    95
    private Class[] _class = null;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    96
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    97
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    98
     * The index of the main translet class in the arrays _class[] and
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
    99
     * _bytecodes.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   100
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   101
    private int _transletIndex = -1;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   102
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   103
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   104
     * Contains the list of auxiliary class definitions.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   105
     */
33350
97bf4aeb431d 8079323: Serialization compatibility for Templates: need to exclude Hashtable from serialization
joehw
parents: 33349
diff changeset
   106
    private transient Map<String, Class<?>> _auxClasses = null;
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   107
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   108
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   109
     * Output properties of this translet.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   110
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   111
    private Properties _outputProperties;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   112
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   113
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   114
     * Number of spaces to add for output indentation.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   115
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   116
    private int _indentNumber;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   117
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   118
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   119
     * This URIResolver is passed to all Transformers.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   120
     * Declaring it transient to fix bug 22438
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   121
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   122
    private transient URIResolver _uriResolver = null;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   123
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   124
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   125
     * Cache the DTM for the stylesheet in a thread local variable,
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   126
     * which is used by the document('') function.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   127
     * Use ThreadLocal because a DTM cannot be shared between
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   128
     * multiple threads.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   129
     * Declaring it transient to fix bug 22438
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   130
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   131
    private transient ThreadLocal _sdom = new ThreadLocal();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   132
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   133
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   134
     * A reference to the transformer factory that this templates
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   135
     * object belongs to.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   136
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   137
    private transient TransformerFactoryImpl _tfactory = null;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   138
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   139
    /**
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   140
     * A flag to determine whether the Service Mechanism is used
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   141
     */
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   142
    private transient boolean _useServicesMechanism;
12458
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   143
17534
21dc0b2762da 8011653: Upgrade JDK8 to JAXP 1.5
joehw
parents: 16953
diff changeset
   144
    /**
21dc0b2762da 8011653: Upgrade JDK8 to JAXP 1.5
joehw
parents: 16953
diff changeset
   145
     * protocols allowed for external references set by the stylesheet processing instruction, Import and Include element.
21dc0b2762da 8011653: Upgrade JDK8 to JAXP 1.5
joehw
parents: 16953
diff changeset
   146
     */
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   147
    private transient String _accessExternalStylesheet = XalanConstants.EXTERNAL_ACCESS_DEFAULT;
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   148
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   149
    /**
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   150
     * @serialField _name String The Name of the main class
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   151
     * @serialField _bytecodes byte[][] Class definition
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   152
     * @serialField _class Class[] The translet class definition(s).
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   153
     * @serialField _transletIndex int The index of the main translet class
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   154
     * @serialField _outputProperties Properties Output properties of this translet.
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   155
     * @serialField _indentNumber int Number of spaces to add for output indentation.
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   156
     */
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   157
    private static final ObjectStreamField[] serialPersistentFields =
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   158
        new ObjectStreamField[] {
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   159
            new ObjectStreamField("_name", String.class),
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   160
            new ObjectStreamField("_bytecodes", byte[][].class),
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   161
            new ObjectStreamField("_class", Class[].class),
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   162
            new ObjectStreamField("_transletIndex", int.class),
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   163
            new ObjectStreamField("_outputProperties", Properties.class),
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   164
            new ObjectStreamField("_indentNumber", int.class),
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   165
        };
17534
21dc0b2762da 8011653: Upgrade JDK8 to JAXP 1.5
joehw
parents: 16953
diff changeset
   166
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   167
    static final class TransletClassLoader extends ClassLoader {
42247
52fafb950d5a 8158619: Very large CDATA section in XML document causes OOME
joehw
parents: 39801
diff changeset
   168
        private final Map<String, Class<?>> _loadedExternalExtensionFunctions;
29945
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   169
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   170
         TransletClassLoader(ClassLoader parent) {
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   171
             super(parent);
29945
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   172
            _loadedExternalExtensionFunctions = null;
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   173
        }
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   174
42247
52fafb950d5a 8158619: Very large CDATA section in XML document causes OOME
joehw
parents: 39801
diff changeset
   175
        TransletClassLoader(ClassLoader parent, Map<String, Class<?>> mapEF) {
29945
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   176
            super(parent);
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   177
            _loadedExternalExtensionFunctions = mapEF;
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   178
        }
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   179
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   180
        public Class<?> loadClass(String name) throws ClassNotFoundException {
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   181
            Class<?> ret = null;
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   182
            // The _loadedExternalExtensionFunctions will be empty when the
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   183
            // SecurityManager is not set and the FSP is turned off
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   184
            if (_loadedExternalExtensionFunctions != null) {
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   185
                ret = _loadedExternalExtensionFunctions.get(name);
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   186
            }
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   187
            if (ret == null) {
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   188
                ret = super.loadClass(name);
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   189
            }
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   190
            return ret;
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   191
         }
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   192
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   193
        /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   194
         * Access to final protected superclass member from outer class.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   195
         */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   196
        Class defineClass(final byte[] b) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   197
            return defineClass(null, b, 0, b.length);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   198
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   199
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   200
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   201
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   202
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   203
     * Create an XSLTC template object from the bytecodes.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   204
     * The bytecodes for the translet and auxiliary classes, plus the name of
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   205
     * the main translet class, must be supplied.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   206
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   207
    protected TemplatesImpl(byte[][] bytecodes, String transletName,
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   208
        Properties outputProperties, int indentNumber,
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   209
        TransformerFactoryImpl tfactory)
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   210
    {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   211
        _bytecodes = bytecodes;
12458
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   212
        init(transletName, outputProperties, indentNumber, tfactory);
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   213
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   214
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   215
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   216
     * Create an XSLTC template object from the translet class definition(s).
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   217
     */
42247
52fafb950d5a 8158619: Very large CDATA section in XML document causes OOME
joehw
parents: 39801
diff changeset
   218
    protected TemplatesImpl(Class<?>[] transletClasses, String transletName,
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   219
        Properties outputProperties, int indentNumber,
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   220
        TransformerFactoryImpl tfactory)
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   221
    {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   222
        _class     = transletClasses;
12458
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   223
        _transletIndex = 0;
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   224
        init(transletName, outputProperties, indentNumber, tfactory);
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   225
    }
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   226
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   227
    private void init(String transletName,
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   228
        Properties outputProperties, int indentNumber,
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   229
        TransformerFactoryImpl tfactory) {
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   230
        _name      = transletName;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   231
        _outputProperties = outputProperties;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   232
        _indentNumber = indentNumber;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   233
        _tfactory = tfactory;
12458
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   234
        _useServicesMechanism = tfactory.useServicesMechnism();
17534
21dc0b2762da 8011653: Upgrade JDK8 to JAXP 1.5
joehw
parents: 16953
diff changeset
   235
        _accessExternalStylesheet = (String) tfactory.getAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET);
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   236
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   237
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   238
     * Need for de-serialization, see readObject().
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   239
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   240
    public TemplatesImpl() { }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   241
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   242
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   243
     *  Overrides the default readObject implementation since we decided
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   244
     *  it would be cleaner not to serialize the entire tranformer
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   245
     *  factory.  [ ref bugzilla 12317 ]
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   246
     *  We need to check if the user defined class for URIResolver also
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   247
     *  implemented Serializable
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   248
     *  if yes then we need to deserialize the URIResolver
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   249
     *  Fix for bugzilla bug 22438
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   250
     */
33350
97bf4aeb431d 8079323: Serialization compatibility for Templates: need to exclude Hashtable from serialization
joehw
parents: 33349
diff changeset
   251
    @SuppressWarnings("unchecked")
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   252
    private void  readObject(ObjectInputStream is)
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   253
      throws IOException, ClassNotFoundException
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   254
    {
16953
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   255
        SecurityManager security = System.getSecurityManager();
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   256
        if (security != null){
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   257
            String temp = SecuritySupport.getSystemProperty(DESERIALIZE_TRANSLET);
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   258
            if (temp == null || !(temp.length()==0 || temp.equalsIgnoreCase("true"))) {
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   259
                ErrorMsg err = new ErrorMsg(ErrorMsg.DESERIALIZE_TRANSLET_ERR);
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   260
                throw new UnsupportedOperationException(err.toString());
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   261
            }
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   262
        }
a44e04deb948 6657673: Issues with JAXP
joehw
parents: 12458
diff changeset
   263
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   264
        // We have to read serialized fields first.
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   265
        ObjectInputStream.GetField gf = is.readFields();
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   266
        _name = (String)gf.get("_name", null);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   267
        _bytecodes = (byte[][])gf.get("_bytecodes", null);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   268
        _class = (Class[])gf.get("_class", null);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   269
        _transletIndex = gf.get("_transletIndex", -1);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   270
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   271
        _outputProperties = (Properties)gf.get("_outputProperties", null);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   272
        _indentNumber = gf.get("_indentNumber", 0);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   273
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   274
        if (is.readBoolean()) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   275
            _uriResolver = (URIResolver) is.readObject();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   276
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   277
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   278
        _tfactory = new TransformerFactoryImpl();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   279
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   280
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   281
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   282
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   283
     *  This is to fix bugzilla bug 22438
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   284
     *  If the user defined class implements URIResolver and Serializable
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   285
     *  then we want it to get serialized
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   286
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   287
    private void writeObject(ObjectOutputStream os)
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   288
        throws IOException, ClassNotFoundException {
33350
97bf4aeb431d 8079323: Serialization compatibility for Templates: need to exclude Hashtable from serialization
joehw
parents: 33349
diff changeset
   289
        if (_auxClasses != null) {
97bf4aeb431d 8079323: Serialization compatibility for Templates: need to exclude Hashtable from serialization
joehw
parents: 33349
diff changeset
   290
            //throw with the same message as when Hashtable was used for compatibility.
97bf4aeb431d 8079323: Serialization compatibility for Templates: need to exclude Hashtable from serialization
joehw
parents: 33349
diff changeset
   291
            throw new NotSerializableException(
97bf4aeb431d 8079323: Serialization compatibility for Templates: need to exclude Hashtable from serialization
joehw
parents: 33349
diff changeset
   292
                    "com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable");
97bf4aeb431d 8079323: Serialization compatibility for Templates: need to exclude Hashtable from serialization
joehw
parents: 33349
diff changeset
   293
        }
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   294
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   295
        // Write serialized fields
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   296
        ObjectOutputStream.PutField pf = os.putFields();
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   297
        pf.put("_name", _name);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   298
        pf.put("_bytecodes", _bytecodes);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   299
        pf.put("_class", _class);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   300
        pf.put("_transletIndex", _transletIndex);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   301
        pf.put("_outputProperties", _outputProperties);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   302
        pf.put("_indentNumber", _indentNumber);
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   303
        os.writeFields();
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   304
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   305
        if (_uriResolver instanceof Serializable) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   306
            os.writeBoolean(true);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   307
            os.writeObject((Serializable) _uriResolver);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   308
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   309
        else {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   310
            os.writeBoolean(false);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   311
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   312
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   313
12458
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   314
    /**
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   315
     * Return the state of the services mechanism feature.
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   316
     */
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   317
    public boolean useServicesMechnism() {
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   318
        return _useServicesMechanism;
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   319
    }
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   320
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   321
     /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   322
     * Store URIResolver needed for Transformers.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   323
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   324
    public synchronized void setURIResolver(URIResolver resolver) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   325
        _uriResolver = resolver;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   326
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   327
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   328
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   329
     * The TransformerFactory must pass us the translet bytecodes using this
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   330
     * method before we can create any translet instances
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   331
     *
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   332
     * Note: This method is private for security reasons. See
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   333
     * CR 6537898. When merging with Apache, we must ensure
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   334
     * that the privateness of this method is maintained (that
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   335
     * is why it wasn't removed).
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   336
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   337
    private synchronized void setTransletBytecodes(byte[][] bytecodes) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   338
        _bytecodes = bytecodes;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   339
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   340
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   341
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   342
     * Returns the translet bytecodes stored in this template
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   343
     *
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   344
     * Note: This method is private for security reasons. See
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   345
     * CR 6537898. When merging with Apache, we must ensure
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   346
     * that the privateness of this method is maintained (that
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   347
     * is why it wasn't removed).
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   348
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   349
    private synchronized byte[][] getTransletBytecodes() {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   350
        return _bytecodes;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   351
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   352
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   353
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   354
     * Returns the translet bytecodes stored in this template
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   355
     *
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   356
     * Note: This method is private for security reasons. See
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   357
     * CR 6537898. When merging with Apache, we must ensure
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   358
     * that the privateness of this method is maintained (that
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   359
     * is why it wasn't removed).
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   360
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   361
    private synchronized Class[] getTransletClasses() {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   362
        try {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   363
            if (_class == null) defineTransletClasses();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   364
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   365
        catch (TransformerConfigurationException e) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   366
            // Falls through
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   367
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   368
        return _class;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   369
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   370
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   371
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   372
     * Returns the index of the main class in array of bytecodes
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   373
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   374
    public synchronized int getTransletIndex() {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   375
        try {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   376
            if (_class == null) defineTransletClasses();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   377
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   378
        catch (TransformerConfigurationException e) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   379
            // Falls through
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   380
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   381
        return _transletIndex;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   382
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   383
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   384
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   385
     * The TransformerFactory should call this method to set the translet name
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   386
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   387
    protected synchronized void setTransletName(String name) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   388
        _name = name;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   389
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   390
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   391
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   392
     * Returns the name of the main translet class stored in this template
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   393
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   394
    protected synchronized String getTransletName() {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   395
        return _name;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   396
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   397
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   398
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   399
    /**
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   400
     * Creates a module layer with one module that is defined to the given class
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   401
     * loader.
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   402
     */
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   403
    private Module createModule(ModuleDescriptor descriptor, ClassLoader loader) {
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   404
        String mn = descriptor.name();
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   405
42803
d78543be1ebb 8170987: Module system implementation refresh (12/2016)
alanb
parents: 42392
diff changeset
   406
        ModuleReference mref = new ModuleReference(descriptor, null) {
d78543be1ebb 8170987: Module system implementation refresh (12/2016)
alanb
parents: 42392
diff changeset
   407
            @Override
d78543be1ebb 8170987: Module system implementation refresh (12/2016)
alanb
parents: 42392
diff changeset
   408
            public ModuleReader open() {
d78543be1ebb 8170987: Module system implementation refresh (12/2016)
alanb
parents: 42392
diff changeset
   409
                throw new UnsupportedOperationException();
d78543be1ebb 8170987: Module system implementation refresh (12/2016)
alanb
parents: 42392
diff changeset
   410
            }
d78543be1ebb 8170987: Module system implementation refresh (12/2016)
alanb
parents: 42392
diff changeset
   411
        };
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   412
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   413
        ModuleFinder finder = new ModuleFinder() {
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   414
            @Override
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   415
            public Optional<ModuleReference> find(String name) {
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   416
                if (name.equals(mn)) {
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   417
                    return Optional.of(mref);
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   418
                } else {
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   419
                    return Optional.empty();
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   420
                }
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   421
            }
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   422
            @Override
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   423
            public Set<ModuleReference> findAll() {
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   424
                return Set.of(mref);
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   425
            }
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   426
        };
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   427
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   428
        Layer bootLayer = Layer.boot();
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   429
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   430
        Configuration cf = bootLayer.configuration()
38501
42bbe0b77321 8152650: ModuleFinder.compose should accept varargs
alanb
parents: 37838
diff changeset
   431
                .resolveRequires(finder, ModuleFinder.of(), Set.of(mn));
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   432
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   433
        PrivilegedAction<Layer> pa = () -> bootLayer.defineModules(cf, name -> loader);
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   434
        Layer layer = AccessController.doPrivileged(pa);
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   435
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   436
        Module m = layer.findModule(mn).get();
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   437
        assert m.getLayer() == layer;
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   438
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   439
        return m;
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   440
    }
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   441
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   442
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   443
     * Defines the translet class and auxiliary classes.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   444
     * Returns a reference to the Class object that defines the main class
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   445
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   446
    private void defineTransletClasses()
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   447
        throws TransformerConfigurationException {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   448
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   449
        if (_bytecodes == null) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   450
            ErrorMsg err = new ErrorMsg(ErrorMsg.NO_TRANSLET_CLASS_ERR);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   451
            throw new TransformerConfigurationException(err.toString());
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   452
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   453
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   454
        TransletClassLoader loader = (TransletClassLoader)
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   455
            AccessController.doPrivileged(new PrivilegedAction() {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   456
                public Object run() {
29945
4912169d22d3 8040228: TransformerConfigurationException occurs with security manager, FSP and XSLT Ext
aefimov
parents: 25868
diff changeset
   457
                    return new TransletClassLoader(ObjectFactory.findClassLoader(),_tfactory.getExternalExtensionsMap());
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   458
                }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   459
            });
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   460
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   461
        try {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   462
            final int classCount = _bytecodes.length;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   463
            _class = new Class[classCount];
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   464
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   465
            if (classCount > 1) {
33349
975138b77cff 8068842: Better JAXP data handling
joehw
parents: 29945
diff changeset
   466
                _auxClasses = new HashMap<>();
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   467
            }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   468
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   469
            // create a module for the translet
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   470
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   471
            String mn = "jdk.translet";
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   472
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   473
            String pn = _tfactory.getPackageName();
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   474
            assert pn != null && pn.length() > 0;
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   475
42391
42b2a7c1473b 8169069: Module system implementation refresh (11/2016)
alanb
parents: 39801
diff changeset
   476
            ModuleDescriptor descriptor = ModuleDescriptor.module(mn)
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   477
                    .requires("java.xml")
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   478
                    .exports(pn)
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   479
                    .build();
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   480
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   481
            Module m = createModule(descriptor, loader);
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   482
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   483
            // the module needs access to runtime classes
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   484
            Module thisModule = TemplatesImpl.class.getModule();
42247
52fafb950d5a 8158619: Very large CDATA section in XML document causes OOME
joehw
parents: 39801
diff changeset
   485
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   486
            Arrays.asList(Constants.PKGS_USED_BY_TRANSLET_CLASSES).forEach(p -> {
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   487
                thisModule.addExports(p, m);
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   488
            });
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   489
37838
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   490
            // java.xml needs to instanitate the translet class
45821736044e 8154956: Module system implementation refresh (4/2016)
alanb
parents: 36520
diff changeset
   491
            thisModule.addReads(m);
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   492
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   493
            for (int i = 0; i < classCount; i++) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   494
                _class[i] = loader.defineClass(_bytecodes[i]);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   495
                final Class superClass = _class[i].getSuperclass();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   496
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   497
                // Check if this is the main class
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   498
                if (superClass.getName().equals(ABSTRACT_TRANSLET)) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   499
                    _transletIndex = i;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   500
                }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   501
                else {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   502
                    _auxClasses.put(_class[i].getName(), _class[i]);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   503
                }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   504
            }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   505
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   506
            if (_transletIndex < 0) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   507
                ErrorMsg err= new ErrorMsg(ErrorMsg.NO_MAIN_TRANSLET_ERR, _name);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   508
                throw new TransformerConfigurationException(err.toString());
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   509
            }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   510
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   511
        catch (ClassFormatError e) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   512
            ErrorMsg err = new ErrorMsg(ErrorMsg.TRANSLET_CLASS_ERR, _name);
39801
3d0df6c4665a 8153082: Update XSLT compiler to generate classes that invoke addReads
dfuchs
parents: 38501
diff changeset
   513
            throw new TransformerConfigurationException(err.toString(), e);
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   514
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   515
        catch (LinkageError e) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   516
            ErrorMsg err = new ErrorMsg(ErrorMsg.TRANSLET_OBJECT_ERR, _name);
36520
cb52aa47ff0a 8142968: Module System implementation
alanb
parents: 33350
diff changeset
   517
            throw new TransformerConfigurationException(err.toString(), e);
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   518
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   519
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   520
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   521
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   522
     * This method generates an instance of the translet class that is
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   523
     * wrapped inside this Template. The translet instance will later
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   524
     * be wrapped inside a Transformer object.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   525
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   526
    private Translet getTransletInstance()
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   527
        throws TransformerConfigurationException {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   528
        try {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   529
            if (_name == null) return null;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   530
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   531
            if (_class == null) defineTransletClasses();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   532
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   533
            // The translet needs to keep a reference to all its auxiliary
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   534
            // class to prevent the GC from collecting them
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   535
            AbstractTranslet translet = (AbstractTranslet) _class[_transletIndex].newInstance();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   536
            translet.postInitialization();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   537
            translet.setTemplates(this);
12458
d601e4bba306 7160380: Sync JDK8 with JAXP 1.4.5
joehw
parents: 12457
diff changeset
   538
            translet.setServicesMechnism(_useServicesMechanism);
17534
21dc0b2762da 8011653: Upgrade JDK8 to JAXP 1.5
joehw
parents: 16953
diff changeset
   539
            translet.setAllowedProtocols(_accessExternalStylesheet);
12005
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   540
            if (_auxClasses != null) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   541
                translet.setAuxiliaryClasses(_auxClasses);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   542
            }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   543
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   544
            return translet;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   545
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   546
        catch (InstantiationException e) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   547
            ErrorMsg err = new ErrorMsg(ErrorMsg.TRANSLET_OBJECT_ERR, _name);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   548
            throw new TransformerConfigurationException(err.toString());
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   549
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   550
        catch (IllegalAccessException e) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   551
            ErrorMsg err = new ErrorMsg(ErrorMsg.TRANSLET_OBJECT_ERR, _name);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   552
            throw new TransformerConfigurationException(err.toString());
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   553
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   554
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   555
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   556
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   557
     * Implements JAXP's Templates.newTransformer()
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   558
     *
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   559
     * @throws TransformerConfigurationException
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   560
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   561
    public synchronized Transformer newTransformer()
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   562
        throws TransformerConfigurationException
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   563
    {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   564
        TransformerImpl transformer;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   565
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   566
        transformer = new TransformerImpl(getTransletInstance(), _outputProperties,
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   567
            _indentNumber, _tfactory);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   568
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   569
        if (_uriResolver != null) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   570
            transformer.setURIResolver(_uriResolver);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   571
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   572
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   573
        if (_tfactory.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING)) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   574
            transformer.setSecureProcessing(true);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   575
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   576
        return transformer;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   577
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   578
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   579
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   580
     * Implements JAXP's Templates.getOutputProperties(). We need to
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   581
     * instanciate a translet to get the output settings, so
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   582
     * we might as well just instanciate a Transformer and use its
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   583
     * implementation of this method.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   584
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   585
    public synchronized Properties getOutputProperties() {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   586
        try {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   587
            return newTransformer().getOutputProperties();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   588
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   589
        catch (TransformerConfigurationException e) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   590
            return null;
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   591
        }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   592
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   593
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   594
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   595
     * Return the thread local copy of the stylesheet DOM.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   596
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   597
    public DOM getStylesheetDOM() {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   598
        return (DOM)_sdom.get();
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   599
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   600
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   601
    /**
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   602
     * Set the thread local copy of the stylesheet DOM.
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   603
     */
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   604
    public void setStylesheetDOM(DOM sdom) {
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   605
        _sdom.set(sdom);
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   606
    }
a754d69d5e60 7150324: Stop using drop bundles in jaxp
ohair
parents:
diff changeset
   607
}