Xerces関連の障害。親ローダーにxml-apis.jar、子ローダーにxercesImpl.jarをロードさせたところ、 loader constraints violated when linking org/w3c/dom/Document class とエラーになった。xml-apis.jarも子ローダに読み込ませることで、解決。 ロードされているクラスが、どのファイルからロードされているかを確認する(解決)。System.out.println("Loaded: "+ clazz.getResource("/"+clazz.getName().replace('.','/')+".class"));
ロードされているクラスが、どのファイルからロードされているかを確認する*1public void print(String clazz) {
ClassLoader loader = getClass().getClassLoader();
System.out.println("----- " + clazz + " -----");
try {
Enumeration enum = loader.getResources(clazz);
while (enum.hasMoreElements()) {
URL resource = (URL) enum.nextElement();
System.out.println(resource);
}
} catch (IOException ex) {
ex.printStackTrace(System.err);
}
}
Class#getResource() をいろいろな環境でTomcatでは System.out.println(Log4jInitServlet.class.getResource("/"));
System.out.println(Log4jInitServlet.class.getResource("."));
System.out.println(Log4jInitServlet.class.getResource("lib"));
System.out.println(Log4jInitServlet.class.getResource("/../lib/"));
の結果は file:/C:/Documents and Settings/xxxx/My Documents/IBM/wssd/workspace/xxxx/Web Content/WEB-INF/classes/ null null file:/C:/Documents and Settings/xxxx/My Documents/IBM/wssd/workspace/xxxx/Web Content/WEB-INF/lib/ WASでは(正確にはWSSD) file:/C:/Program%20Files/IBM/WebSphere%20Studio/Site%20Developer/v5.1/runtimes/base_v5/properties/ file:/C:/Documents and Settings/m-kino/My Documents/IBM/wssd/workspace/FrameworkWebApplication/Web Content/WEB-INF/classes/kino/servlet/init/ null file:/C:/Program Files/IBM/WebSphere Studio/Site Developer/v5.1/runtimes/base_v5/java/lib/ おいっっ ポータブルにパスを取得する?(まだ)System.out.println(JavaDocumentSearcher.class.getResource("/")); <-指定したクラスの、ロードされたパス
System.out.println(JavaDocumentSearcher.class.getResource("/../lib/")); <-指定したクラスの、ロードされたパスからの相対パス(決定されたパスがクラスパスが通ってたら。)
結局URL url = getClass().getResource("/kino/log4j/log4j.xml");
などして、classesにkino/log4j/log4j.xmlを配置した。(クライアントアプリなど、自らクラスパスを通せる環境だったら、lib/とかに置いてもよいかも) JDKで使用している、XML実装のVersionの調べ方。System.out.println(org.apache.xerces.impl.Version.fVersion);
org.apache.xalan.Version.main(args);
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(xml);
// print(document);
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer transformer = tfactory.newTransformer(new StreamSource(xsl));
System.out.println(builder);
System.out.println(transformer);
JDKのJAXPの実装の入れ替え方法C:\j2sdk1.4.0\jre\lib\endorsed というディレクトリを作成し、その中に次のjarファイルを入れる。
URLString url = "file:" + System.getProperty("user.dir") + System.getProperty("file.separator") + urlstr;
newUrl = new URL(url);
javaの実行>java -classpath ".;lib;classes;lib\log4j-1.2.8.jar;swt.jar" kino.swt.JavaDocSearchForm >java -classpath ".;lib;classes;lib\log4j-1.2.8.jar;swt.jar;lib\kino_javadocsearch.jar" kino.swt.JavaDocSearchForm >java -classpath "クラスパス(セミコロン区切り)" クラス このサイトよいかも。 カレントディレクトリ取得方法SUNのお墨付きとのこと File fileCurrent=new File(".");
System.out.println(fileCurrent.getAbsolutePath());
ディレクトリ文字列のみ取得する方法にアレンジimport java.io.*;
public class MyTest{
public static void main(String[] args){
File fileParentDirectory=new File(".").getAbsoluteFile().getParentFile();
System.out.println(fileParentDirectory.getAbsolutePath());
}
}
システムのプロパティを見る方法<%
try {
Properties props = System.getProperties();
Enumeration keys = props.propertyNames();
for (int i = 1; keys.hasMoreElements(); i++) {
String key = (String)keys.nextElement();
String val = props.getProperty(key);
%>
<tr>
<td nowrap><font size=-1><%=i%></font></td>
<td nowrap><font size=-1><%=key%></font></td>
<td nowrap><font size=-1><%=val%></font></td>
</tr>
<%
}
} catch (Exception ex) {
}
%>
現在のアクセス:24294 |