- PR -

jdk1.4でXindiceのXUpdate

投稿者投稿内容
なゆ♪
会議室デビュー日: 2003/11/25
投稿数: 9
投稿日時: 2003-12-04 17:34
おくちんさん、はじめまして。
おっしゃるとおりのところを直し、
他にもいろいろ調べながら直してたところ、
以下のようなエラーが出るようになりました。。。

*********************************************************************************
org.xmldb.api.base.XMLDBException:
 at org.apache.xindice.core.FaultCodes.createXMLDBException(FaultCodes.java:247)
 at org.apache.xindice.client.xmldb.services.XUpdateQueryServiceImpl.updateResourceResult(XUpdateQueryServiceImpl.java:198)
 at org.apache.xindice.client.xmldb.services.XUpdateQueryServiceImpl.updateResource(XUpdateQueryServiceImpl.java:213)
 at RDFBot.addURL(RDFBot.java:434)
*********************************************************************************

このエラーは
 catch (XMLDBException e) {
  e.printStackTrace();
 }
で出力させているエラーです。
RDFBot.javaの434行目は
  service.updateResource("list", xupdate);
の部分です。
いろいろ直すたびにエラーが出ていやになってきます
諦めてURLリストをPostgreSQLに入れる、という方法もあるのですが。。。

たびたびの教えてちゃん、申し訳ありません。
卒論の締切に追われ、切羽詰っておりまして。。。
自分でもいろいろ調べたつもりなのですが、もうお手上げ状態です
なにかご存知の方いらっしゃいましたら、アドバイスいただけると助かります。。
おくちん
会議室デビュー日: 2003/08/29
投稿数: 11
投稿日時: 2003-12-05 14:42
どうもおくちんです。

RDFBot.javaはなゆ♪さんが作成されたプログラムですよね?

service.updateResource("list", xupdate);

をただ普通に

service.update(xupdate);
と書いただけではだめでしょうか?

なゆ♪
会議室デビュー日: 2003/11/25
投稿数: 9
投稿日時: 2003-12-06 01:30
おくちんさん、お返事ありがとうございます。

RDFBot.javaは私が現在作成しているプログラムです。
 service.update(xupdate);
も試してみてはいたのですが、
これにすると上記のエラーに加えて以下のエラーが返ってきます。

****************************************************************
org.omg.CORBA.UNKNOWN: vmcid: 0x0 minor code: 0 completed: Maybe
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at java.lang.Class.newInstance0(Unknown Source)
 at java.lang.Class.newInstance(Unknown Source)
 at com.sun.corba.se.internal.iiop.messages.ReplyMessage_1_2.getSystemException(Unknown Source)
 at com.sun.corba.se.internal.iiop.ClientResponseImpl.getSystemException(Unknown Source)
 at com.sun.corba.se.internal.corba.ClientDelegate.invoke(Unknown Source)
 at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:457)
 at org.apache.xindice.client.corba.db._CollectionStub.queryCollection(_CollectionStub.java:820)
 at org.apache.xindice.client.xmldb.services.XUpdateQueryServiceImpl.updateResult(XUpdateQueryServiceImpl.java:165)
 at org.apache.xindice.client.xmldb.services.XUpdateQueryServiceImpl.update(XUpdateQueryServiceImpl.java:185)
****************************************************************

以下のスレッドに、同じようなエラーで悩んでいる人がいました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2209&forum=9&0
(Unknown Source)になっている部分が原因でしょうか...
  service.updateResource("list", xupdate);
にすればこのエラーが消えるのでそうしてたのですが・・・
Unknown Sourceということは、JAVAの設定がおかしいのでしょうか。
家のパソコンで見たら、該当ソースは%JAVA_HOME%のsrc以下にあるようですが...
共有パソコンなため誰かが設定を間違ったのかもしれません。
明日大学へ行ったら念のためJAVAを入れなおしてみます。


-------------------------------------------------------------------------
 2003/12/6
JAVA入れなおしてみましたが相変わらずのエラーが。。。
src.zipも念のため解凍してみたりもしましたが・・・
卒論の締切がきわどいので、一時しのぎで別の方法にしてみます。(-_-

[ メッセージ編集済み 編集者: なゆ♪ 編集日時 2003-12-06 17:08 ]
おくちん
会議室デビュー日: 2003/08/29
投稿数: 11
投稿日時: 2003-12-08 12:56
どうもおくちんです。

自分の環境(W2k、TOMCAT4.0.6、j2sdk1.4.1)下でなゆ♪さんの
XUpdateコマンドのコードを実行したところ、Query Compilation Error
がでてしまし、
\"/LIST\" child=\"last()\"

/LIST[last()]や
/LIST/
に変更するときちんと

<LIST>
<URL no="1">http://***</URL>
<URL no="2">http://***</URL>
</LIST>
に追加されました。

以下にサンプルとして作ったプログラムを書いておきます。

import org.xmldb.api.base.*;
import org.xmldb.api.modules.*;
import org.xmldb.api.*;
//import org.apache.xindice.client.corba.db.APIException;
import org.w3c.dom.*;
import java.io.*;

public class XUpdate {
public static void main(String[] args) throws Exception {

Collection col = null;
try{
// 1. Database実装クラスの登録
String driver = "org.apache.xindice.client.xmldb.DatabaseImpl";
Class c = Class.forName(driver);
Database database = (Database) c.newInstance();
DatabaseManager.registerDatabase(database);

// 2. コレクションの取得
col = DatabaseManager.getCollection("xmldb:xindice:///db/UserDB");

// 3. XUpdateQueryServiceの取得
org.xmldb.api.modules.XUpdateQueryService service = (org.xmldb.api.modules.XUpdateQueryService)
col.getService("XUpdateQueryService", "1.0");

//String XUpdatePath = "\"/LIST\" child=\"last()\""; //エラーがでた。
String XUpdatePath = "/LIST[last()]"; //成功
//String XUpdatePath = "/LIST/";    //成功
String no = "6";
String list = "http://www.";
String xupdate = "<xupdate:modifications version=\"1.0\"" +
" xmlns:xupdate=\"http://www.xmldb.org/xupdate\">" +
"<xupdate:append select=\""+ XUpdatePath + "\">" +
"<URL no=\"" + no + "\">" + list + "</URL>" +
"</xupdate:append>" +
"</xupdate:modifications>";
service.update(xupdate);
}
catch (XMLDBException e) {
System.err.println("XML:DB Exception occured " + e.errorCode);
System.err.println(e);
}
finally {
if (col != null) {
// 6. コレクションのクローズ
col.close();
}
}
}
}

ただ自分の場合はservice.update(xupdate)を使っており、なゆ♪さんのプログラム
ではservice.updateResource("list", xupdate)を使われておられたので、少し違うか
わかりませんが、参考となれば幸いです。
なゆ♪
会議室デビュー日: 2003/11/25
投稿数: 9
投稿日時: 2003-12-09 19:08
おくちんさん、ご丁寧にありがとうございます。

ちょっとここで謝らなければいけないことが・・・
私、ものすごく初歩的なミスをしていたようです
なんと、XalanやXercesの新バージョンを入れたまではいいのですが、
古いバージョンを消すのを忘れていました。。。(冷汗)
こんな初歩的ミスでふりまわしてしまって申し訳ありませんでした 
このミスが誰かのお役に立つことを願いつつ。。。

で、古いバージョンを消して動かしたらQuery Compilation Errorが出たため
おくちんさんのように直したところ、無事動きました
お手数をおかけしました
わざわざありがとうございましたm(_ _)m
ima
会議室デビュー日: 2003/11/21
投稿数: 6
投稿日時: 2003-12-17 21:59
どうも、imaと申します。

私も皆さんの書き込みを参考に設定を変えてみたところ、
うまくいきました。

しかし、ネームスペースを設定した時に限り、
追加(Xupdate:append)が正しく行われません。(エラーメッセージも出ません。)
ネームスペースを設定しない時や、
ネームスペースを設定しても、更新(XUpdate:update)はうまくいきます!

xerces-1.4.4
xalan-2.4.0
を使用しています。

この怪異な現象、
どなたかお分かりになる方がいらっしゃいましたら、
アドバイスをお願いいたします。

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