Question

I'm having trouble with a legacy Web Application that I'm migrating to Maven3.

I need to obtain a file from the Classpath that in the directory structure is located in:

/src/main/resources/com/thinkglish/geoip/GeoIP.dat

When I create the .war file with the Maven build, I can confirm that this .dat file is located (as it should be) in:

WEB-INF/classes/com/thinkglish/geoip/GeoIP.dat

I'm trying two different approaches to get the resource from one of my classes, which implements javax.servlet.Filter:

ClassPathResource resource = new ClassPathResource("com/thinkglish/geoip/GeoIp.dat");

and

URL resource = getClass().getResource("/com/thinkglish/geoip/GeoIp.dat");

If I start the application using Maven's Jetty plugin, that works fine in both ways. However, when I deploy the application in a Tomcat and start the server, the resource cannot be located.

In the first case I get a java.io.FileNotFoundException: class path resource [com/thinkglish/geoip/GeoIp.dat] cannot be resolved to URL because it does not exist and in the second case the resource is null.

A curious thing about all this is that if I use one method or the other trying to obtain another resource from the Classpath (e.g. com/thinkglish/struts/i18n/MessageResources.properties or com/thinkglish/filter/LanguageFilter.class) it works without any problems.

Do you have any guess about this? Is it possible that the .dat extension has anything to do with this?


Edited - More data!

I added a new .properties mock file to the exact same directory in which the .dat file lives:

/src/main/resources/com/thinkglish/geoip/mock.properties

I tried to obtain it in Tomcat6 and it worked!

ClassPathResource resource = new ClassPathResource("com/thinkglish/geoip/mock.properties");

I'm starting to think that I need to do something else configuration-wise to make Tomcat6 accept the .dat file as a Classpath resource.

Thanks in advance!

Était-ce utile?

La solution

I might be barking up completely the wrong tree here... but have you checked the capitalisation of GeoIP.dat / GeoIp.dat? Is Tomcat running on a case-sensitive OS?

Autres conseils

Following should work:

String classpathLocation = "com/thinkglish/geoip/GeoIp.dat";
URL classpathResource = Thread.currentThread().getContextClassLoader().getResource(classpathLocation);
// Or:
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(classpathLocation);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top