java xml spring xsd drools

java - org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: el comodín coincidente es estricto



spring xsd (2)

En cuanto al marcador de error en Eclipse : solo tengo una solución, y dudo que haya una solución real para esto. Como dijo Xavi López en su respuesta aceptada, hay un archivo de spring-handlers de primavera en el frasco de drools-spring (para mí, drools-spring-5.3.0.Final.jar ), bajo META-INF . Esto, sin embargo, no hace referencia a un archivo xsd (aunque los archivos xsd residen en este mismo contenedor), pero contiene esto:

http/://drools.org/schema/drools-spring=org.drools.container.spring.namespace.SpringDroolsHandler http/://drools.org/schema/drools-spring-1.2.0=org.drools.container.spring.namespace.SpringDroolsHandler http/://drools.org/schema/drools-spring-1.3.0=org.drools.container.spring.namespace.SpringDroolsHandler http/://drools.org/schema/drools-spring-1.4.0=org.drools.container.spring.namespace.SpringDroolsHandler http/://drools.org/schema/drools-spring-1.5.0=org.drools.container.spring.namespace.SpringDroolsHandler

Como puede ver, define una clase de controlador para cada versión del xsd. Esto funciona bien con la primavera en tiempo de ejecución, pero nunca vi que funcionara con ninguna versión de Eclipse (ni con Spring Tool Suite).

Siempre termino desactivando la validación de los archivos xsd en el proyecto, que, para su comodidad, es como sigue:

  • Seleccione su proyecto en Package Explorer, haga clic en Archivo / Propiedades (o presione Alt + Intro)
  • En el cuadro de diálogo Propiedades para proyecto , seleccione Validación
  • Seleccione Habilitar configuración específica del proyecto (deshabilite la validación solo para este proyecto)
  • Desmarque Manual y Build for: XML Schema Validator
  • presiona OK
  • Haga clic derecho en el proyecto y seleccione Validar (para revalidar el proyecto con la configuración modificada)

(También traté de hacer referencia al xsd directamente desde la definición xml de los beans de primavera, pero no funcionó. Como el manejador definido en el archivo spring-handlers funciona en tiempo de ejecución, esta no sería una mejor solución en mi humilde opinión.)

org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ''drools:grid-node''.

Obtengo este error cuando agrego un grid-node y ksession a mi spring xml. Hice algunas búsquedas y parece un problema de classpath. ¿Qué dependencia me falta aquí?

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:drools="http://drools.org/schema/drools-spring" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://drools.org/schema/drools-spring org/drools/container/spring http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd"> <drools:grid-node id="node1"/> <drools:ksession id="ksession1" type="stateful" kbase="kbase1" node="node1" />

Mi pom.xml tiene lo siguiente para Drools.

<dependency> <groupId>org.drools</groupId> <artifactId>drools-camel</artifactId> <version>${drools.version}</version> <exclusions> <!-- This ensures that we use the latest version of Spring jars and not the one that comes with drools.version. --> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> </exclusion> <exclusion> <groupId>org.apache.camel</groupId> <artifactId>camel-spring</artifactId> </exclusion> <exclusion> <artifactId>camel-xstream</artifactId> <groupId>org.apache.camel</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>knowledge-api</artifactId> <version>${drools.version}</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>${drools.version}</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>${drools.version}</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-spring</artifactId> <version>${drools.version}</version> </dependency>


Este error se está emitiendo porque Drools XSD no se puede ubicar. En este comentario en la lista de usuarios de Drools, se afirma que los XSD no están disponibles públicamente, y el xsi:schemaLocation en el XML está mapeando ese XSD a http://drools.org/schema/drools-spring org/drools/container/spring/drools-spring-1.2.0.xsd , que no se resuelve en el XSD correcto.

Spring debería manejar automáticamente la resolución XSD dado el atributo xmlns:drools="http://drools.org/schema/drools-spring" . Uno de los archivos META-INF/spring.handlers Drools debe incluir un archivo META-INF/spring.handlers que define el mapeo XSD para el espacio de nombres drools . Algo como:

http://drools.org/schema/drools-spring=some.classpath.visible.package.xsdfile.xsd

Que debería manejar automáticamente el archivo XSD incluido en los archivos JAR Drools.

Intente eliminar las dos últimas líneas de su xsi:schemaLocation para que Spring resuelva automáticamente el XSD.

Algunos enlaces relacionados:

Por supuesto, también puede extraer ese XSD del archivo JAR, colocarlo en un directorio accesible desde su classpath y usar un URL relativo de classpath en xsi:schemaLocation .

Por cierto, es probable que sea un error de copiar y pegar, pero su elemento <beans> tiene su etiqueta de cierre.

EDITAR : parece que Drools no estaba proporcionando los spring.handlers correctamente (al menos desde diciembre de 2010, ver Drools + Spring sin internet ). Es posible que necesite buscar en los JAR para obtener el XSD y consultarlo directamente en xsi:schemaLocation .