So the code breaks in one context and works fine in another. When I run into problems of that class involving XML parsing I always look for threading issues. Most Java XML technologies rely on underlying parsers which, for reasons of performance, ignore thread safety. Is it possible that some other part of your app is down in the SAX code at the same time?
Jim -----Original Message----- From: Cesar Villar [mailto:[EMAIL PROTECTED] Sent: Friday, August 26, 2005 4:14 AM To: [email protected]; [EMAIL PROTECTED] Subject: Re: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap' When I write the content of the file that fails into another file the problem disappears. The stack exception is: - AbstractUnafeDAO static block: com.ibatis.common.exception.NestedRuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. java.lang.ExceptionInInitializerError at com.unafe.dao.DAOFactory.getCursoDAO(DAOFactory.java:74) at com.unafe.dao.pruebas.PruebaCursos.obtenerCursos(PruebaCursos.java:47) at com.unafe.dao.pruebas.PruebaCursos.main(PruebaCursos.java:39) Caused by: java.lang.RuntimeException: Error Initializing AbstractUnafeDAO :com.ibatis.common.exception.NestedRuntimeException: Error occurred. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.exception.NestedRuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. Caused by: org.xml.sax.SAXParseException: Falta elemento de raíz de documento. at com.unafe.dao.AbstractUnafeDAO.<clinit>(AbstractUnafeDAO.java:43) ... 3 more Exception in thread "main" And the content of the file is: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd"> <sqlMap namespace="CursoSQL"> <!-- ============================================================== ======================== CACHES ============================== ============================================================== --> <cacheModel id="curso_cache" type="MEMORY" > <flushInterval hours="24"/> <flushOnExecute statement= "insertCurso" /> <flushOnExecute statement= "updateCurso" /> <flushOnExecute statement= "deleteCurso" /> <property name="reference-type" value="WEAK" /> </cacheModel> <!-- ============================================================= ======================== ALIAS ============================== ============================================================= --> <typeAlias alias="CursoDTO" type="com.unafe.dto.cursos.CursoDTO"/> <!-- ================================================================= ======================== PARAMETERMAPS ========================== ================================================================= --> <parameterMap id="tipoSanitario" class="CursoDTO"> <parameter property="sanitario"/> </parameterMap> <parameterMap id="cursoId" class="CursoDTO"> <parameter property="id"/> </parameterMap> <parameterMap id="datosAlumnoSanitario" class="AlumnoDTO"> <parameter property="id"/> <parameter property="id"/> <parameter property="sanitario"/> </parameterMap> <!-- ================================================================= ======================== RESULTMAP ============================== ================================================================= --> <resultMap id="curso_resultado" class="CursoDTO"> <result property="id" column="CUR_ID" /> <result property="nombre" column="CUR_NOMBRE" /> <result property="temario" column="CUR_TEMARIO" /> <result property="creditos" column="CUR_CREDITOS" /> <result property="horas" column="CUR_NUMHORAS" /> <result property="sanitario" column="CUR_SANITARIO" /> <result property="precio" column="CUR_PRECIO" /> <result property="codigo" column="CUR_CODIGO" /> </resultMap> <resultMap id="curso_resultado_para_lista" class="CursoDTO"> <result property="id" column="CUR_ID" /> <result property="nombre" column="CUR_NOMBRE" /> <result property="codigo" column="CUR_CODIGO" /> <result property="sanitario" column="CUR_SANITARIO" /> </resultMap> <!-- ================================================================= ======================== CONSULTAS ============================== ================================================================= --> <select id="getCursos" resultClass="CursoDTO" cacheModel="curso_cache"> SELECT CUR_ID AS id, CUR_NOMBRE AS nombre, CUR_TEMARIO AS temario, CUR_CREDITOS AS creditos, CUR_SANITARIO AS sanitario, CUR_NUMHORAS AS horas, CUR_PRECIO AS precio, CUR_CODIGO AS codigo FROM CURSO </select> <select id="getCursosPorTipo" parameterMap="tipoSanitario" resultMap="curso_resultado"> SELECT CUR_ID, CUR_NOMBRE, CUR_TEMARIO, CUR_CREDITOS, CUR_SANITARIO, CUR_NUMHORAS, CUR_PRECIO, CUR_CODIGO FROM CURSO <dynamic prepend="where"> <isNotNull prepend="AND" property="sanitario"> CUR_SANITARIO = #sanitario# </isNotNull> </dynamic> </select> <select id="getTipoDeCurso" parameterClass="int" resultClass="java.lang.String"> SELECT CUR_SANITARIO FROM CURSO WHERE CUR_ID = #value# </select> <select id="getCursoPorID" parameterClass="int" resultMap="curso_resultado"> SELECT CUR_ID, CUR_NOMBRE, CUR_TEMARIO, CUR_CREDITOS, CUR_SANITARIO, CUR_NUMHORAS, CUR_PRECIO, CUR_CODIGO FROM CURSO WHERE CUR_ID = #value# </select> <select id="selectCursosNoSeleccionadosEnUnPeriodo" parameterClass="int" resultMap="curso_resultado_para_lista"> SELECT CUR_ID, CUR_CODIGO, CUR_NOMBRE, CUR_SANITARIO FROM CURSO WHERE CUR_ID NOT IN (SELECT CURPER_CURSO FROM CURSO_PERIODOLECTIVO WHERE CURPER_PERIODO = #value#) ORDER BY CUR_SANITARIO,CUR_NOMBRE </select> <select id="selectCursosNoCompradosPorAlumno" parameterMap="datosAlumnoSanitario" resultMap="curso_resultado"> SELECT CUR_ID, CUR_NOMBRE, CUR_TEMARIO, CUR_CREDITOS, CUR_SANITARIO, CUR_NUMHORAS, CUR_PRECIO, CUR_CODIGO FROM CURSO, V_CURSOSPERIODOACTUAL WHERE CUR_ID NOT IN( <!-- CURSOS QUE NO ESTEN YA COMPRADOS EN EL PERIODO LECTIVO ACTUAL --> SELECT CCPL_CURSO FROM COMPRA, COMPRA_CURSO_PERIODOLECTIVO WHERE COM_ALUMNO = ? AND COM_ESTADO IN ('A','E') AND CCPL_COMPRA = COM_ID AND CCPL_PERIODO = (SELECT PER_ID FROM PERIODOLECTIVO WHERE PER_FEC_INICIO <![CDATA[<=]]> SYSDATE AND PER_FEC_FIN>=SYSDATE ) ) AND CUR_ID NOT IN ( <!-- CURSOS APROBADOS ANTERIORMENTE --> SELECT CUR_ID FROM CURSO, EXAMEN, PRUEBAEXAMEN, CURSO_PERIODOLECTIVO WHERE CUR_ID=EXA_CURSO AND EXA_ID=PEXA_EXAMEN AND PEXA_ESTADO= 'AP' AND PEXA_ALUMNO = ? AND CURPER_CURSO=CUR_ID AND CURPER_PERIODO IN (SELECT PER_ID FROM PERIODOLECTIVO WHERE PER_FEC_INICIO <![CDATA[<]]> SYSDATE AND PER_FEC_FIN<![CDATA[<]]>SYSDATE) ) AND CUR_SANITARIO=? AND CPA_CURSO = CUR_ID </select> <!-- ============================================================== ======================== INSERT ============================== ============================================================== --> <insert id="insertCurso" parameterClass="CursoDTO"> <selectKey resultClass="int" keyProperty="id"> SELECT CURSO_SEQ.NEXTVAL AS ID FROM DUAL </selectKey> INSERT INTO CURSO ( CUR_ID, CUR_NOMBRE, CUR_TEMARIO, CUR_CREDITOS, CUR_NUMHORAS, CUR_SANITARIO, CUR_PRECIO, CUR_CODIGO) VALUES ( #id#, #nombre#, #temario:VARCHAR#, #creditos#, #horas#, #sanitario#, #precio#, #codigo# ) </insert> <!-- =============================================================== ======================== UPDATES ============================== =============================================================== --> <statement id="updateCurso" parameterClass="CursoDTO"> UPDATE CURSO SET CUR_NOMBRE= #nombre#, CUR_TEMARIO= #temario:VARCHAR#, CUR_CREDITOS= #creditos#, CUR_NUMHORAS= #horas#, CUR_SANITARIO= #sanitario#, CUR_PRECIO= #precio#, CUR_CODIGO= #codigo# WHERE CUR_ID = #id# </statement> <!-- =============================================================== ======================== DELETES ============================== =============================================================== --> <delete id="deleteCursoPorID" parameterClass="CursoDTO"> DELETE FROM CURSO WHERE CUR_ID = #id# </delete> </sqlMap> I can attach all others xml files and a class to prove the files. Thanks a lot. ______________________________________________ Renovamos el Correo Yahoo! Nuevos servicios, más seguridad http://correo.yahoo.es
