#contents **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")); ** ロードされているクラスが、どのファイルからロードされているかを確認する((でもこれ、候補しかわかりませんね)) public 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/とかに置いてもよいかも) **JSPやServletのOutにDOMを書き出したい。 public void write(HttpServletRequest request, HttpServletResponse response) { response.setContentType("text/xml; charset=UTF-8"); try { PrintWriter out = response.getWriter(); transformer.transform(new DOMSource(getDocument()), new StreamResult(out)); } catch (IOException e) { } catch (TransformerException e) { } } **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ファイルを入れる。 -パーサ実装 --xmlParserAPIs.jar --xercesImpl.jar -xslt実装 --xalan.jar **xslでスペース( )を入れたい <xsl:text disable-output-escaping="yes">&nbsp;</xsl:text> ** XSLT変換 transformer.transform( new DOMSource(document), // new StreamResult(System.out)); new StreamResult(new FileOutputStream(new File("hogehoge.xml")))); ** ファイルのURLを取得する URL property = Object.class.getResource("/config/search.properties"); **プロキシ越えとか、HttpConnection #ref(http://kino.mine.nu/cgi-bin/viewcvs.cgi/*checkout*/FrameworkConnector/source/kino/framework/connector/Connector.java?rev=HEAD&content-type=text/plain) //プロキシ認証の記述方法 BASE64Encoder encoder = new BASE64Encoder(); urlConnection.setRequestProperty( "Proxy-Authorization", "Basic " + encoder.encode((userid + ":" + password).getBytes())); **URL String 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 "クラスパス(セミコロン区切り)" クラス [[このサイト:http://www.dmz.hitachi-sk.co.jp/Java/Tech/jre/execution.html]]よいかも。 **カレントディレクトリ取得方法 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()); } } **WEBアプリケーションのルートを取得してパスを生成する String root_path = this.getServletContext().getRealPath("/"); String file_path = root_path + "hoge.dat" **システムのプロパティを見る方法 <% 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) { } %> **Javadoc書き方 @see UserInformationManager#getUserInformation(String) とすると、リンクが張られる。 {@link InformationController InformationController}のファイル読み込みの実装です。 なんて使い方もできる ** コレクションを配列に変換 type: 型 collection: コレクションクラス (type[]) collection.toArray(new type[collection.size()]); ** 配列をコレクションに変換 fileList: Object[]型 java.util.Arrays.asList(fileList)) ** ファイルを読み込む BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(path)); //もしくは //new BufferedReader( // new InputStreamReader(url.openStream(), "JISAutoDetect")); String line; while ((line = reader.readLine()) != null) { buffer.append(line); buffer.append("\n"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } reader = null; } } ** Javaから、IEを起動(Windowsのみ) try { Runtime.getRuntime().exec( new String[] { "rundll32.exe", "url.dll,FileProtocolHandler", "http://jp.sun.com/" }); } catch (IOException e) { e.printStackTrace(); } ** Objectのシリアライズ try { //FileInputStreamオブジェクトの生成 FileInputStream inFile = new FileInputStream([serializeしたファイル名]); //ObjectInputStreamオブジェクトの生成 ObjectInputStream inObject = new ObjectInputStream(inFile); Object object = (クラス名) inObject.readObject(); inObject.close(); //オブジェクト入力ストリームのクローズ inFile.close(); //ファイル入力ストリームのクローズ //FileOutputStreamオブジェクトの生成 FileOutputStream outFile = new FileOutputStream([書き出したいファイル名]); //ObjectOutputStreamオブジェクトの生成 ObjectOutputStream outObject = new ObjectOutputStream(outFile); //クラスVectorのオブジェクトの書き込み outObject.writeObject(object); outObject.close(); //オブジェクト出力ストリームのクローズ outFile.close(); //ファイル出力ストリームのクローズ } catch (FileNotFoundException e) { } catch (IOException e) { } catch (ClassNotFoundException e) { } ** インナクラス、無名クラス インナークラス・無名クラスは、フィールドにはアクセス可能、ローカル変数には不可能。 #navi(Java) SIZE(10){現在のアクセス:&counter;}