概要:昨年、WebアプリケーションをWebSphere 5/Java 4からTomcat 7/Java 7に移植した請負業者を監督しました。今年は、少し使い慣れた機能が壊れていることがわかりました。組織の変更により、この分野で働くチームは私だけになりましたので、これ以上話す人はいません。Java getClass()。getClassLoader()。getResource( "/My_Form.xsd")はnullを返します。
私はこの問題を、getClass()。getResource( "/ My_Form.xsd")がnullを返すまで追跡しました。私は明らかにチェックした:warファイルのルートはMy_Form.xsdを含み、Tomcatがwarファイルを爆発させるディスク上に座っている。
ここでは、コード(少し元のJava 4のバージョンからリファクタリング)です:
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;
}
...
}
出力は "スロー新しい例外(...)" ラインからのスタックトレースです:
17:38:56.756(03/20) INFO MyApp : java.lang.Exception: Could not getResource /My_Form.xsd
は、
とスタックトレース。
私は他の形式の通話を試みました。これらのどちらもが任意のより良い仕事:
URL schemaUrl = getClass().getResource("/My_Form.xsd");
URL schemaUrl = DocumentBuilderFactory.class.getClassLoader().getResource(schema);
応答でのgetResource()がnullを返すについて別の質問に、提案がAppName.war tfをjarファイルを実行することでした。
私はそれをやった、とMy_Form.xsdはwarファイルのルートにある:
$ 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/
...
$
私は他の人がこのエラーを持っていることについて見つけることができるドキュメントおよびすべてのページを読んで、コードが間違って何をしているのか分かりません。同じ呼び出しがWebSphere 5/Java 4で機能しました。私は感謝してすべての提案を受け入れます...
「WEB-INF/classes/resources /」に移動してみてください – pvg