- PR -

DocumentオブジェクトをXMLに保存

1
投稿者投稿内容
ドナ
常連さん
会議室デビュー日: 2003/07/08
投稿数: 42
投稿日時: 2003-10-14 17:46
いつもお世話になってます。UKです。
XMLファイルを読み込んでデータの変更を行い、もとのXMLファイルに保存したいのですが、
servletでしようとするとうまくいきません。

root cause

java.lang.NoClassDefFoundError: org/apache/xml/serialize/OutputFormat
at sampleservlet.processRequest(sampleservlet.java:28)
at sampleservlet.doGet(sampleservlet.java:46)

といったエラーがでます。

以下はソースです。

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.parsers.*;
import org.apache.xml.serialize.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.stream.*;

public class sampleservlet extends HttpServlet{

public final static String FS = System.getProperty("file.separator");

public void init(ServletConfig config) throws ServletException{
super.init(config);
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
response.setContentType("text/html; charset=Shift_JIS");
PrintWriter out = response.getWriter();
String ctx = getServletContext().getRealPath("") + FS;
String xmlfile = "./xml/makerlist.xml";
String outfile = "./xml/output.xml";
try{
DocumentBuilder docBld = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = docBld.parse(new File(ctx + xmlfile));
OutputFormat of = new OutputFormat(doc);
of.setEncoding("Shift_JIS");

FileOutputStream fos = new FileOutputStream(ctx + outfile);
OutputStreamWriter osw = new OutputStreamWriter(fos, "Shift_JIS");
Writer w = new PrintWriter(osw);

XMLSerializer xs = new XMLSerializer(w, of);
xs.asDOMSerializer();
xs.serialize(doc.getDocumentElement());
w.close();
}catch(Exception e){
out.println(e.getMessage());
}
out.close();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
processRequest(request,response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
processRequest(request, response);
}
}



もしかしたらクラスパスに問題があるのかと思ったのですが、うまくいけませんでした。
.;C:\j2sdk1.4.1_02\lib\tools.jar;
C:\Program Files\Apache Group\Tomcat 4.1\common\lib\servlet.jar;
C:\j2sdk1.4.1_02\xalan-j_2_5_1\bin\xalan.jar;
C:\j2sdk1.4.1_02\xerces-2_5_0\xercesImpl.jar;

ご指導宜しくお願いします。
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-10-14 19:44
Tomcat が xalan, xerces を見つけられないのでしょう。
WEB-INF/lib 以下に該当する jar を置いてみては。
ドナ
常連さん
会議室デビュー日: 2003/07/08
投稿数: 42
投稿日時: 2003-10-14 20:23
動きました。でくのぼうさんありがとうございました。

>Tomcat が xalan, xerces を見つけられないのでしょう。
しかし何故このようなことがおこるのでしょう?
他の環境では掲載したクラスパスでうまくいったのですが
でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-10-14 21:21
それは Tomcat のクラスローダについて調べるとわかると思います。
今回は WEB-INF/lib 以下に置くよう書きましたが、実は他にも
JAR ファイルを置く候補があります。
アプリケーションの構成によって、どこに置くのかを決定するのが一般的と思われます。

http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html

本家にこの説明がありますから是非ご覧になってみてください。
ドナ
常連さん
会議室デビュー日: 2003/07/08
投稿数: 42
投稿日時: 2003-10-15 09:03
なるほど、今回は自分はcommon/lib以下に配置してできたのですが
JARファイルはアプリケーションによって置く場所が色々あったのですね。
勉強になりました。ありがとうございます
1

スキルアップ/キャリアアップ(JOB@IT)