件名を入力しようとしています。oracleのJavaソースでXML文書を検証しています
私はファイル(schemasource = 1)とclob(schemasource = 0)からxsdを使用しようとしています。 common_types.xsdとmigom.xsdという2つのxsdスキーマがあります。秒は最初に含まれます。 問題は、私は、ファイルからcommon_typesスキーマを使用していたとき、私はエラー
ORA-29532を取得していることである:キャッチされないJava例外でJavaコールが終了:oracle.xml.parser.v2.XMLParseException:内部エラー状態が発生しました。
とxmlを検証するときに最初のスキーマだけがclobから読み込まれていますが、私は成功しますが、2番目のxsdを追加すると、何も言わない同じエラーが発生します。
create or replace and compile java source named XmlTools AS
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.XMLReader;
import org.xml.sax.InputSource;
import oracle.sql.CLOB;
import java.io.IOException;
import org.xml.sax.SAXException;
import java.sql.SQLException;
import java.lang.IllegalArgumentException;
import oracle.xml.parser.v2.XMLParseException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
public class XmlValidator
{
static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource";
public static void ValidateDocument(int schemasource, oracle.sql.CLOB schemadoc, oracle.sql.CLOB schemadoc1, oracle.sql.CLOB xmldoc) throws SAXException, IOException, SQLException, ParserConfigurationException, XMLParseException, IllegalArgumentException {
try
{
File myfile = new File(".//XML//common_types.xsd");
if (myfile.exists())
{
Serv.log("ValidateDocument", "file size" + Long.toString(myfile.length()));
}
/*else
{
Serv.log("ValidateDocument", "file doesn't exists");
}*/
Serv.log("ValidateDocument", "1");
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
Serv.log("ValidateDocument", "2");
SAXParser saxParser = factory.newSAXParser();
saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
if (schemasource == 0)
{
InputSource schemaIs = new InputSource(schemadoc.getCharacterStream());
InputSource schemaIs1 = new InputSource(schemadoc1.getCharacterStream());
InputSource[] schemas = {schemaIs, schemaIs1};
//saxParser.setProperty(JAXP_SCHEMA_SOURCE, schemaIs);
saxParser.setProperty(JAXP_SCHEMA_SOURCE, schemas);
}
else
{
saxParser.setProperty(JAXP_SCHEMA_SOURCE, ".//XML//common_types.xsd");
}
XMLReader reader = saxParser.getXMLReader();
//Получаем входной XML документ
InputSource documentIs = new InputSource(xmldoc.getCharacterStream());
Serv.log("ValidateDocument", "3");
//Запуск разбора
reader.parse(documentIs);
Serv.log("ValidateDocument", "4");
documentIs = null;
}
/*catch (SAXException e)
{
Serv.log("ValidateDocument", "SAXException");
Serv.log("ValidateDocument", "document is not valid because ");
Serv.log("ValidateDocument", e.getMessage());
throw(e);
}*/
catch (ParserConfigurationException e)
{
Serv.log("ValidateDocument", "ParserConfigurationException");
throw(e);
}
catch (IOException e)
{
Serv.log("ValidateDocument", "IOException");
throw(e);
}
catch (XMLParseException e)
{
Serv.log("ValidateDocument", "XMLParseException");
Serv.log("ValidateDocument", e.getMessage());
StackTraceElement[] stack = e.getStackTrace();
for (int i = 0; i < stack.length; i++)
{
Serv.log("stacktrace element no " + Integer.toString(i), "toString: " + stack[i].toString());
Serv.log("stacktrace element no " + Integer.toString(i), "file name: " + stack[i].getFileName() + ", class name: " + stack[i].getClassName() + ", method name: " + stack[i].getMethodName() + ", line : " + stack[i].getLineNumber());
}
throw(e);
}
catch (IllegalArgumentException e)
{
Serv.log("ValidateDocument", "IllegalArgumentException");
Serv.log("ValidateDocument", e.getMessage());
throw(e);
}
}
}
追加情報は、Javaスタックトレースから得た:
ファイル名:XMLError.java、クラス名:oracle.xml.parser.v2.XMLError、メソッド名:flushErrors1、行:320 ファイル名を:クラス名:oracle.xml.parser.v2.NonValidatingParser、メソッド名:parseDocument、行:300 ファイル名:XMLParser.java、クラス名:oracle.xml.parser.v2.XMLParser、メソッド名:parse 、行:200 ファイル名:XMLTOOLS、クラス名:XmlValidator、メソッド名:ValidateDocument、行:86
私のOracleバージョンは、Oracle Database 10g Enterprise Editionのリリース10.2.0.1.0である - のProd しかし、私の目的は、それが9
は役に立ちませんでした。私は、これらの2つのスキーマを1つに統合して、それをclobとして置くと、同じエラーにつながると言うことができます。そのため、問題は二番目のxsdにあると思うが、私は正確に何かを見つけることができない!すべてのスキーマ - 2つのスタンドアロンとマージされたものが整形式で有効である(altova xmlspyでチェック) –
はい、私はdothファイル<?xml version = "1.0" encoding = "windows-1251"でエンコードを指摘していますか?> –
右、それらを文字列に変換してデータベースに格納するときに、そのエンコーディングを使用しましたか? – jtahlborn