복붙노트

[SPRING] Java에서 Spring 애플리케이션을 시작하는 예외

SPRING

Java에서 Spring 애플리케이션을 시작하는 예외

Maven을 사용하여 Spring 프로젝트를 컴파일하고 시작할 수있다.

mvn -e clean compile exec:java -Dexec.mainClass=de.fraunhofer.fkie.tet.vmware.manager.Test

그러나 maven-assembly-plugin (applicationContext.xml 포함)을 사용하여 단일 파일로 모든 jar 파일을 어셈블 할 때 java 실행 중에 항상 예외가 발생합니다.

java -cp target/test-jar-with-dependencies.jar:. de.fraunhofer.fkie.tet.vmware.manager.Test

  INFO: Loading XML bean definitions from class path resource [applicationContext.xml]
  Sep 6, 2010 10:37:21 AM org.springframework.util.xml.SimpleSaxErrorHandler warning
  WARNING: Ignored XML validation warning
  org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/context/spring-context.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
  ...
  Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: 
  Line 10 in XML document from class path resource [applicationContext.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 'context:annotation-config'.
  ...
  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:annotation-config'.

또한 클래스 정의에 직접 spring-context.xsd 등의 스키마 정의를 첨부하려고했지만 성공하지는 못했습니다.

less src/main/resources/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: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">

      <context:annotation-config />   <!-- wegen '@PostConstruct' -->
  <!--<context:component-scan base-package="de.fraunhofer" />     -->
  ...
  </beans>

해결법

  1. ==============================

    1.스프링 네임 스페이스 처리기는 /META-INF/spring.schemas 및 /META-INF/spring.handlers 파일을 사용하여 해결됩니다. 이 이름을 가진 파일은 다른 Spring jar에 존재하기 때문에, 아마 하나만 maven-assembly-plugin 후에 target jar에 남아있을 것입니다.

    스프링 네임 스페이스 처리기는 /META-INF/spring.schemas 및 /META-INF/spring.handlers 파일을 사용하여 해결됩니다. 이 이름을 가진 파일은 다른 Spring jar에 존재하기 때문에, 아마 하나만 maven-assembly-plugin 후에 target jar에 남아있을 것입니다.

    아마도이 파일들을 수동으로 합쳐서 maven-assembly-plugin이이 병합 된 파일로 target jar에있는 파일을 덮어 쓰도록 설정할 수 있습니다.

  2. ==============================

    2.스프링 구성 파일에 컨텍스트 XML 네임 스페이스가 누락 된 것 같습니다. 다음과 같이 스프링 설정 파일의 루트 요소에 추가되어야합니다 :

    스프링 구성 파일에 컨텍스트 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: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:annotation-config />
        <context:component-scan base-package="com.abc.xyz" />
    
    </beans>
    
  3. ==============================

    3.axtavt의 응답에 따라이 문제에 대한 근본적인 문제를 발견했으며이를 버그로보고했습니다. Spring의 경우 : https://jira.springsource.org/browse/SPR-8368 -이 파일의 병합 된 사본을 생성하기위한 해결 방법이 여기에 포함되어 있습니다. 후손을 위해 코드도 여기에 있습니다.

    axtavt의 응답에 따라이 문제에 대한 근본적인 문제를 발견했으며이를 버그로보고했습니다. Spring의 경우 : https://jira.springsource.org/browse/SPR-8368 -이 파일의 병합 된 사본을 생성하기위한 해결 방법이 여기에 포함되어 있습니다. 후손을 위해 코드도 여기에 있습니다.

    //IOUtils and FileUtils come from Apache Commons IO
    for(String s : new String[] {"spring.schemas", "spring.handlers", "spring.tooling"}) {
        Enumeration<?> e = Test.class.getClassLoader().getResources("META-INF/"+s);
        StringBuilder out = new StringBuilder();
        while(e.hasMoreElements()) {
            URL u = (URL) e.nextElement();
            out.append(IOUtils.toString(u.openStream())).append("\n");
        }
        File outf = new File(s);
        FileUtils.writeStringToFile(outf, out.toString(), "UTF-8");
    }
    
  4. ==============================

    4.나는이 문제에 3 가지 해결책이 있다고 믿는다.

    나는이 문제에 3 가지 해결책이 있다고 믿는다.

  5. ==============================

    5.당신은 봄에 어떤 의존성이 있습니까? 일부 스프링 jar 파일이 클래스 경로에 있지 않기 때문에 xml 구문 분석 오류가 발생할 수 있습니다. 봄 3에서 라이브러리는 많은 jar 파일로 나뉘어졌습니다. 이 게시물을 통해 필요한 것을 구체적으로 확인하십시오.

    당신은 봄에 어떤 의존성이 있습니까? 일부 스프링 jar 파일이 클래스 경로에 있지 않기 때문에 xml 구문 분석 오류가 발생할 수 있습니다. 봄 3에서 라이브러리는 많은 jar 파일로 나뉘어졌습니다. 이 게시물을 통해 필요한 것을 구체적으로 확인하십시오.

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${org.springframework.version}</version>
    </dependency>
    
  6. ==============================

    6.제안 또는 응답에서 구문 분석에 문제가 있음을 알리는 것처럼. 이 오류는 RestTemplate 클라이언트가 특정 종류의 응답을 리소스에서 예상하지만 리소스가 완전히 반환하는 경우 발생할 수 있습니다. 반환 된 응답의 변경과 관련된 POST RestTemplate 클라이언트에 대해이 오류가 발생했습니다.

    제안 또는 응답에서 구문 분석에 문제가 있음을 알리는 것처럼. 이 오류는 RestTemplate 클라이언트가 특정 종류의 응답을 리소스에서 예상하지만 리소스가 완전히 반환하는 경우 발생할 수 있습니다. 반환 된 응답의 변경과 관련된 POST RestTemplate 클라이언트에 대해이 오류가 발생했습니다.

    예 : Entity 'MyClass'를 반환하는 초기 RestTemplate이 변경되었으며 파서가 오류를 표시하기 위해 String을 반환했습니다.

     ResponseEntity<MyClass> postResponseEntity = restTemplate.postForEntity(postEndPoint, httpRequestEntity, MyClass.class);
     MyClass postResponseBody = postResponseEntity.getBody();
    

    로 변경

     ResponseEntity<String> postResponseEntity = restTemplate.postForEntity(postEndPoint, httpRequestEntity, String.class);
     String postResponseBody = postResponseEntity.getBody();
    

    응답 유형이 엔터티에서 String으로 변경됨에 따라 파서는 Response를 처리 할 때 오류를 발생시키기 시작했습니다. 응답 유형 (내 경우에는 String)을 수정하고 작업을 시작했습니다.

  7. from https://stackoverflow.com/questions/3650252/exception-starting-spring-application-from-java by cc-by-sa and MIT license