Überblick: Letztes Jahr überwachte ich einen Auftragnehmer, der eine Webanwendung von WebSphere 5/Java 4 auf Tomcat 7/Java 7 portierte. In diesem Jahr haben wir entdeckt, dass ein wenig genutztes Feature kaputt ist. Organisatorische Änderungen haben das Team, das in diesem Bereich arbeitet, auf mich reduziert, so dass ich niemanden habe, mit dem ich darüber reden könnte.Java getClass(). GetClassLoader(). GetResource ("/My_Form.xsd") gibt null zurück
Ich verfolgt das Problem auf GetClass(). GetResource ("/ My_Form.xsd") gibt null zurück. Ich habe das Offensichtliche überprüft: Die Wurzel der War-Datei enthält My_Form.xsd und sie befindet sich auf der Festplatte, auf der Tomcat die War-Datei explodiert.
Hier ist der Code (etwas von der ursprünglichen Version Java 4 Refactoring):
package com.mycompany;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
...
public class MyFormMaintenanceFactory {
...
public DocumentBuilderFactory getDocumentBuilderFactory()
throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true);
dbf.setNamespaceAware(true);
dbf.setIgnoringComments(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
String schema = "/My_Form.xsd";
URL schemaUrl = getClass().getClassLoader().getResource(schema);
if (schemaUrl == null) {
throw new Exception("Could not getResource " + schema);
}
dbf.setAttribute(JAXP_SCHEMA_SOURCE, schemaUrl.toExternalForm());
return dbf;
}
...
}
Der Ausgang ist ein Stack-Trace aus der "throw new Exception (...)" Linie:
17:38:56.756(03/20) INFO MyApp : java.lang.Exception: Could not getResource /My_Form.xsd
und ein Stack-Trace.
Ich habe andere Formen des Anrufs ausprobiert. Keines dieser Arbeit besser:
URL schemaUrl = getClass().getResource("/My_Form.xsd");
URL schemaUrl = DocumentBuilderFactory.class.getClassLoader().getResource(schema);
In Antwort auf eine andere Frage zu getResource() Rückkehr null, war der Vorschlag jar tf AppName.war zu laufen.
ich das täte, und My_Form.xsd ist die Wurzel des Krieges Datei:
$ jar tf MyApp-3.0.1-SNAPSHOT.war
META-INF/
META-INF/MANIFEST.MF
Global/
...
Modules/
...
shared/
theme/
WEB-INF/
WEB-INF/classes/
WEB-INF/classes/com/
...
WEB-INF/classes/resources/
WEB-INF/lib/
WEB-INF/lib/tomcat_jars/
...
WEB-INF/struts-config/
WEB-INF/taglibs/
Global/css/components/basicControl.css
...
Global/image/arrow.gif
Global/image/atsign.jpg
Global/image/banner_background.gif
...
Global/JavaScript/components/ajax.js
,,,
Global/jsp_pages/components/basicControl.jsp
Global/jsp_pages/components/basicControlTitle.jsp
...
index.jsp
...
Modules/Global_Internal/jsp_pages/body.jsp
Modules/Global_Internal/jsp_pages/layout.jsp
Modules/Global_Internal/jsp_pages/sidebar.jsp
Modules/help/FAQ.html
...
shared/searchUtil.js
...
showAllTickets.jsp
showAllTickets_body.jsp
My_Form.xsd
theme/Master.css
WEB-INF/classes/com/mycompany/MyFormMaintenanceFactory.class
WEB-INF/classes/com/mycompany/MyFormMaintenanceFactory.java
...
WEB-INF/classes/resources/MyApp.properties
...
WEB-INF/lib/commons-beanutils-1.7.0.jar
WEB-INF/lib/commons-beanutils.jar
WEB-INF/lib/commons-chain-1.2.jar
WEB-INF/lib/commons-collections-2.1.jar
...
WEB-INF/web.xml
META-INF/maven/
...
$
ich die Dokumentation und jede Seite gelesen habe, kann ich über andere, die diesen Fehler finden, und ich kann nicht herausfinden, was der Code falsch macht. Der gleiche Aufruf funktionierte in WebSphere 5/Java 4. Ich akzeptiere dankbar alle Vorschläge ...
Versuchen Sie, es in 'WEB-INF/classes/resources /' – pvg