1시간 전 J2SE 6으로 올리면서 이것저것 주르륵 업데이트 하고 다 잘 돌아가는지 이것저것 눌러보았고 왠만큼 다 돌아가는 것처럼 보였다.
RenderingHints 문제는 지금도 전혀 납득할 수 없다. 구글 리서치는 잠시 미룬다. 아무튼 정상인줄 알고 헤벌레 하다가 /rss.xml을 눌러보니까 황당한 에러 발생!
<font style="font-size: 11px; font-family: 돋움">
javax.xml.transform.TransformerException: java.lang.UnsupportedOperationException
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:718)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at rath.web.service.RDFSiteSummary.service(RDFSiteSummary.java:196)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
at com.caucho.server.hmux.HmuxRequest.handleRequest(HmuxRequest.java:420)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:511)
at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)
at com.caucho.util.ThreadPool.run(ThreadPool.java:442)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.UnsupportedOperationException
at com.caucho.xml.QDocument.getXmlVersion(QDocument.java:848)
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.java:375)</font>
뭐야 뭔데 -_-? 대략난감이다. jdk 하나 바꿨을 뿐인데.. Transformer.transform 에서 에러가 나다니 이 무슨 날벼락 콤보란 말인가.
욱 하는 마음에 데스크탑 윈2003에서 같은 코드를 돌려보았더니 잘 돌아간다. jdk 6은 죄가 없다. 실제로 com.caucho.xml.QDocument.getXmlVersion의 1줄 구현을 아래처럼 해놓은 caucho가 죄!
throw new UnsupportedOperationException();
스택트레이스 내용을 보면 jdk 6에 포함된 xalan이 문득 caucho 쪽으로 튄다. jdk 5에서는 간단한 transform 수행 시 Document.getXmlVersion(DOM Level 3)가 없어도 괜찮았나 보다. 구글님의 도움으로 찾은 J2SE Tech 문서에 의하면 J2SE 1.4 는 DOM Level 2 를 지원하고 J2SE 6부터 DOM Level 3 를 지원한다고 한다.
DOM Level 3를 지원하는건 좋은데 지원하지 못하는 DOM Level 2의 구현물(caucho resin 3.0.x의 그것)들은 어떻게 살라고 그러는건지 모르겠다. 하위호환성을 좀 더 신경써줬으면 좋았을텐데.
아무튼 이것 때문에 RSS를 닫기도 그렇고 -- 이것 때문에 jdk를 다시 5로 내릴 수는 없잖아
속는 셈 치고 Resin 3.1.0 으로 바꿔봤다. resin 빌드 자주해서 아주 외우겠다 외우겠어 --
./configure --prefix=/home/rath/resin --with-apxs=/opt/apache/bin/apxs --enable-jni make; sudo make install rm -rf ~/html/WEB-INF/work <- 오타나면 작살 -_-; ~/resin/bin/httpd.sh start /opt/apache/bin/apachectl restart
결론은.. 빙고~! XML Transform 잘 돌아간다. :)
문제의 근원은 J2SE 6 은 DOM Level 3 구현물이고 Transformer가 Level 3 를 원하는데 provider가 DOM Level 2 였던 것이였다. 덕분에 Resin 3.1 을 깔아볼 수 있었다.
Resin 3.1 은 Servlet 2.5를 지원하고 watchdog이 들어갔다. 그리고 별 관심은 없지만 Quercus님이 PHP6 유니코드 지원을 한댄다. 이런 짓 하다보면 나도 J2EE에 관심이 조금씩 생겨서 좋다. ![]()
아무튼 이제!
[rath@ns lib]$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. GET / HTTP/1.0
HTTP/1.1 200 OK Date: Fri, 19 Jan 2007 19:42:29 GMT Server: Apache/1.3.37 (Unix) Resin/3.1.0 mod_jk/1.2.15
이렇게 댔다 ㅎㅎ
Comments
4 thoughts shared
UnsupportedOperationException? -0- 그런 Exception도 있었나;; 근데 좀 당황스럽네요. 인스턴스화까지 시킬 수 있는데 객체의 특정 메서드 콜을 하면 그냥 에러가 떨어진다는건 ...
java 너무 오래 안한건가? -0-
rath
abstract method 같은 개념은 아니구요 단순히 RuntimeException 상속받은 클래스에요. 만약 Resin 3.0.22 이전의 QDocument 클래스에 getXmlVersion() 가 없었다면 인스턴스화는 잘 되고 getXmlVersion을 호출하는 순간 AbstractMethodError가 발생하겠지만 3.0.22 이전의 구현은
public String getXmlVersion() { throw new UnsupportedOperationException(); }
요렇게 되있었다는 허무한 말이였어요 -ㅇ-;
xhoto
그쪽 바닥은 내바닥이 아니라 -- 패쓰 --/ ㅋㅋㅋ 이틀 수원에서 요양하고 오늘 저녁에 다시 구미로 ㅠ.ㅠ 담주 주말이나, 다담주 주중 쯤 해서 곱창 1미터 콜?
rath
엉 콜이야 ㅋㅋ 새 회사 출근날짜가 2월 5일로 잡혀서 그 전에는 아주 널럴함!
Continue Reading
Discover more thoughts and insights
My Chemical Romance - Piano Tribute
My Chemical Romance 좋아하시는 분 중에 piano tribute 못들어보신 분 있나요? 꼭 들어보세요. 좋습니다. My Chemical Romance Piano Tribute 더불어 The
연준이에게 술이란 것은
연준이에게 술은 생활이였다. 연준아 미안해.. :$ 내겐 상콤한 충격이였어 -\_- 올려야지 룰룰~ 아 이번주는 컨디션이
디파티드를 보다
무간도 리메이크(?)로 알려져있고 덜덜덜한 캐스팅인 영화 디파티드를 봤다. 오늘은 스트레스 프리한 회사업무가 가득가득 차 있어서 (말이 되는 소린가(7)) 간단히 포스트하고 싶었던 말만 적어본다. 극중