2010-06-04 4 views
5

'src/main/recources'폴더에 다른 XML 파일이 있습니다.이 파일을 내 웹 응용 프로그램에서 읽고 싶습니다.xml 파일을 리소스 폴더 (WAR)에 저장하고 코드에서 읽음

File f = new File("file1.xml"); 
f.getAbsolutePath(); 

코드는 WebService를 내부에서 호출됩니다, 이것은 출력한다 : 나는 톰캣 서버 출력 내부에서 볼 때 'C \ 사용자 \ 관리자'. 내 현재 해결책은 'file1.xml'- 문서를 WAR의 바깥에 'C : \'- 폴더에 넣는 것입니다. 그러나이 방법으로 내 WAR는 양도 할 수 없습니다.

또한

<bean name="webService"> 
     <property name="document"> 
     <value>classpath:file1.xml</value> 
     </property> 
    </bean> 

을 시도했다 그러나 그것은 단지 출력합니다 : 파싱하지 않고 "클래스 경로 file.xml을".

감사합니다, 피트

답변

5

표준 maven2 war 패키징을 사용하는 경우 file1.xml이 warfile 내의 WEB-INF/classes 디렉토리에 복사됩니다.

이 파일은 classpath를 통해 액세스 할 수 있습니다.

URL resourceUrl = URL.class.getResource("/WEB-INF/classes/file1.xml"); 
File resourceFile = new File(resourceUrl.toURI()); 
+2

아하 작품, 내가 첫 번째 라인을 약간 수정했다 : URL resourceUrl = Thread.currentThread(). getContextClassLoader(). getResource ("file1.xml"); File1.xml은 물론 resources-folder에 있어야합니다. 감사합니다. – JavaPete

+0

하지만 currentThread(). getContextClassLoader()를 통해 이동해야하는 이유는 무엇입니까? 환경에 어떤 종류의 보안 제한이 있습니까? 아니면 제가 누락 되었습니까? 표준 Maven War Plugin을 사용하거나 어셈블리를 통해 webapp을 구축하고 있습니까? –

0

당신은 WEB-INF 아래 디렉토리에 파일을 넣어 (또는 WEB-INF 자체 내에서) 당신은 사용 ServletContextgetResourceAsStream 방법을 읽을 수 있습니다

try { 
    InputStream is = context.getResourceAsStream("/WEB-INF/file1.xml"); 
    ... 
} catch (IOException e) { 
    ... 
} 
+0

이 코드는 웹 서비스 메서드 (Spring-WS) 내에 있기 때문에 ServletContext 객체가 없습니다. 아니면 요점을 놓치고 있습니까? – JavaPete

0

경로 정보를/WEB-INF/classes 경로에 놓고 런타임에이 정보를 응용 프로그램에로드 할 수 있습니다.

이 경로 속성에 대해 다른 값을 사용하려면 Maven 프로파일 또는 다른 빌드 도구의 옵션을 사용할 수 있습니다. 이렇게하면 다른 환경에서 WAR 파일이 해당 환경에 적합한 경로의 올바른 특성 값을 갖게됩니다.

+0

예. 파일에 대한 상대 경로가 다른 설정 파일을 필요로하지 않으므로 그렇게하지 않으려합니다. 하지만 나는 다른 어떤 것도 얻을 수 없다면이 해결책을 사용할 것입니다. 감사합니다! – JavaPete

관련 문제