programing

일치하는 와일드카드는 엄격하지만 'context:component-scan' 요소에 대한 선언을 찾을 수 없습니다.

abcjava 2023. 3. 17. 19:31
반응형

일치하는 와일드카드는 엄격하지만 '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 Tools > Add as Bean 설정

프로젝트에는 Spring Nature가 있어야 합니다(예를 들어 maven 프로젝트 오른쪽 클릭).

Spring Tools > Spring 프로젝트의 특성 추가

spring.xml Config .

[ With ]> [ Spring Config Editor ]를 사용하여 열기

이 에디터에는 네임스페이스 탭이 있습니다.

스프링 구성 편집기 - 네임스페이스 탭

그러면 네임스페이스를 지정할 수 있습니다.

Spring Config Editor - 네임스페이스 예시

.spring-txmaven의 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

반응형