2011-01-26 19 views
8

Tengo una aplicación web en funcionamiento con applicationContext.xml en WEB-INF/config/applicationContext.xml. Ahora necesito implementar alguna herramienta de prueba como aplicación independiente, que puede usar el mismo applicationContext.xml, pero tiene un problema con la ruta a la configuración para la clase ClassPathXmlApplicationContext.Ruta correcta a applicationContext.xml con ClassPathXmlApplicationContext

Sé que cuando copio applicationContext.xml en el paquete predeterminado (donde reside .java) puedo usar ClassPathXmlApplicationContext ("applicationContext.xml"), pero ¿es esto necesario?

import org.apache.log4j.Logger; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class AdminTool { 

    private Logger log = Logger.getLogger(getClass()); 

    /** all below doesn't work - FileNotFoundException) **/ 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("/WEB-INF/config/applicationContext.xml"); 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("config/applicationContext.xml"); 
    private static final ApplicationContext ac = new ClassPathXmlApplicationContext("../config/applicationContext.xml"); 

    public static void main(String[] args) { 
     new AdminTool(); 
    } 

    public AdminTool() { 
     log.debug(ac); 
    } 

} 

Respuesta

12

En un escenario de prueba local, no se encuentra dentro de un Jar, por lo que no necesita acceso basado en Classpath. Use FileSystemXmlApplicationContext en su lugar.

Probablemente algo como esto:

private static final ApplicationContext ac = 
    new FileSystemXmlApplicationContext(
     "src/WEB-INF/config/applicationContext.xml" 
    ); 

(rutas son relativas desde el directorio de ejecución)

+0

Estaba pensando en ejecutar mi AdminTool usando webapp.war. ¿Será posible usar FileSystemXmlApplicationContext? – marioosh

+0

@marioosh No, en una guerra tienes los mismos problemas que en un contenedor: no hay archivos, solo entradas. ¿La guerra se implementa en un contenedor de servlets o local? –

+0

@Patrick Me gustaría usar la clase AdminTool desde .war sin implementar. PD: Tengo un proyecto maven: nuevo FileSystemXmlApplicationContext ("src/main/webapp/WEB-INF/config/applicationContext.xml"); funciona cuando ejecuto AdminTool en Eclipse – marioosh

1
private static final ApplicationContext ac = 
    new FileSystemXmlApplicationContext(
     "/WEB-INF/config/applicationContext.xml" 
    ); 
3

Ésta es la razón por la que prefiero poner todos los archivos de configuración en clases carpeta. De hecho, usando Maven, puede poner todos estos archivos en src/main/resources. Luego, en los archivos de prueba puede acceder como 'classpath: applicationContext.xml'.

0
private static final ApplicationContext ac = 
new FileSystemXmlApplicationContext(
    "/WEB-INF/config/applicationContext.xml" 
); 
+2

Explique por qué el código siguiente tiene problemas en comparación con el código anterior. – Phani

-1

por favor diríjase a la propiedad> Java Build Path> Origen de su proyecto, compruebe classpath y agregue el directorio antes de WEB-INF en classpath. Definitivamente es el trabajo

Cuestiones relacionadas