programing

사용자 지정 RestTemplate를 생성할 때 Spring-boot에 오류가 발생함

css3 2023. 7. 4. 22:03

사용자 지정 RestTemplate를 생성할 때 Spring-boot에 오류가 발생함

나는 있습니다sendGetREST일부를 보내는 방법URL endpoint다음과 같은 응답을 받습니다.

@Component
public class HttpURLCommand {
    private static Logger logger = Logger.getLogger(HttpURLCommand.class);

public String sendGetREST(String soapUrl, Object[] parameters) throws IOException{
        final String SOAP_URL = MessageFormat.format(soapUrl, parameters);
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response = restTemplate.getForEntity(SOAP_URL, String.class);

    logger.info("status code is: "+response.getStatusCode());
    if(response.getStatusCode().equals(HttpStatus.OK)){
        logger.info("send success");
        return response.getBody();
    }
    else {
        logger.info("send failed");
        return null;
    }

  }
}

잘 작동하고 있습니다.하지만, 시간 초과 시간을 사용자 지정할 수 있도록 하기 위해, 저는 이것을 가지고 있습니다.HTTPConfiguration 자습서에서:

@Configuration
public class HTTPConfiguration {

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate(clientHttpRequestFactory());
}

private ClientHttpRequestFactory clientHttpRequestFactory() {
    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
    factory.setReadTimeout(60000);
    factory.setConnectTimeout(60000);
    return factory;
   }
}

따라서 클래스는 다음과 같이 restTemplate를 호출합니다.

@Component
 public class HttpURLCommand {
    private static Logger logger = Logger.getLogger(HttpURLCommand.class);
    @Autowired
    RestTemplate restTemplate;

public String sendGetREST(String soapUrl, Object[] parameters) throws IOException{
        final String SOAP_URL = MessageFormat.format(soapUrl, parameters);
        ResponseEntity<String> response = restTemplate.getForEntity(SOAP_URL, String.class);

    logger.info("status code is: "+response.getStatusCode());
    if(response.getStatusCode().equals(HttpStatus.OK)){
        logger.info("send success");
        return response.getBody();
    }
    else {
        logger.info("send failed");
        return null;
    }

  }
}

그러나 불행히도 빌드할 때 다음 오류를 반환합니다.spring-boot앱:

Caused by: java.lang.NoClassDefFoundError: org/apache/http/protocol/HttpContext
at com.xl.MbbI.config.HTTPConfiguration.clientHttpRequestFactory(HTTPConfiguration.java:25) ~[classes/:na]
at com.xl.MbbI.config.HTTPConfiguration.restTemplate(HTTPConfiguration.java:21) ~[classes/:na]
at com.xl.MbbI.config.HTTPConfiguration$$EnhancerBySpringCGLIB$$191f99f.CGLIB$restTemplate$0(<generated>) ~[na:na]
at com.xl.MbbI.config.HTTPConfiguration$$EnhancerBySpringCGLIB$$191f99f$$FastClassBySpringCGLIB$$8330ce57.invoke(<generated>) ~[na:na]
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.0.RC2.jar:4.3.0.RC2]
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) ~[spring-context-4.3.0.RC2.jar:4.3.0.RC2]
at com.xl.MbbI.config.HTTPConfiguration$$EnhancerBySpringCGLIB$$191f99f.restTemplate(<generated>) ~[na:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_60]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_60]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_60]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_60]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.0.RC2.jar:4.3.0.RC2]
... 24 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.apache.http.protocol.HttpContext
at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.7.0_60]
at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.7.0_60]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_60]
at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.7.0_60]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.7.0_60]
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.7.0_60]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.7.0_60]
... 36 common frames omitted

참고로 오류는 위에 표시된 것보다 훨씬 많습니다.

첫 번째 줄은 다음과 같습니다.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'restTemplate' defined in class path resource .....
Caused by: java.lang.NoClassDefFoundError: org/apache/http/protocol/HttpContext

오류는 클래스 경로에 문제가 있음을 나타냅니다. 클래스 또는 .apache.http.protocol이 없기 때문일 수 있습니다.클래스 경로의 HttpContext입니다.이 클래스는 Spring Rest Template에서 자주 사용됩니다.일반적으로 Apache httpclient 라이브러리에서 이 클래스를 찾을 수 있습니다.종속성을 다시 확인해야 합니다.찾을 수 없는 경우 아래에 종속성을 추가할 수 있습니다(Maven을 사용하는 경우).

 <dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

언급URL : https://stackoverflow.com/questions/38779071/spring-boot-gets-an-error-when-creating-custom-resttemplate