< prev index next >

src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java

Print this page




 421         };
 422 
 423         ModuleFinder finder = new ModuleFinder() {
 424             @Override
 425             public Optional<ModuleReference> find(String name) {
 426                 if (name.equals(mn)) {
 427                     return Optional.of(mref);
 428                 } else {
 429                     return Optional.empty();
 430                 }
 431             }
 432             @Override
 433             public Set<ModuleReference> findAll() {
 434                 return Set.of(mref);
 435             }
 436         };
 437 
 438         Layer bootLayer = Layer.boot();
 439 
 440         Configuration cf = bootLayer.configuration()
 441                 .resolveRequires(finder, ModuleFinder.of(), Set.of(mn));
 442 
 443         PrivilegedAction<Layer> pa = () -> bootLayer.defineModules(cf, name -> loader);
 444         Layer layer = AccessController.doPrivileged(pa);
 445 
 446         Module m = layer.findModule(mn).get();
 447         assert m.getLayer() == layer;
 448 
 449         return m;
 450     }
 451 
 452     /**
 453      * Defines the translet class and auxiliary classes.
 454      * Returns a reference to the Class object that defines the main class
 455      */
 456     private void defineTransletClasses()
 457         throws TransformerConfigurationException {
 458 
 459         if (_bytecodes == null) {
 460             ErrorMsg err = new ErrorMsg(ErrorMsg.NO_TRANSLET_CLASS_ERR);
 461             throw new TransformerConfigurationException(err.toString());


 466                 public Object run() {
 467                     return new TransletClassLoader(ObjectFactory.findClassLoader(),_tfactory.getExternalExtensionsMap());
 468                 }
 469             });
 470 
 471         try {
 472             final int classCount = _bytecodes.length;
 473             _class = new Class[classCount];
 474 
 475             if (classCount > 1) {
 476                 _auxClasses = new HashMap<>();
 477             }
 478 
 479             // create a module for the translet
 480 
 481             String mn = "jdk.translet";
 482 
 483             String pn = _tfactory.getPackageName();
 484             assert pn != null && pn.length() > 0;
 485 
 486             ModuleDescriptor descriptor = ModuleDescriptor.module(mn)
 487                     .requires("java.xml")
 488                     .exports(pn)
 489                     .build();
 490 
 491             Module m = createModule(descriptor, loader);
 492 
 493             // the module needs access to runtime classes
 494             Module thisModule = TemplatesImpl.class.getModule();
 495             // the module also needs permission to access each package
 496             // that is exported to it
 497             PermissionCollection perms =
 498                 new RuntimePermission("*").newPermissionCollection();
 499             Arrays.asList(Constants.PKGS_USED_BY_TRANSLET_CLASSES).forEach(p -> {
 500                 thisModule.addExports(p, m);
 501                 perms.add(new RuntimePermission("accessClassInPackage." + p));
 502             });
 503 
 504             CodeSource codeSource = new CodeSource(null, (CodeSigner[])null);
 505             ProtectionDomain pd = new ProtectionDomain(codeSource, perms,
 506                                                        loader, null);




 421         };
 422 
 423         ModuleFinder finder = new ModuleFinder() {
 424             @Override
 425             public Optional<ModuleReference> find(String name) {
 426                 if (name.equals(mn)) {
 427                     return Optional.of(mref);
 428                 } else {
 429                     return Optional.empty();
 430                 }
 431             }
 432             @Override
 433             public Set<ModuleReference> findAll() {
 434                 return Set.of(mref);
 435             }
 436         };
 437 
 438         Layer bootLayer = Layer.boot();
 439 
 440         Configuration cf = bootLayer.configuration()
 441                 .resolve(finder, ModuleFinder.of(), Set.of(mn));
 442 
 443         PrivilegedAction<Layer> pa = () -> bootLayer.defineModules(cf, name -> loader);
 444         Layer layer = AccessController.doPrivileged(pa);
 445 
 446         Module m = layer.findModule(mn).get();
 447         assert m.getLayer() == layer;
 448 
 449         return m;
 450     }
 451 
 452     /**
 453      * Defines the translet class and auxiliary classes.
 454      * Returns a reference to the Class object that defines the main class
 455      */
 456     private void defineTransletClasses()
 457         throws TransformerConfigurationException {
 458 
 459         if (_bytecodes == null) {
 460             ErrorMsg err = new ErrorMsg(ErrorMsg.NO_TRANSLET_CLASS_ERR);
 461             throw new TransformerConfigurationException(err.toString());


 466                 public Object run() {
 467                     return new TransletClassLoader(ObjectFactory.findClassLoader(),_tfactory.getExternalExtensionsMap());
 468                 }
 469             });
 470 
 471         try {
 472             final int classCount = _bytecodes.length;
 473             _class = new Class[classCount];
 474 
 475             if (classCount > 1) {
 476                 _auxClasses = new HashMap<>();
 477             }
 478 
 479             // create a module for the translet
 480 
 481             String mn = "jdk.translet";
 482 
 483             String pn = _tfactory.getPackageName();
 484             assert pn != null && pn.length() > 0;
 485 
 486             ModuleDescriptor descriptor = ModuleDescriptor.newModule(mn)
 487                     .requires("java.xml")
 488                     .exports(pn)
 489                     .build();
 490 
 491             Module m = createModule(descriptor, loader);
 492 
 493             // the module needs access to runtime classes
 494             Module thisModule = TemplatesImpl.class.getModule();
 495             // the module also needs permission to access each package
 496             // that is exported to it
 497             PermissionCollection perms =
 498                 new RuntimePermission("*").newPermissionCollection();
 499             Arrays.asList(Constants.PKGS_USED_BY_TRANSLET_CLASSES).forEach(p -> {
 500                 thisModule.addExports(p, m);
 501                 perms.add(new RuntimePermission("accessClassInPackage." + p));
 502             });
 503 
 504             CodeSource codeSource = new CodeSource(null, (CodeSigner[])null);
 505             ProtectionDomain pd = new ProtectionDomain(codeSource, perms,
 506                                                        loader, null);


< prev index next >