2017-03-20 3 views
0

Ü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 ...

+0

Versuchen Sie, es in 'WEB-INF/classes/resources /' – pvg

Antwort

1

Ressourcen müssen im Ordner /WEB-INF/classes des explodierten Krieges sein. Der vollständige Pfad der Datei muss <root-dir>/WEB-INF/classes/My_Form.xsd sein. Wenn Sie die Datei im Build-Projekt in src/main/resources ablegen, werden moderne Build-Tools (z. B. Maven) diese normalerweise korrekt in das War-Archiv unter /WEB-INF/classes kopieren, wenn das War-Archiv erstellt wird.

+0

zu verschieben. Das war es! Vielen Dank! –

Verwandte Themen