Na minha aplicação eu preciso acessar o arquivo context.xml que está na pasta META-INF, através do Windows funcionou corretamente, entretanto, através do Linux Suse, não consegui acessar o arquivo!
meu código para acessar está assim:
Este é o erro que foi apresentado no Linux no log do tomcat
java.io.FileNotFoundException: webapps/MinhaAplicacao/META-INF/context.xml (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at br.com.consist.databridge.broker.InfoDBBroker.getInfoDBBean(InfoDBBroker.java:97)
at br.com.consist.databridge.service.InfoDBService.getInfoDBBean(InfoDBService.java:29)
at br.com.consist.databridge.ws.InfoDBWebService.getXML(InfoDBWebService.java:59)
at br.com.consist.databridge.servlet.InfoDBServlet.doPost(InfoDBServlet.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Bom num sei pq vc falou que num pode colocar o path completo. Se for pq o web container é flexivel, eu uso o seguinte código para identificar o path do arquivo:
URL u = Config.class.getResource("");
String s = u.getPath().toString();
if (s.startsWith ("jar:file:/")) {
int pos = s.indexOf (".jar!/");
if (pos != -1) {
if (File.separator.equals ("\\"))
s = s.substring ("jar:file:/".length(), pos + ".jar".length());
else
s = s.substring ("jar:file:".length(), pos + ".jar".length());
}
}
s = s.substring(6, s.length()-20);
s = s.replaceAll ("%20", " ").trim();
Só a primeira linha já ajuda. O resto … vamos dizer que facilitei p/ vc …rsrs debuga o que vem no “s” pra vc ver.
Daí vc passa o path completo
O negócio é que o start do tomcat estava sendo feito em uma pasta diferente da pasta bin, ou seja, no meu caso eu tenho que obrigar o start do tomcat ser feito à partir da pasta bin!
teria como eu pegar o caminho de onde o start foi feito?!! Aí eu criaria um conformo maior pra quem for fazer o start, pois ele não vai precisar acessar a pasta bin do tomcat!