2013-03-13 13 views
6

Jestem tylko ciekawy, co się stało z tym web.xml kodu, w którym mam ten błąd cvc-complex-type.2.3: Element 'context-param' cannot have character [children], because the type's content type is element-only. w widoku Eclipse (juno wersja) Markers.Dlaczego web.xml "context-param" nie może mieć znaków [dzieci]?

Oto kod:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app id="WebApp_ID" 
     version="2.5" 
     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_2_5.xsd"> 

    <display-name>Spring security web application (series)</display-name> 

 <!-- to specifically stop trouble with multiple apps on tomcat --> 
 <context-param> 
  <param-name>webAppRootKey</param-name> 
  <param-value>customauth_root</param-value> 
 </context-param> 

 <!-- Location of the XML file that defines the root application context 
  applied by ContextLoaderListener. --> 
 <context-param> 
  <param-name>contextConfigLocation</param-name> 
  <param-value> 
   WEB-INF/applicationContext.xml 
   WEB-INF/applicationContext-security.xml 
     </param-value> 
 </context-param> 

 <!-- Loads the root application context of this web app at startup. The 
  application context is then available via WebApplicationContextUtils.getWebApplicationContext(servletContext). --> 
 <listener> 
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
 </listener> 

 <listener> 
  <listener-class> 
   org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
 </listener> 

 <filter> 
  <filter-name>springSecurityFilterChain</filter-name> 
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
 </filter> 

 <filter-mapping> 
  <filter-name>springSecurityFilterChain</filter-name> 
  <url-pattern>/*</url-pattern> 
 </filter-mapping> 

 <!-- Provides core MVC application controller. See customauth-servlet.xml. --> 
 <servlet> 
  <servlet-name>customauth</servlet-name> 
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  <load-on-startup>1</load-on-startup> 
 </servlet> 

 <servlet-mapping> 
  <servlet-name>customauth</servlet-name> 
  <url-pattern>*.htm</url-pattern> 
 </servlet-mapping> 

 <servlet-mapping> 
  <servlet-name>customauth</servlet-name> 
  <url-pattern>*.do</url-pattern> 
 </servlet-mapping> 

 <welcome-file-list> 
  <welcome-file>index.jsp</welcome-file> 
 </welcome-file-list> 

</web-app> 
+0

ponieważ DTD nie zezwala że elementem mieć dzieci? –

+0

Dziwne, Specyfikacja serwletu 2.5 umożliwia podanie nazwy param-wartości i wartości param. Być może jest to problem Eclipse –

+0

Nie byłem pewien, co jest przyczyną tego, po prostu zrezygnować z projektu i ponownie odtworzyć. – huahsin68

Odpowiedz

9

Na początek używasz niedozwolonych znaków wewnątrz XML węzła param-value

Nie wolno używać „/”, „<” i innych znaków wewnątrz węzła, ponieważ przerwie to przetwarzanie dokumentu XML.

Powinieneś używać wrapperów CDATA lub PCDATA wokół wartości wewnątrz węzła XML.

np.

<param-value><![CDATA[ 
   WEB-INF/applicationContext.xml 
   WEB-INF/applicationContext-security.xml]]> 
    </param-value> 

To było przyczyną problemu.

+3

'/' jest prawidłowym znakiem wewnątrz węzła XML. – Tamas

+2

Dobra odpowiedź, nawet jeśli "/" wprowadzało w błąd (wystarczająco wyraźnie). Mój problem dotyczył @-znaków w wartości parametru. – MrLymy

+0

dziękuję za wskaźnik. W moim przypadku wynika to z zabłądzenia postaci w żądaniu. Myślę, że ten błąd nie jest konkretny, wszystko, co złe może spowodować. –

2

Niektóre niewidoczne znaki nie są uznawane za spację białą XML, dlatego wyświetlany jest błąd. Wyświetl wszystkie białe spacje, konfigurując preferencje Eclipse "Edytor tekstu", a znaki rouge będą się wyróżniać. Można również użyć tego narzędzia do sprawdzania poprawności pliku XML:

xmllint --noout --schema http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd XML_FILE 
0

Jesteś komentowania znacznik zamykający, ponownie przyjrzeć <filter-mapping>:

<filter-mapping> 
<filter-name>springSecurityFilterChain</filter-name> 
<url-pattern>  /*</url-pattern> 
</filter-mapping>` 
Powiązane problemy