I have a tomcat application running on AKS. I created bunch of environment variables so when tomcat launches, it can replace the value. When I use printenv in the container, it shows all the environment variables set via deployment.yaml.
However, when tomcat starts, it still doesn't recognizes environment variable, and says something like this:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'PACSDemoController': Invocation of init method failed; nested exception is java.net.URISyntaxException: Illegal character in path at index 1: ${widgetsRestBaseUrl} Here is my class:
public class BaseDemoController { protected URI restUri; @Resource(name = "widgetsRestBaseUrl") protected String widgetsRestBaseUrl; @Resource(name = "widgetsServerUploaderUrl") protected String widgetsServerUploaderUrl; @Resource(name = "widgetsServerViewerUrl") protected String widgetsServerViewerUrl; @Resource(name = "widgetsServerStudySelectionUrl") protected String widgetsServerStudySelectionUrl; @Resource(name = "widgetsServerHieStudySelectionUrl") protected String widgetsServerHieStudySelectionUrl; @Resource(name = "widgetsServerPatientHistoryUrl") protected String widgetsServerPatientHistoryUrl; @Resource(name = "widgetsServerShareImageUrl") protected String widgetsServerShareImageUrl; @Resource(name = "widgetServerPacsConfigUrl") protected String widgetServerPacsConfigUrl; @Resource(name = "apiNominate") protected String apiNominate; @Resource(name = "apiPacsConfig") protected String apiPacsConfig; @Resource(name = "widgetsServerNominatePacsUrl") protected String widgetsServerNominatePacsUrl; @Resource(name = "apiBaseUrl") protected String apiBaseUrl; @Resource(name = "widgetsBasicPacsConfigUrl") protected String widgetsBasicPacsConfigUrl; @Resource(name = "auth0Domain") protected String auth0Domain; @Resource(name = "widgetAuth0Audience") protected String widgetAuth0Audience; @Resource(name = "apiAuth0Audience") protected String apiAuth0Audience; @Autowired protected EpicTokenService epicTokenService; @PostConstruct public void initialize() throws URISyntaxException { restUri = new URI(widgetsRestBaseUrl); } All of these resources are coming from jndi.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:jee="http://www.springframework.org/schema/jee" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"> <bean id="apiBaseUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${apiBaseUrl}"/> </bean> <bean id="widgetsRestBaseUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsRestBaseUrl}"/> </bean> <bean id="widgetsServerUploaderUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsServerUploaderUrl}"/> </bean> <bean id="widgetsServerViewerUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsServerViewerUrl}"/> </bean> <bean id="widgetsServerStudySelectionUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsServerStudySelectionUrl}"/> </bean> <bean id="widgetsServerPatientHistoryUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsServerPatientHistoryUrl}"/> </bean> <bean id="widgetsServerShareImageUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsServerShareImageUrl}"/> </bean> <bean id="widgetServerPacsConfigUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetServerPacsConfigUrl}"/> </bean> <bean id="apiPacsConfig" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${apiPacsConfig}"/> </bean> <bean id="apiNominate" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${apiNominate}"/> </bean> <bean id="widgetsServerNominatePacsUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsServerNominatePacsUrl}"/> </bean> <bean id="widgetsBasicPacsConfigUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsBasicPacsConfigUrl}"/> </bean> <bean id="widgetsServerHieStudySelectionUrl" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetsServerHieStudySelectionUrl}"/> </bean> <bean id="apiAuth0Audience" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${apiAuth0Audience}"/> </bean> <bean id="widgetAuth0Audience" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${widgetAuth0Audience}"/> </bean> <bean id="auth0Domain" class="java.lang.String" factory-method="valueOf"> <constructor-arg value="${auth0Domain}"/> </bean> </beans> I am not sure why this is not working. I have two project almost exactly same, and one project works without a problem. Any suggestion?
Update: PACDemoController extends from BaseDemoController:
@Controller public class PACSDemoController extends BaseDemoController { and error is coming from @PostConstruct in BaseDemoController. Here is the log:
Caused by: java.net.URISyntaxException: Illegal character in path at index 1: ${widgetsRestBaseUrl} at java.net.URI$Parser.fail(URI.java:2848) at java.net.URI$Parser.checkChars(URI.java:3021) at java.net.URI$Parser.parseHierarchical(URI.java:3105) at java.net.URI$Parser.parse(URI.java:3063) at java.net.URI.<init>(URI.java:588) at com.accelarad.smr.widgets.demo.BaseDemoController.initialize(BaseDemoController.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ... 27 more
Error creating bean with name 'PACSDemoController'Please include the code for thePACSDemoControllerclass