簡體   English   中英

java.lang.IllegalArgumentException:URI不是絕對的spingboot應用程序中的錯誤

[英]java.lang.IllegalArgumentException: URI is not absolute Error in spingboot application

我正在嘗試從App2調用App1。 兩者都在springboot中,並托管在Cloudfoundry中。 在執行此過程時,出現以下錯誤。

java.lang.IllegalArgumentException:URI不是絕對的

但是,當我從郵遞員那里調用App1時,它的工作原理非常完美。 另外,當我從App2(從localmachine)調用App1(在cloudfoundry)時,它工作正常。

public class ClassA {
private String app1URL;

public ClassA(ConfigClass config) { 
    this.app1URL= config.getApp1Url();
    SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
    this.rest = new RestTemplate(requestFactory);        
    this.headers = new HttpHeaders();
    headers.add("Accept", "*/*");
}

    public String get(long employeeId, String token) {
      HttpEntity<String> requestEntity = new HttpEntity<>(headers);
      String app1URL = this.app1URL + "employee?employeeid="
            + employeeId+"&access_token=" + token;
      ResponseEntity<String> responseEntity = rest.exchange((app1URL), 
      HttpMethod.GET, requestEntity,String.class);
      return responseEntity.getBody();
}

當我用實際值對app1URL進行硬編碼時,它可以在cloudfoundry中工作。因此,我懷疑在cloudfoundry中解決this.app1URL時會遇到問題。 堆棧跟蹤如下:

java.lang.IllegalArgumentException: URI is not absolute
 at org.springframework.http.client.support.HttpAccessor.createRequest(HttpAccessor.java:85) ~[spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282) ~[spring-tx-4.3.8.REL

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_152]
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_152]
 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-w

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-web

 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.8.RELEASE.jar!/:4.3.8.RELE

 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) [spring-security-web-4.2.2.RELEASE.jar!/:4.2

 at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) [spring-security-web-4.2.2.RELEASE.jar!/:

 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.3.8.RELEASE.

 at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [spring-security-web-4.2.2.RELEASE.ja

 at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_152]
 at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) [spring-security-web-4.2.2.RELEASE.jar!/:4.2.2.RE

 at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [spring-security-web-4.2.2.RELEASE.jar!/:4.2

 at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) [spring-security-web-4.

 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) [spring-security-web-4.2.2.RELEASE.jar!/:4.2.2.RELEASE]
 at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
 at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) [spring-security-web-4.2.2.RELEASE.j

臨時解決方案:我必須在Java代碼中對網址進行硬編碼才能使其正常工作。 似乎網址沒有從application.properties以及manifest.yml文件中轉義(兩者都嘗試過)

從一個應用程序到另一個應用程序的Exposure API,我想您可能需要啟用服務發現並進行注冊(例如在Eureka Server中),因為它們將托管在相同的Cloud Foundry空間中。

希望下面的鏈接對您有所幫助

服務注冊表的關鍵鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM