java - sec - spring form docs
Manera correcta de utilizar el espacio de nombres p y util en la configuraciĆ³n XML de Spring (2)
Mi objetivo es volver a escribir la sección sessionFactory de mi archivo xml en el mismo formato que todas las demás áreas de mi archivo xml. Necesito usar el espacio de nombres p para hacer que las cosas se vean consistentes y ordenadas. El problema que encontré es usar el espacio de nombres util / p.
Gracias por dejarme editar esta publicación. Este es mi archivo xml completo:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- DataSource Beans -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:url="jdbc:hsqldb:file:database.dat;shutdown=true"
p:driverClassName="org.hsqldb.jdbcDriver"
p:username="sa"
p:password="" />
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>/com/bookstore/domain/Book.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- Template Beans -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
p:dataSource-ref="dataSource" />
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"
p:sessionFactory-ref="sessionFactory" />
<!-- DAO Beans -->
<bean id="bookDao" class="com.bookstore.data.BookDao"
p:hibernateTemplate-ref="hibernateTemplate" />
<bean id="accountDao" class="com.bookstore.data.AccountDao"
init-method="createTable"
p:jdbcTemplate-ref="jdbcTemplate" />
<!-- Service Beans -->
<bean id="bookService" class="com.bookstore.services.BookService"
p:bookDao-ref="bookDao" />
<bean id="purchasingService" class="com.bookstore.services.PurchasingService"
p:bookServiceInterface-ref="bookService"
p:accountServiceInterface-ref="accountService" ></bean>
<bean id="accountService" class="com.bookstore.services.AccountService"
p:accountDao-ref="accountDao" />
<!-- AOP Advice Beans -->
<bean id="loggingAdvice" class="com.bookstore.advice.LoggingAdvice" />
<bean id="performanceTimingAdvice" class="com.bookstore.advice.PerformanceTimingAdvice" />
<!-- Auto Proxy -->
<aop:aspectj-autoproxy />
</beans>
Esto es lo que tengo hasta ahora: usar una combinación de util: list y util: properties:
<util:list id="mappingResourcesList">
<value>/com/bookstore/domain/Book.hbm.xml</value>
</util:list>
<util:properties id="hibernatePropertiesProps">
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</util:properties>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
p:dataSource-ref="dataSource"
p:mappingResources-ref="mappingResourcesList"
p:hibernateProperties-ref="hibernatePropertiesProps" />
El mensaje de error que recibo actualmente pertenece a la lista util: list, pero también desconfío de mis propiedades util:
Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:
Line 22 in XML document from class path resource [application.xml] is invalid;
nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c:
The matching wildcard is strict, but no declaration can be found for element ''util:list''.
¿Qué parte de mi util: list y util: properties debo cambiar para que esto funcione?
¿A qué espacios de nombres XML se asignan p
y util
? Estos deben ser declarados con xmlns:p="..."
y xmlns:util="..."
algún lugar dentro del elemento XML o un elemento padre del cual se están utilizando.
(El error que está recibiendo no es específico de SAX, pero es genérico para el análisis de XML).
Por ejemplo, para usar util
, su XML debería comenzar con lo siguiente:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">
Más detalles están disponibles en http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/xsd-config.html#xsd-config-body-schemas-util .
Para p
, también querrías agregar:
xmlns:p="http://www.springframework.org/schema/p"
Tenga en cuenta que nada requiere que use p:
y util:
Estos simplemente están siendo utilizados por la convención. Puede volver a escribir su XML para usar a:
y b:
todas partes, siempre que estén definidos para asignarse a los mismos espacios de nombres XML. (Es por eso que necesitan ser definidos.)
Le faltan las siguientes entradas en xsi: schemaLocation: springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
Ponlos en tu XML y deberías estar bien.