본문 바로가기
개발공부/개발하다_발견함

패키지 이름을 바꾸고 싶었다 (feat.전자정부프레임워크 낱낱히 헤집어보기)

by 맙소사 2022. 9. 16.

web.xml에서 dispatcher-servlet.xml 경로를 잡아준다.

1
2
3
4
5
6
7
8
9
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config/도메인명/springmvc/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
cs

context-common.xml 에서 base-package 경로를 잡아준다.

1
2
3
4
    <context:component-scan base-package="여기에 패키지 경로">
       <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>
 
cs

겸사겸사 아래에 있는 messageSource라는 id를 가진 bean도 함께 바꿔준다.

resource 이하에 존재하는 message 관련 설정이다. resource 이하 폴더명도 같이 바꿔주면 됨.

 

그럼 이제 javax.servlet.jsp.JspTagException: No message found under code 'image.errorBg' for locale 'ko_KR'.라는 에러가 뜬다... 폴더명과 경로만 바꿨을 뿐인데 어째서 ... 

 

세 가지가 있다

ko파일은 존재하길래 아예 localeResolver 디폴트를 ko로 고정하도록 했다.

1
2
3
    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" >
        <property name="defaultLocale" value="ko" />
    </bean>
cs

그럼 이제 javax.servlet.jsp.JspTagException: No message found under code 'image.errorBg' for locale 'ko'. 가 뜬다.

파일이 있는데 읽지를 못하니...

궁금해서 하단에 있는 localeChangeInterceptor를 주석처리해봤는데, 이 친구가 주석처리되면 기존의 ko_KR 에러가 뜬다.

1
2
3
4
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:여기를 바꿔주자/spring/context-*.xml</param-value>
    </context-param>
cs

No message found under code 'image.errorBg' for locale 'ko'. 오류로 서치해봐도 별다른게 보이지 않아서 검색단어를 변경해봤다. locale 변경 전자정부 프레임워크 locale 어쩌구 ... 하다가 그냥 web.xml 구경하는데 저 부분이 뭔가 바꿔줘야할것같길래 바꿨다.

 

그랬더니 이제는

class path resource [egovframework/sqlmap/example/sql-mapper-config.xml] cannot be opened because it does not exist

sql-mapper-config.xml을 못 찾겠다고 난리가 났다.

context-mapper.xml로 들어가면 디비레이어 셋업이 있다.

1
2
3
4
5
6
    <!-- SqlSession setup for MyBatis Database Layer -->
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:/여기/sqlmap/example/sql-mapper-config.xml" />
        <property name="mapperLocations" value="classpath:/여기/sqlmap/example/mappers/*.xml" />
    </bean>
cs

경로를 바꿔줬따.

context-sqlMap.xml에 들어가면 데이터베이스 레이어가 하나 더 있따.

1
2
3
4
5
    <!-- SqlMap setup for iBATIS Database Layer -->
    <bean id="sqlMapClient" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="classpath:/여기/sqlmap/example/sql-map-config.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
cs

이 친구도 바꿔줬다.

 

그리고 마지막으로 sql-map-config.xml에 들어가서 소스 경로를 또 수정해 주도록 하자.

1
2
3
4
<sqlMapConfig>
    <sqlMap resource="여기/sqlmap/example/sample/EgovSample_Sample_SQL.xml"/>
</sqlMapConfig>
 
cs

다 됐다.

그럼 이제 또 다른 에러가 뜬다.

\spring\context-validator.xml]: Cannot resolve reference to bean 'validatorFactory' while setting bean property 'validatorFactory';  nested exception is org.springframework.beans.factory.BeanCreationException:

 

context-validator.xml에서 validatorFactory의 경로를 수정해주면 된다.

1
2
3
4
5
6
7
8
    <bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
        <property name="validationConfigLocations">
            <list>
                <value>/WEB-INF/config/여기/validator/validator-rules.xml</value>
                <value>/WEB-INF/config/여기/validator/validator.xml</value>
            </list>
        </property>
    </bean>
cs

이렇게 끝인줄 알았는데 ...

Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'image.errorBg' for locale 'ko_KR'.

이 에러로 다시 돌아왔다.

맨 상단에는 2022-09-16 14:21:20,914  WARN [org.springframework.web.servlet.PageNotFound] No mapping found for HTTP request with URI [/egovSampleList.do] in DispatcherServlet with name 'action' 이 것도 뜬다. 왜 뜨지?

대체 오ㅔ ... ? 전자정부프레임워크 설정하기 진짜 지친다... 내가 몰라서 그런거겠지 잘해지면 편하겠찌... 하아 ,,, 

 

일단 프로젝트 내부 텍스트 중 egovframework가 들어가는 경로의 모든 텍스트를 바꿨다.

그랬더니 이번엔  No message found under code 'error.properties.initialize.reason' for locale 'ko_KR'.가 뜬다.

어쨌든 저 메시지를 못 찾고 있는건 맞는데... 대체 어디가 문제인지 찾을수가 없는 상황에 봉착.

error.properties.initialize.reason가 없다

아 ... 원인을 찾았다. 내가 바보같이 무지성으로 경로바꾼다고 죄다 바꿔놔서 그런 거였다.

1
2
3
4
5
6
7
8
9
10
11
12
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>classpath:/여기만바꿨어야했음/message/message-common</value>
                <value>classpath:/egovframework/rte/fdl/idgnr/messages/idgnr</value>
                <value>classpath:/egovframework/rte/fdl/property/messages/properties</value>
            </list>
        </property>
        <property name="cacheSeconds">
            <value>60</value>
        </property>
    </bean>
cs

rte이하는 egovframework 안에 있어야 한다.

 

근데 이제 에러는 안 뜨는데, 페이지에 접근이 안 된다.

2022-09-16 14:41:51,298  WARN [org.springframework.web.servlet.PageNotFound] 

No mapping found for HTTP request with URI [/egovSampleList.do] in DispatcherServlet with name 'action'

 

컨트롤러에 어노테이션은 제대로 걸려있는 상태임.

웹모듈도 확인했는데 문제없고

dispatcher-servlet.xml을 가서 봤더니 base-package가 다르게 되어있었다 ^_^ ... 젠장...

길고 긴 여정이 끝났다... 행복하다...

댓글