java - datos - pool de conexiones jboss
xi: incluir en el archivo xml dentro del archivo jar no funciona en WildFly (2)
Depende de tu analizador XML.
Según su excepción, parece que usa SAX.
Pruebe este artículo: https://www.ibm.com/developerworks/library/x-tipentres/
El documento anterior utiliza la interfaz EntityResolver
API SAX para localizar recursos en un documento XML.
Aquí está el escenario:
Incluí varios .xml
(algo de una configuración) necesarios para que mi aplicación se ejecute en un archivo .jar
. El archivo jar tiene la siguiente estructura:
settings-1.0.0.jar
˪ resources/
˪ 1.xml
˪ 2.xml
˪ 3.xml
˪ META-INF/
˪ MANIFEST.MF
1.xml
tiene el siguiente contenido:
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
<!-- Include 2 -->
<xi:include
href="resource:resources/2.xml" />
<!-- Include 3 -->
<xi:include
href="resource:resources/3.xml" />
<!--
<map>
</map>
-->
</document>
basado en este artículo Al intentar acceder a estos incluye (después de implementar con éxito mi aplicación) aparece el siguiente error:
Caused by: org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 43; An ''include'' failed, and no ''fallback'' element was found.
at org.apache.xerces.parsers.DOMParser.parse(DOMParser.java:245)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:298)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
at org.zcore.dkp.backend.mapper.MappingParser.parse(MappingParser.java:60)
... 327 more
Probé (y cometí un error) todas las opciones imaginables. ¿Cuál es la combinación correcta para xi:include
un archivo .xml
en un archivo jar
instalado como módulo WildFly?
Editar : Así es como se carga xmlfile:
private void loadBackendMapping() {
try {
BackendMappingParser parser = new BackendMappingParser();
InputStream in = ResourceLoaderHelper.getResourceAsStream(BACKEND_MAPPING_RESOURCE);
if (in == null) {
throw new FileNotFoundException();
}
try {
parser.parse(in);
} finally {
try {
in.close();
} catch (IOException e) {
log.warn("Failed to close " + BACKEND_MAPPING_RESOURCE, e);
}
}
backendMapping = parser.getMapping();
if (log.isDebugEnabled()) {
log.debug(BACKEND_MAPPING_RESOURCE + " successfully loaded!");
}
} catch (FileNotFoundException e) {
log.warn("/"" + BACKEND_MAPPING_RESOURCE + "/" not found!");
backendMapping = new BackendMapping();
} catch (Exception e) {
throw new CenterwareSystemException("Failed to parse " + BACKEND_MAPPING_RESOURCE, e);
}
}
BACKEND_MAPPING_RESOURCE
contiene el nombre de archivo ( 1.xml
).
Elimine el prefijo "resource:" de sus URL, ya que este parece ser un protocolo específico de JBoss.
También emita la ruta "resource /", ya que 1.xml, 2.xml y 3.xml residen todos en la misma carpeta y generalmente se especifica la ruta relativa (de 1 a 2 y de 1 a 3).
Pruebe lo siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:xi="http://www.w3.org/2001/XInclude">
<!-- Include 2 -->
<xi:include href="2.xml" />
<!-- Include 3 -->
<xi:include href="3.xml" />
<!--
<map>
</map>
-->
</document>