2011-05-26 7 views
5

Quería utilizar, dentro de Google appengine, una pequeña biblioteca; uno de los métodos de una de sus clases (digamos MyClass.writeToFile()) usa java.io.FileOutputStream, que está entre las clases incluidas en la lista negra (bueno, no en white-listed).Si no se encuentra una clase de Java referenciada, o en la lista negra, ¿cuándo se detecta esto?

¿Esto implica que MyClass fallará en el momento de la carga de la clase o solo cuando (si) intento invocar el método ofensivo? ¿En qué momento se realiza esa comprobación ("FileOutputStream no permitido")? Al cargar el archivo MyClass y detectar que "se refiere a/depende de" FileOutputStream (no sé si esto está declarado en el bytecode MyClass)? ¿O al intentar cargar FileOutputStream, al invocar MyClass.writeToFile() por primera vez?

Además, en el supuesto de que el método MyClass.writeToFile() no es esencial para mi biblioteca (pero MyClass es), ¿hay alguna solución, o sería mejor refactorizar la biblioteca (y construir, por ejemplo dos frascos diferentes, una completa sandbox- hecha y derecha y otra amistoso) ?

+0

¿Por qué se permite 'java.io.FileInputStream' pero no' java.io.FileOutputStream'? – JAB

+0

@JAB: Porque Google AE tolera que se lea pero no se escriba. Suena razonable. – leonbloy

Respuesta

1

Realice una implementación de prueba. La implementación debería fallar si la recuerdo correctamente. Las clases que usa cierta clase son parte del código de bytes, y Google lo está verificando.

Edit: estoy contradiciendo :) Este hilo indica que el despliegue sólo no si la clase FileOutputStream se carga: GoogleAppEngine : possible to disable FileUpload?

Edit2: Y esto indica que es el cargador de clases que está comprobando/carga detener de clases prohibidas: The Sandbox

+0

Lo que de nuevo nos lleva a la pregunta: ¿La clase FileOutputStream se carga cuando se carga MyClass cuando se invoca MyClass.writeToFile()? ¿O esto depende del cargador de clases en particular? – leonbloy

+0

La clase puede cargarse cuando se carga su clase, pero depende del cargador de clases. – Kaj

0

Las clases son flojas a la primera referencia. Si su código nunca intenta usar FileOutputStream, entonces no debería haber ningún problema.

Cuestiones relacionadas