samples/composition/src-api2.0-runtime/org/apidesign/runtime/check/VersionAwareClassLoader.java
1 package org.apidesign.runtime.check;
3 import java.io.IOException;
4 import java.io.InputStream;
7 final class VersionAwareClassLoader extends ClassLoader
8 implements RuntimeCheck.AwareLoader {
10 private final Map<String,String> requestedVersions;
12 public VersionAwareClassLoader(ClassLoader parent, Map<String,String> requestedVersions) {
14 this.requestedVersions = requestedVersions;
18 protected synchronized Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
19 if (name.endsWith("Test") && name.startsWith("api.")) {
21 InputStream is = getResourceAsStream(name.replace('.', '/').concat(".class"));
22 byte[] arr = new byte[is.available()];
23 int read = is.read(arr);
26 return defineClass(name, arr, 0, read);
27 } catch (IOException ex) {
28 throw new ClassNotFoundException("Cannot load " + name, ex);
32 return super.loadClass(name, resolve);
35 public String requestedVersion(String apiName) {
36 return requestedVersions.get(apiName);