블로그 이미지
신세계 SSG.COM / IT개발 1팀 / 상품개발담당 / 김지영 FreeEnd

카테고리

전체 (81)
끄적끄적 (13)
News (1)
Movie (11)
Security (1)
Design Patterns (2)
Operating System (4)
Database (8)
Framework (4)
Solution (7)
Language (1)
Web (4)
Lib (3)
TEST_Tools (4)
ETC... (7)
Software Factory (0)
Total193,486
Today40
Yesterday41


달력

« » 2017.08
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

공지사항

글 보관함


환경

WAS : tomcat 7.0
환경 : JDK 1.6, SPRING 3.0


문제발생!!
 
 아. 아직도 오장 육부가 뒤집힌다. 얼마전부터 서프라이즈 하게 혼자 뭣좀 해보려구 개발 환경 하나 잡고 있다. 벌써 오래전부터 준비해온 일이지만, 매번 이 시동거는게 힘들어 매번 빈둥거리다가 드디어 몸좀 움직였다.

 이클립스 다운받구, JDK받아 환경 잡구, 프로젝트 만들어 spring 3.0 라이브러리 넣고.. 작업준비를 끝내고.. web.xml 설정에 들어갔다. 뭐 내가 익숙한하게 ContextConfig환경 잡고.. 컨트롤러는 멀티액션 컨트롤러로....
자자. 환경 설정도 끝났다. 그리고 테스트 Controller 만들어서 호출하는 순간!!! 에러발생. 분명 파라메터로 method 잘 날려줬구.. 설정도 이상이 없었는데... 문제는 하나도 없었다. 설정문제는 아닌듯한데.. 일단 에러는 다음과 같다.
 

2011. 11. 10 오후 4:15:17 org.springframework.web.servlet.mvc.multiaction.MultiActionController handleNoSuchRequestHandlingMethod
경고: No request handling method with name 'form' in class [com.freeend.web.test.TestController]


  어라. 다시보니 에러도 아니고 경고.. 우라질. 메소드를 못찾는데 경고냐. 에러지. 썅.
여튼 문제 계속 찾아봤다.
 


원인탐색

 우선 에러 메시지는 이런 의미이다. MultiActionController가 파라메터로 받은 method 값을 이용해 해당 요청이 원하는 Controller의 메소드를 찾았지만 해당 메소드를 찾을수 없다는 에러이다. 

난 완벽하지만 혹시나.  자. 설정을 다시 확인했다.

 
web.xml 

<context-param>     
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring-servlet.xml</param-value>
</context-param>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>


spring-servlet.xml

<bean id="methodNameResolver"
        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
    <property name="paramName">
        <value>method</value>
    </property>
    <property name="defaultMethodName">
        <value>form</value>
    </property>
</bean>

<bean id="actionBean" abstract="true">
    <property name="methodNameResolver" ref="methodNameResolver" />
</bean>

<bean name="/test/test1.do" parent="actionBean"  class="com.freeend.web.test.TestController">  
</bean>


 역시나 아무리 생각해봐도 문제는 없다. 역시 난 빈틈 없음. 틀리지 않아.
 그럼 뭐가 문제인가!!
 역시 구글신께 물어봤다. 네이버 버려. 구굴이 甲이여.

 역시. 조선人 보단 양키가 낫다. ㅋㅋ 

Nick's Blog (http://tcob.com/c/tech)

That’s a terrible blog post title, I know. Nevertheless, I just burned 90 minutes trying to figure out why a simple Spring MultiActionController setup left me with an error: “No request handling method with name ‘list’ in class.” Google was little help, so I resorted to Bing.

Eventually, I found a buried forum response with my exact problem, I had referenced the wrong package’s type! If you’re running in to this, make sure you do this:

import org.springframework.web.servlet.ModelAndView;

and not this:

import org.springframework.web.portlet.ModelAndView;

This will teach me to be more mindful of what Eclipse decides to add for me automatically


란다. 오호홋 감사.

 문제는 ModelAndView의 import가 잘못되어 Resolver가 파라메터로 받은 값과 똑같은 메소드를 찾지 못한거다. 왜냐!! 리턴값이 다르기 때문이지.

 
해결

이런. 어쨌든. 이 문제의 잘못은 이클립스의 자동완성기능에 있었다. 누구나 코딩을 할때.. 아래와 같이 할껄.


저러고 걍 엔터 누르겠지.
 마지막에 port... 뭐시기인지 그 밑에 serv... 뭐시기인지 확인도 않하고 걍 엔터 눌렀겠지...
이게 문제였다. 이 바부. 이런 바보가 양키도 있다. ㅋㅋㅋ 조선人만의 문제가 아니라 글로벌적인 문제였던 것이다.

어쨌든 이클립스가 지멋대로 

import org.springframework.web.portlet.ModelAndView;

이렇게 추천해줘서 내가 선택한 import를 

import org.springframework.web.servtle.ModelAndView;
이렇게 수정해서 해결하였다.

 아. 고마워 양키. 너의 올해 3월의 실수가 날 도왔어. ^___________^. 이상 지영옹.
저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 지영옹 FreeEnd
TAG spring
환경
WAS : Resin 3.1, Resin 4.0
개발언어 : Java, JSP
JDK : 1.6



문제발생!!

 새로운 시스템을 개발중이다. Spring으로 개발중인데 아직 개발환경 세팅이 모두 명확히 정해지지 않았다. WAS는 Resin 3.1으로 정해졌는데, 이게 해당 개발사에서 Eclipse 플러그인 지원을 중단하였다. 해서 다른 배포사에 있는 플러그인으로 작업중인데.. 외부 어플리케이션으로 등록해 사용하기때문에 디버그가 잘 되지 않는다. 그래서 환경이 크게 차이 없는 Resin 4.1 환경을 따로 구성해서 4.1에서 개발, 디버그 작업을 하고 3.1에서 개발 된 내용을 테스트 하는 방법으로 개발을 하고 있다.

 허나!! 3.1에서 확인후 4.1로 돌아오면 가끔 에러가 나질 않는가!!! 이런 얼어죽을 형과 아우를 번갈아가며 농락하는 어처구니없는 환경에서 에러는 예상했지만 도통 원인을 찾을수 없었다. 에러는 다음과 같다.


 [11-10-31 17:11:38.692] {http://*:80-1} java.lang.NoSuchMethodError:com.caucho.make.ClassDependency.<init>(Ljava/lang/Class;J)V
     at _jsp._include._home_0layout__jsp.init(_home_0layout__jsp.java:165)
     at com.caucho.jsp.JspManager.preload(JspManager.java:354)
     at com.caucho.jsp.JspManager.compile(JspManager.java:234)
     at com.caucho.jsp.JspManager.createPage(JspManager.java:187)
     at com.caucho.jsp.JspManager.createPage(JspManager.java:168)
     at com.caucho.jsp.PageManager.getPage(PageManager.java:339)
     at com.caucho.jsp.PageManager.getPage(PageManager.java:269)
     at com.caucho.jsp.PageManager.getPage(PageManager.java:252)
     at com.caucho.jsp.QServlet.getSubPage(QServlet.java:294)
... 중략...



  원인탐색

 왜 자기 빌더에서 자기 라이브러리를 참조하지 못할까. 한참을 WAS 설정에서 클래스 패스가 빠진곳이 있나만 확인해보다가... 에잇. 천재 키다리 아저씨 구글한테 물어보기로 했다.

 역시나 양키놈들 대단하다. 그이름도 아름다운 알렉스라는 양키놈이 대답해주길..

ALEX
This particular error caused by classes compiled against older version of resin. Can you remove the WEB-INF/work directory? Resin puts all generated .java code there by default unless it's redefined in <work-dir> or @work-dir under the web-app tag.

http://forum.caucho.com/showthread.php?t=25555


라신단다. 

문제는 이거다. JSP 파일을 java로 변환할때 RESIN 3.1이하셧고 이걸 빌드는 4.1이 할라해서 3.1 라이브러리를 참조하는 부분을 4.1컴파일러가 빌드를 못해 일어나는 문제였던 거이였다. 


  해결

 오나전 감사한 ALEX에게 감사의 박수만 보내면서 우리 ALEX가 가르쳐준대로 /WEB-INF/work 디렉토리를 걍 지워버렸다.
 아. 깔끔해. 헌데 문제가 하나 더생겼네. 이거 4.1이 컴파일한 놈을 3.1이 또 못읽을꺼 아녀!! 
 요건 다음에 해결하자. ^^; 지영옹.




 


저작자 표시 비영리 동일 조건 변경 허락
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 지영옹 FreeEnd
TAG resin

 

문제발생!!
팀장님의 어택으로 Spring 1.x에서 Spring 2.x로 업데이트!!
1버젼대와 다른 xml 스키마를 2버젼대로 수정!!
그러던중.. 개발 서버에서 문제가 없었던... 스테이징 테스트에도 없던 문제가 운영 에서 발생!!

 


org.xml.sax.SAXParseException: Document root element "beans", must match DOCTYPE root "null".

 

원인 탐색
어허.. Document 루트 요소중에 Beans가 DOCTYPE에 뭐 맞아야 한다고…?
바뀌어야 할껀..XML이랑 라이브러리… 라이브러리도 넣었고… XML도 수정해서 개발서버서 이상 없었는데…..
스키마랑 라이브러리가 바뀌고.. 그렇다면!!!!!


해결
클래스 패스서 사라지지 않은 1버전 대 spring.jar를 발견!! 삭제 후 정상 동작!!


참고
인터넷 찾아보니 다른 방법도 있드라!

1. 컨테이너에서 라이브러리 참조값을 WEB-LIB로 설정!


<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>


 2. 무조건 해당 패키지 탐색으로 설정!!

 
<prefer-application-packages>
<package-name>org.springframework.*</package-name>
</prefer-application-packages>


이상. 지영옹.
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 지영옹 FreeEnd
TAG spring, XML

티스토리 툴바