일치하는 와일드카드는 엄격하지만 'context:component-scan' 요소에 대한 선언을 찾을 수 없습니다.
첫 번째 봄 프로젝트를 시도하는 동안 다음과 같은 오류가 발생합니다.
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'context:component-scan
.applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<context:component-scan base-package="com.xyz" />
</beans>
에러의 원인
컨텍스트 네임스페이스의 스키마 위치를 지정하지 않았습니다.그 때문에, 다음의 에러가 발생합니다.
<beans .....
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
제가 문제가 좀 있어서
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'security:http'
spring-security-config jar를 클래스 패스에 추가해야 했습니다.
http://docs.spring.io/spring-security/site/docs/3.1.x/reference/ns-config.html
편집:
아마도 당신은 당신의 폼에 정확한 의존관계를 가지고 있을 것이다.
그렇지만.....
의존 관계를 , " " " " " " " " " " " "META-INF/spring.schemas
이 에 있는 것 같습니다.spring.schemas
른른른른
(조립된 병에서 파일을 추출하면 알 수 있습니다.)
봄철 스키마는 다음과 같은 여러 줄에 불과합니다.
http\://www.springframework.org/schema/p=org.springframework.beans.factory.xml.SimplePropertyNamespaceHandler
http\://www.springframework.org/schema/beans/spring-beans-3.0.xsd=org/springframework/beans/factory/xml/spring-beans-3.0.xsd
그러나 다른 종속성이 해당 파일을 덮어쓰면 정의가 http에서 검색되고 방화벽/프록시가 있는 경우 가져올 수 없습니다.
하나의 솔루션은 spring.schemas와 spring.handlers를 하나의 파일에 추가하는 것입니다.
확인:
하나의 병에 여러 스프링 종속성을 병합할 때 spring.handlers/spring.schema를 덮어쓰지 않도록 하기 위한 아이디어
스키마 위치의 이 경로가 잘못되었습니다.
http://www.springframework.org/schema/beans
은 바른른음음음음음음음음음음음음 the the the the the the the the the the the the 로 끝나야 합니다./
:
http://www.springframework.org/schema/beans/
이 오류는 필요한 XSD를 포함하는 jar 파일이 전개된 클래스 경로에 포함되지 않은 경우에도 발생할 수 있습니다.
컨테이너에서 종속성을 사용할 수 있는지 확인하십시오.
너무 늦었지만 다른 사람에게도 어느 정도 도움이 될 수 있습니다.
일치하는 와일드카드는 엄격하지만 'context:component-scan' 요소에 대한 선언을 찾을 수 없습니다.
즉, 일부 선언이 누락되었거나 XML에서 필수 선언을 찾을 수 없습니다.
내 경우, 나는 다음을 추가하는 것을 잊었다.
이것을 추가하면 문제가 해결된다.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
STS를 사용하는 경우 Eclipse에서 구성 파일을 "Bean Configuration" 파일로 표시할 수 있습니다(XML 파일을 만들거나 XML 파일을 마우스 오른쪽 버튼으로 클릭할 때 지정할 수 있습니다).
프로젝트에는 Spring Nature가 있어야 합니다(예를 들어 maven 프로젝트 오른쪽 클릭).
spring.xml
Config .
이 에디터에는 네임스페이스 탭이 있습니다.
그러면 네임스페이스를 지정할 수 있습니다.
.spring-tx
maven의 pom.xml에 정의되어 있지 않고 옵션이 없기 때문에 일치하는 와일드카드는 엄격하지만 요소 'tx:notation-drived'의 'context:component-scan' 문제에 대한 선언을 찾을 수 없습니다.
마크된 오류 또는 *.xsd 확장자로 끝나는 모든 URL의 https로 변경합니다.
context:component-scan을 xml로 처음 추가할 경우 다음 항목을 추가해야 합니다.
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
다양한 Spring jar에는 로컬 해결을 위해 대행 수신되는 URL 매핑을 포함하는 'META-INF/spring.schemas' 파일이 있습니다.이러한 파일에 특정 xsd URL이 표시되지 않는 경우(예를 들어 http에서https로 전환한 후) 스프링은 인터넷에서 스키마를 로드하려고 합니다.시스템에 인터넷 접속이 없는 경우 이 에러가 발생합니다.
이는 xsd 파일에 대한 http 매핑이 없는 Spring Security v5.2 이후가 해당될 수 있습니다.
수정하려면
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd"
로.
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
https://www.springframework.org/schema/security/spring-security.xsd"
실제 xsd URL만 http에서https로 변경되었습니다(위의 2곳만).
올바른 경로가 "/"로 끝나서는 안 됩니다. 제가 잘못해서 문제를 일으켰습니다.
올바른 방법:
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
네임스페이스 선언 및 스키마 위치를 사용하면 네임스페이스의 구문도 확인할 수 있습니다. 예:-
<beans xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation= http://www.springframework.org/`enter code here`schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-driven/> <!-- This is wrong -->
<context:annotation-config/> <!-- This should work -->
다음과 같이 http를 사용하여 xmlns 컨텍스트 추가
xmlns:context="http://www.springframework.org/schema/context"
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
위의 링크를 포함해야 합니다.
<context:property-placeholder location="classpath:sport.properties" />
<bean id="myFortune" class="com.kiran.springdemo.HappyFortuneService"></bean>
<bean id="myCoach" class="com.kiran.springdemo.setterinjection.MyCricketCoach">
<property name="fortuner" ref="myFortune" />
<property name="emailAddress" value="${ipl.email}" />
<property name="team" value="${ipl.team}" />
</bean>
</beans>
[ Add This Two Schema ]로케이션을 추가합니다.불필요한 스키마를 모두 추가할 필요 없이 충분하고 효율적입니다.
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
여기서 한 가지 언급되지 않은 가능성이 있지만, 저는 중요하다고 생각합니다.
일반적으로 검증을 수행할 때 검증은 다음 항목에 대해 수행되어야 합니다.xsi:schemaLocaation
제공된 매개 변수, 즉, 검증자가 컨텍스트에서 스키마를 로드하지 않은 경우 제공된 위치에서 스키마를 오프로드하려고 시도합니다.단, 기본적으로는 Java에서 사용되는 Xerces 파서는 USE_GRAMAR_ONLY_POOL_FEATURE라는 플래그(http://apache.org/xml/features/internal/validation/schema/use-grammar-pool-only),를 이노블로 하여 스키마의 오프로드를 디세블로 합니다.따라서 검증자의 문법 풀에 스키마를 미리 로드하지 않은 경우 해당 메시지가 나타납니다.
이 문제를 더욱 복잡하게 만드는 것은 이 기능을 검증자에서 직접 활성화할 수 없다는 점입니다.스키마 팩토리의 폭넓은 범위에서 이 기능을 유효하게 할 필요가 있습니다.
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
sf.setFeature(Constants.XERCES_FEATURE_PREFIX + Constants.USE_GRAMMAR_POOL_ONLY_FEATURE, false);
...
}
xsi 변경: 다음 순서로의 스키마로케이션 변경, 문제 해결
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
모든 방법을 시도해 봤지만 효과가 없어요.마지막으로 컨텍스트 URI의 xsi:schemaLocation에서 https가 아닌http여야 한다는 것을 알게 되었습니다.
언급URL : https://stackoverflow.com/questions/13589470/the-matching-wildcard-is-strict-but-no-declaration-can-be-found-for-element-co
'programing' 카테고리의 다른 글
단일 제품 페이지를 비활성화/숨기는 방법 (0) | 2023.03.22 |
---|---|
AngularJS 수동으로 컨트롤러 및 템플릿 렌더링 (0) | 2023.03.17 |
JSON 값에 지정된 속성이 포함되어 있는지 확인하기 위한 SQL 쿼리 (0) | 2023.03.17 |
Spring Boot의 Error Controller 및 Spring의 ResponseEntity 사용Exception Handler가 올바르게 실행됨 (0) | 2023.03.17 |
onChange 이벤트 내 2가지 함수를 호출합니다. (0) | 2023.03.17 |