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);
|