Como uso o JDK6 ToolProvider e o JavaCompiler com o carregador de classe de contexto?

Meu caso de uso é compilar arquivos de origem gerados a partir de um programa java usando as classes ToolProvider e JavaCompiler fornecidas no JDK 6. Os arquivos de origem contêm referências a classes no classloader de contexto (ele é executado em um contêiner J2EE), mas não no classloader do sistema. Meu entendimento é que, por padrão, o ToolProvider criará a instância JavaCompiler com o carregador de classe do sistema.

Existe uma maneira de especificar um carregador de classe para o JavaCompiler usar?

Eu tentei essa abordagem, modificada a partir de algo no IBM DeveloperWorks:

FileManagerImpl fm = 
    new FileManagerImpl(compiler.getStandardFileManager(null, null, null););

com FileManagerImpl definido como:

static final class FileManagerImpl 
    extends ForwardingJavaFileManager<JavaFileManager> {

   public FileManagerImpl(JavaFileManager fileManager) {
      super(fileManager);
   }

   @Override
   public ClassLoader getClassLoader(JavaFileManager.Location location) {
      new Exception().printStackTrace();
      return Thread.currentThread().getContextClassLoader();
   }

}

O rastreamento de pilha indica que é chamado apenas uma vez durante o processamento da anotação. Eu verifiquei que a classe referenciada no arquivo de origem a ser compilada não está no caminho de classe do sistema, mas está disponível no carregador de classes de contexto.

questionAnswers(3)

yourAnswerToTheQuestion