41 import java.lang.module.Configuration;
42 import java.lang.module.ModuleDescriptor;
43 import java.lang.module.ModuleFinder;
44 import java.lang.module.ModuleReference;
45 import java.lang.reflect.Layer;
46 import java.lang.reflect.Module;
47 import java.security.AccessController;
48 import java.security.PrivilegedAction;
49 import java.util.Arrays;
50 import java.util.HashMap;
51 import java.util.Map;
52 import java.util.Optional;
53 import java.util.Properties;
54 import java.util.Set;
55 import javax.xml.XMLConstants;
56 import javax.xml.transform.Templates;
57 import javax.xml.transform.Transformer;
58 import javax.xml.transform.TransformerConfigurationException;
59 import javax.xml.transform.URIResolver;
60
61 import jdk.internal.module.Modules;
62
63 /**
64 * @author Morten Jorgensen
65 * @author G. Todd Millerj
66 * @author Jochen Cordes <Jochen.Cordes@t-online.de>
67 * @author Santiago Pericas-Geertsen
68 */
69 public final class TemplatesImpl implements Templates, Serializable {
70 static final long serialVersionUID = 673094361519270707L;
71 public final static String DESERIALIZE_TRANSLET = "jdk.xml.enableTemplatesImplDeserialization";
72
73 /**
74 * Name of the superclass of all translets. This is needed to
75 * determine which, among all classes comprising a translet,
76 * is the main one.
77 */
78 private static String ABSTRACT_TRANSLET
79 = "com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet";
80
81 /**
469
470 String mn = "jdk.translet";
471
472 String pn = _tfactory.getPackageName();
473 assert pn != null && pn.length() > 0;
474
475 ModuleDescriptor descriptor
476 = new ModuleDescriptor.Builder(mn)
477 .requires("java.xml")
478 .exports(pn)
479 .build();
480
481 Module m = createModule(descriptor, loader);
482
483 // the module needs access to runtime classes
484 Module thisModule = TemplatesImpl.class.getModule();
485 Arrays.asList(Constants.PKGS_USED_BY_TRANSLET_CLASSES).forEach(p -> {
486 thisModule.addExports(p, m);
487 });
488
489 // For now, the module reads all unnnamed modules. This will be changed once
490 // the XSLT compiler is updated to generate code to invoke addReads.
491 Modules.addReadsAllUnnamed(m);
492
493 // java.xml needs to instanitate the translet class
494 thisModule.addReads(m);
495
496 for (int i = 0; i < classCount; i++) {
497 _class[i] = loader.defineClass(_bytecodes[i]);
498 final Class superClass = _class[i].getSuperclass();
499
500 // Check if this is the main class
501 if (superClass.getName().equals(ABSTRACT_TRANSLET)) {
502 _transletIndex = i;
503 }
504 else {
505 _auxClasses.put(_class[i].getName(), _class[i]);
506 }
507 }
508
509 if (_transletIndex < 0) {
510 ErrorMsg err= new ErrorMsg(ErrorMsg.NO_MAIN_TRANSLET_ERR, _name);
511 throw new TransformerConfigurationException(err.toString());
512 }
|
41 import java.lang.module.Configuration;
42 import java.lang.module.ModuleDescriptor;
43 import java.lang.module.ModuleFinder;
44 import java.lang.module.ModuleReference;
45 import java.lang.reflect.Layer;
46 import java.lang.reflect.Module;
47 import java.security.AccessController;
48 import java.security.PrivilegedAction;
49 import java.util.Arrays;
50 import java.util.HashMap;
51 import java.util.Map;
52 import java.util.Optional;
53 import java.util.Properties;
54 import java.util.Set;
55 import javax.xml.XMLConstants;
56 import javax.xml.transform.Templates;
57 import javax.xml.transform.Transformer;
58 import javax.xml.transform.TransformerConfigurationException;
59 import javax.xml.transform.URIResolver;
60
61
62 /**
63 * @author Morten Jorgensen
64 * @author G. Todd Millerj
65 * @author Jochen Cordes <Jochen.Cordes@t-online.de>
66 * @author Santiago Pericas-Geertsen
67 */
68 public final class TemplatesImpl implements Templates, Serializable {
69 static final long serialVersionUID = 673094361519270707L;
70 public final static String DESERIALIZE_TRANSLET = "jdk.xml.enableTemplatesImplDeserialization";
71
72 /**
73 * Name of the superclass of all translets. This is needed to
74 * determine which, among all classes comprising a translet,
75 * is the main one.
76 */
77 private static String ABSTRACT_TRANSLET
78 = "com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet";
79
80 /**
468
469 String mn = "jdk.translet";
470
471 String pn = _tfactory.getPackageName();
472 assert pn != null && pn.length() > 0;
473
474 ModuleDescriptor descriptor
475 = new ModuleDescriptor.Builder(mn)
476 .requires("java.xml")
477 .exports(pn)
478 .build();
479
480 Module m = createModule(descriptor, loader);
481
482 // the module needs access to runtime classes
483 Module thisModule = TemplatesImpl.class.getModule();
484 Arrays.asList(Constants.PKGS_USED_BY_TRANSLET_CLASSES).forEach(p -> {
485 thisModule.addExports(p, m);
486 });
487
488 // java.xml needs to instanitate the translet class
489 thisModule.addReads(m);
490
491 for (int i = 0; i < classCount; i++) {
492 _class[i] = loader.defineClass(_bytecodes[i]);
493 final Class superClass = _class[i].getSuperclass();
494
495 // Check if this is the main class
496 if (superClass.getName().equals(ABSTRACT_TRANSLET)) {
497 _transletIndex = i;
498 }
499 else {
500 _auxClasses.put(_class[i].getName(), _class[i]);
501 }
502 }
503
504 if (_transletIndex < 0) {
505 ErrorMsg err= new ErrorMsg(ErrorMsg.NO_MAIN_TRANSLET_ERR, _name);
506 throw new TransformerConfigurationException(err.toString());
507 }
|