2012-05-28 2 views
1

Я использую MongoDB с Spring и Apache Shiro для управления сеансами. Поскольку я столкнулся с той же проблемой, о которой упоминалось в this вопрос, я прибегнул к использованию MongoTemplate напрямую, а не к расширению MongoRepository для реализации класса Realm, требуемого Shiro. Эта область - это просто DAO, который имеет дело с MongoDB для пользователя: &.Spring and MongoDB: SAXParseException при чтении Бин Определения

На данный момент у меня странная проблема с XML-бином определения. Он генерирует исключение SAXParserException, и я не могу понять, почему.

Я привел нижеприведенную информацию. Не могли бы вы мне помочь?

web.xml:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    metadata-complete="false"> 
    <display-name>Test Web App</display-name> 
</web-app> 

persistence.xml инициализации

<?xml version="1.0" encoding="UTF-8"?> 
<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:c="http://www.springframework.org/schema/c" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
     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.1.xsd 
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-3.1.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.1.xsd 
      http://www.springframework.org/schema/data/mongo 
      http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd 
      http://www.springframework.org/schema/util 
      http://www.springframework.org/schema/util/spring-util-3.1.xsd"> 

    <bean id="persistencyProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean" 
     p:location="classpath:persistency.properties" /> 

    <context:property-placeholder properties-ref="persistencyProps" /> 

    <!-- Activate Spring Data MongoDB repository support --> 
    <mongo:repositories base-package="com.test.webapp.repository" /> 

    <!-- MongoDB host --> 
    <mongo:mongo host="${mongo.host.name}" port="${mongo.host.port}"/> 

    <!-- Template for performing MongoDB operations --> 
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate" 
      c:mongo-ref="mongo" c:databaseName="${mongo.db.name}"/> 

    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 
     <property name="securityManager" ref="securityManager"/> 
    </bean> 

    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 
     <property name="cacheManager" ref="cacheManager"/> 
     <property name="realm" ref="mongoRealm"/> 
    </bean> 

    <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager"/> 

    <bean id="mongoRealm" class="com.test.webapp.login.MongoRealm/> 
</beans> 

Webapp

public class AppInit implements WebApplicationInitializer { 

    private static final String DISPATCHER_SERVLET_NAME = "dispatcher"; 

    public void onStartup(ServletContext container) throws ServletException { 
     container.setInitParameter("log4jConfigLocation", "log4j.properties"); 
     container.addListener(new Log4jConfigListener()); 

     AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); 
     rootContext.register(AppConfig.class); 

     // Manage the lifecycle of the root application context 
     container.addListener(new ContextLoaderListener(rootContext)); 

     // Create the dispatcher servlet's Spring application context 
     AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext(); 
     dispatcherContext.register(WebConfig.class); 

     // Register and map the dispatcher servlet 
     ServletRegistration.Dynamic dispatcher = container.addServlet(
       DISPATCHER_SERVLET_NAME, new DispatcherServlet(dispatcherContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); 

     // Filter for shiro 
     javax.servlet.FilterRegistration.Dynamic filterReg = container.addFilter("shiroFilter", DelegatingFilterProxy.class); 
     filterReg.setInitParameter("targetFilterLifecycle", "true"); 
     filterReg.addMappingForServletNames(null, true, DISPATCHER_SERVLET_NAME); 

    } 
} 

класс конфигурации

@Configuration 
@ComponentScan(basePackages = {"com.test.webapp.controller", "com.test.webapp.util", "com.test.webapp.login"}) 
@ImportResource("classpath:persistence.xml") 
public class AppConfig{ 

    @Bean(name = "jsonView") 
    public MappingJacksonJsonView jsonView() { 
     MappingJacksonJsonView mappingJacksonJsonView = new MappingJacksonJsonView(); 
     mappingJacksonJsonView.setContentType("application/json"); 
     return mappingJacksonJsonView; 
    } 
} 

Свойства файла

# database properties 
mongo.db.name=appkix_mas 
mongo.host.name=127.0.0.1 
mongo.host.port=27017 
mongo.collection.user=user 

Исключение цепи

org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 49 in XML document from class path resource [persistence.xml] is invalid; nested exception is org.xml.sax.SAXParseException: The value of attribute "class" associated with an element type "null" must not contain the '<' character. 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209) 
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180) 
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsFromImportedResources(ConfigurationClassBeanDefinitionReader.java:303) 
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitionsForConfigurationClass(ConfigurationClassBeanDefinitionReader.java:131) 
    at org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.loadBeanDefinitions(ConfigurationClassBeanDefinitionReader.java:118) 
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:294) 
    at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:203) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:617) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4779) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5273) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:895) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:871) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615) 
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:962) 
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1603) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: org.xml.sax.SAXParseException: The value of attribute "class" associated with an element type "null" must not contain the '<' character. 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) 
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanAttribute(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source) 
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) 
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
    at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75) 
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:388) 
    ... 29 more 

Большое спасибо за ваше время.

сообщение

ответ

5

ошибка говорит все:

Line 49 в документе XML с пути класса ресурса [persistence.xml] является недействительным; вложенное исключение составляет org.xml.sax.SAXParseException: Значение атрибута «класса», связанное с типом элемента «нуль» не должен содержать -х < 'символа

Вот строка 48:

<bean id="mongoRealm" class="com.test.webapp.login.MongoRealm/> 
            Missing double quote here--^ 
+0

Aaagh! Убей меня за ленивость/олень в фарах. – user1323865

 Смежные вопросы

  • Нет связанных вопросов^_^