2011-07-18 20 views
9

Tengo un archivo XML estático en mi aplicación App Engine que se carga bien y estoy tratando de leerlo para algunas reglas basadas en la lógica de ejecución, pero el siguiente error me fue arrojado:Lea el archivo XML estático en Google App Engine

Caused by: java.security.AccessControlException: access denied (java.io.FilePermission /war/WEB-INF/StaticContent.xml read) 
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:393) 
    at java.security.AccessController.checkPermission(AccessController.java:553) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 
    at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:166) 
    at java.lang.SecurityManager.checkRead(SecurityManager.java:888) 
    at java.io.FileInputStream.<init>(FileInputStream.java:130) 
    at java.io.FileInputStream.<init>(FileInputStream.java:96) 

He intentado colocar el archivo directamente en la guerra y en los directorios war/WEB-INF, el problema persiste. El servidor de los intentos de leer el archivo es tan simple como esto:

final FileInputStream fis = new FileInputStream("/war/WEB-INF/StaticContent.xml"); 

De acuerdo con este artículo, estoy haciendo todo correctamente: http://code.google.com/appengine/kb/java.html#readfile

Cualquier ayuda será muy apreciada.

Respuesta

1

¿Ha intentado leer war/WEB-INF/StaticContent.xml en lugar de /war/WEB-INF/StaticContent.xml? Puede ser que este último se interprete como un camino absoluto, cuando en realidad no se sabe cuál es el camino absoluto y, por lo tanto, desea un camino relativo.

+0

que arroja otro error, el problema parecía ser el camino, mirar este mensaje: https://groups.google .com/forum/embed /? place = forum/google-appengine-java & showsearch = true & showpopout = true & parenturl = http% 3A% 2F% 2Fcode.google.com% 2Fappengine% 2Fforum% 2Fjava-forum.html% 3Fplace% 3Dforum% 2Fgoogle- appengine-java #! searchin/google-appengine-java/read $ 20static $ 20file/google-appengine-java/ltgp3DuTx7M/h8GCC9yMD4AJ – user583066

11

Use getResourceAsStream en lugar de abrir directamente FileInputStream.

La ubicación que especifique en FileInputStream se toma como una ubicación absoluta, razón por la cual obtiene la excepción de acceso denegado.

ServletContext context = getServletContext(); 
InputStream is = context.getResourceAsStream("/WEB-INF/StaticContent.xml"); 
+0

Utilicé .getRealPath en lugar de .getResourceAsStream y está funcionando bien. – user583066

+2

cómo acceder cuando está en la clase de punto final, por lo que el contexto no es accesible? –

+0

Se puede acceder al ServletContext en métodos de punto final. Puede agregar el ServletContext como parámetro y el marco lo inyectará automáticamente. –

0

Si el archivo se almacena en el directorio de guerra a continuación, puede acceder a ese sin especificar el nombre del proyecto en la ruta de archivo:

proyecto- guerra sample.json

entonces archivo de acceso con la ruta como - FileReader fr = nuevo FileReader ("war/sample.json");

:)

-1

He encontrado que los siguientes trabajó para mí:

InputStream feedStream = new FileInputStream("WEB-INF/" + fileName); 
+0

Está causando: AccessControlException: acceso denegado ("java.io.FilePermission" "/ WEB-INF/emails/activation_template" "read") –