Al utilizar Xerces o Xerces for Android en java es habitual encontrarse con este error al intentar validar un fichero XML contra un fichero XML Schema. Puede deberse a múltiples causas y es habitual invertir bastante tiempo intentando localizar el origen del problema.
Por esto mismo, lo mejor es seguir estos pasos para dar con el error (se presupone que la codificación es UTF-8 en ambos ficheros, cambiarla por la que proceda como UTF-16 por ejemplo):
- Utilizar previamente una herramienta externa de validación para verificar que el fichero XML valida contra el Schema. Altamente recomendable es el Free Online XML Validator de FREEFORMATTER.COM.
- Verificar que los ficheros están codificados en UTF-8 sin Byte Order Mask (BOM). Una herramienta realmente útil para evitar tener que trabajar con editores hexadecimales es Notepad++. En el menú de Notepad++, una vez abiertos los ficheros, en Codificación se pueden convertir o guardar a UTF-8 sin BOM. Comprobar también con el editor que no existen caracteres extraños. Cualquier espacio en blanco indebido o caracter extraño pueden ser los causantes del problema.
- Si en vez de trabajar con ficheros recuperas el XML o el Schema a partir de arrays de bytes convirtiendolos a String no utilizar el método Arrays.toString(byte[] byteArray). Utilizar el propio constructor de la clase String indicando siempre el juego de caracteres de la codificación de ambos ficheros, esto es: String( byte[] byteArray, Charset charset). Este error es típico de novatos, ya que ambas funciones poseen comportamientos diferentes.
Estos tres pasos se enumeran según probabilidad. Por tanto, el primero es la causa más probable del origen del error y la tercera, la menos.