You are on page 1of 2

Bea Enterprise Solution Technical News

? 클래스 로딩 시 java.lang.VerifyError

Technical Tip
제 품 WEBLOGIC 버전과 관련 없음

사용 OS 모든 플랫폼(platform)

작 성 일 2004/08/03

이슈사항 클래스 로딩 시 다음과 유사한 형태의 java.lang.VerifyError 예외가 발생하는 경우가 있다.

<2004. 6. 9. 오후 7시 15분 35초 KST> <Error> <HTTP> <BEA-101017> <[ServletContext(id=6285594,name=ezWeb,context-
path=/ezWeb)] Root cause of ServletException.
java.lang.VerifyError: (class: epPageflow/external/ssc/selfservice/faq/faqController, method: begin signature:
(LepPageflow/external/ssc/selfservice/faq/faqController$BeginForm;)Lcom/bea/wlw/netui/pageflow/Forward;) Accessing value
from uninitialized register 2
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:140)
at com.bea.wlw.netui.pageflow.PageFlowRequestProcessor.processActionCreate
(PageFlowRequestProcessor.java:105)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:268)
at com.bea.wlw.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:429)
at com.bea.wlw.netui.pageflow.DynamicSubappActionServlet.process
(DynamicSubappActionServlet.java:405)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:502)

이는 웹로직과는 관련이 없는 에러이며 개발자가 작성한 코드의 논리적인 에러를 javac로 컴파일 할 때는
해 결 안
감지하지 못하다가 JVM이 클래스를 로딩할 때 이를 엄격하게 체크하기 때문에 발생하는 것이다. 다음 예를
보자.

class Foo {
public static void main(String[] args) {
switch (args.length) {
case 1:
if (true)
return;
int i = 1;
case 2:
i = 2;
}
System.out.println(args);
}
}

보통 이러한 문제는 switch 문에서 종종 발생하는데, 위의 예를 보면 case 1에서 int i를 선언 하였고 case

www.bea .co.kr 87

parseInt(Util. 그런데 알다시피 switch 문에 포함된 case는 상황에 따라 다르게 실행이 된다. 해결 방법은 그러한 문제가 될만한 코드를 제거하면 된다.kr . 해 결 안 반드시 case 1을 거쳐 case 2가 실행되는 것이 아니기 때문에 case 2의 i는 어떻게 보면 선언 되지 않은 로 Technical Tip 컬 변수가 되는 셈이다.VerifyError: (class: Foo. ruleRoleCode+” ”)). 자세히 보면 어딘가 논리적인 모순이 있다.]V] Accessing value from uninitialized register 0 또는 이러한 엄격한 체크를 Disable 하는 방법도 있는데 다음과 같이 하면 된다. 즉.org/bugs/show_bug.eclipse. 에러 메시지가 대략 다음과 같은 형식인데 Foo 클 래스의 메소드 main을 로드하는 중에 0번 레지스터(JVM 가상 머신의 레지스터로 불행히도 Java 소스의 변 수와 연관성을 찾는 것은 쉽지 않음)가 초기화 되지 않았다는 의미이다. Exception in thread “main”java. method: main signature: ([Ljava/lang/String. int ruleRoleCode = Integer.cgi?id=26134 추가정보 https://bugs. int ruleRoleCode를 선언하는 구문의 마지막 부분에서 그것을 사용하고 있다. WEBLOGIC 2에서 그것을 사용한다. 결국은 클래스를 로딩하는 런타임 중에 문제 를 발견한 것이다. 엄격히 말하면 javac로 컴파일 할 때 이러한 문제점을 미리 발견했어야 하지만 그러지 못했고.nvl((String)this.cgi?id=26122 88 www.bea .getParameter(“ruleRoleCode” ).getRequest().lang. 아래의 코드는 어느 고객사에서 VerifyError를 유발했던 코드이다. https://bugs.eclipse.org/bugs/show_bug. 따라서 대략 main 메소드에서 이러한 문제점을 찾으면 된다. -Xverify:none 문제의 코드를 찾기 어렵고 별로 중요하지 않은 경우 사용할 수 있겠지만 아무래도 찜찜한 마음은 어쩔 수 없 을 것이다.co.