e-MarketPlace 템플릿의 파일처리 기능 사용시에 에러가 발생합니다.
현재 개발 환경은 다음과 같습니다.
JDK 1.5
JEUS 5.0
DB2
현재 기존에 있다. 3.0.1 버젼의 Struts 버젼의 e-MarketPlace 템플릿을 3.1 버젼으로 포팅하여
개발 템플릿을 만들고 있습니다.
현재 문제가 되고 있는 부분은 category Service 에서 사용되는 File 업로드 다운로드에서 문제가 발생합니다.
파일을 업로드시 영문파일은 업로드가 되지만 (정확히 된건지는 모르겠지만 db에 데이터가 들어갑니다) 한글일 경우는 다음과 같은
에러를 보여줍니다.
2008-10-20 21:26:54,193 DEBUG [jdbc.sqlonly] org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:795)
11. INSERT INTO CATEGORYFILE ( FILE_ID, REF_ID, FILE_NAME, FILE_SIZE, FILE_EXTENSION, FILE_CONTENTS,
FILE_PATH ) VALUES ( 'F000000017', '', '서로 다른 서비스들의 트랜잭션 처리방법.doc', 40960, 'doc', [B@1ae9ef9,
'' )
2008-10-20 21:26:54,240 DEBUG [jdbc.audit] 11. PreparedStatement.executeUpdate() returned 1 org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:795)
2008-10-20 21:26:54,240 DEBUG [jdbc.audit] 11. PreparedStatement.getWarnings() returned null org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589)
2008-10-20 21:26:54,240 DEBUG [jdbc.audit] 11. PreparedStatement.close() returned org.springframework.jdbc.support.JdbcUtils.closeStatement(JdbcUtils.java:87)
2008-10-20 21:26:54,240 DEBUG [jdbc.audit] 11. Connection.close() returned org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:313)
2008-10-20 21:26:54,412 DEBUG [defaultLogger]
Action Support Exception catch!!
java.io.CharConversionException: Not an ISO 8859-1 character: 서
at javax.servlet.ServletOutputStream.print(ServletOutputStream.java:133)
at javax.servlet.ServletOutputStream.println(ServletOutputStream.java:286)
at anyframe.templates.emp.web.general.category.action.CategoryFileAction.uploadByBlob(CategoryFileAction.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at anyframe.web.struts.common.action.AbstractDispatchAction.dispatchMethod(AbstractDispatchAction.java:146)
at anyframe.web.struts.common.action.DefaultDispatchActionSupport.process(DefaultDispatchActionSupport.java:127)
at anyframe.web.struts.common.action.AbstractDispatchAction.process(AbstractDispatchAction.java:76)
at anyframe.web.struts.common.action.DefaultActionSupport.execute(DefaultActionSupport.java:98)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:313)
at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:214)
at jeus.servlet.engine.HttpRequestProcessor.run(HttpRequestProcessor.java:284)
2008-10-20 21:26:54,427 INFO [org.apache.struts.util.PropertyMessageResources] Initializing, config='anyframe.templates.emp.TemplateResources', returnNull=true
2008-10-20 21:26:54,552 DEBUG [defaultLogger] anyframe.templates.emp.web.general.category.action.CategoryDispatchAction.process() Started!
2008-10-20 21:26:54,552 DEBUG [defaultLogger] anyframe.templates.emp.web.general.category.action.CategoryDispatchAction.createCategory Started!
2008-10-20 21:26:54,552 DEBUG [defaultLogger]
그다음에는 다음 HTML 부분이 출력됩니다. (에러메시지 생성하는 부분같습니다)
여기에 붙이려고 하니 내용입력이 안되네요 HTML 이라서 그런거 같습니다.
이후 다음과 같은 에러가 계속 출력됩니다.
at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:512)
at net.sf.json.JSONArray._fromJSONTokener(JSONArray.java:973)
at net.sf.json.JSONArray._fromString(JSONArray.java:1053)
at net.sf.json.JSONArray.fromObject(JSONArray.java:144)
at net.sf.json.JSONArray.fromObject(JSONArray.java:122)
at anyframe.templates.emp.web.general.category.action.file.CategoryFileServiceHelper.processFileInfos(CategoryFileServiceHelper.java:24)
at anyframe.templates.emp.web.general.category.action.CategoryDispatchAction.createCategory(CategoryDispatchAction.java:180)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at anyframe.web.struts.common.action.AbstractDispatchAction.dispatchMethod(AbstractDispatchAction.java:146)
at anyframe.web.struts.common.action.DefaultDispatchActionSupport.process(DefaultDispatchActionSupport.java:127)
at anyframe.web.struts.common.action.AbstractDispatchAction.process(AbstractDispatchAction.java:76)
at anyframe.web.struts.common.action.DefaultActionSupport.execute(DefaultActionSupport.java:98)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:313)
at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:214)
at jeus.servlet.engine.HttpRequestProcessor.run(HttpRequestProcessor.java:284)
2008-10-20 21:26:54,599 INFO [org.apache.struts.util.PropertyMessageResources] Initializing, config='anyframe.templates.emp.TemplateResources', returnNull=true
2008-10-20 21:27:04,677 DEBUG [defaultLogger] anyframe.templates.emp.web.general.category.action.CategoryDispatchAction.process() Started!
2008-10-20 21:27:04,677 DEBUG [defaultLogger] anyframe.templates.emp.web.general.category.action.CategoryDispatchAction.selectCategoryList Started!
2008-10-20 21:27:04,677 DEBUG [defaultLogger]
파일명이 영문일 경우 위와 같은 에러는 발생하지 않는것 같습니다.
다음은 다운로드인 경우 발생되는 에러입니다. 이부분은 영문이어도 발생합니다.
******************************************************
2008-10-21 11:32:49,640 DEBUG [anyframe.core.query.impl.SQLPagingJdbcTemplate] Executing prepared SQL query
2008-10-21 11:32:49,640 DEBUG [anyframe.core.query.impl.SQLPagingJdbcTemplate] Executing prepared SQL statement
2008-10-21 11:32:49,640 DEBUG [jdbc.audit] 18. Connection.prepareStatement(SELECT
FILE_ID, REF_ID, FILE_NAME, FILE_SIZE, FILE_EXTENSION,
FILE_CONTENTS, FILE_PATH
FROM db2admin.CATEGORYFILE
WHERE FILE_ID=?, 1004, 1007) returned net.sf.log4jdbc.PreparedStatementSpy@1a014e1 anyframe.core.query.impl.SQLPagingJdbcTemplate$PagingPreparedStatementCreator.create
PreparedStatement(SQLPagingJdbcTemplate.java:118)
2008-10-21 11:32:49,640 DEBUG [jdbc.audit] 18. PreparedStatement.setString(1, "F000000018") returned org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUti
ls.java:314)
2008-10-21 11:32:49,640 DEBUG [jdbc.sqlonly] org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:645)
18. SELECT FILE_ID, REF_ID, FILE_NAME, FILE_SIZE, FILE_EXTENSION, FILE_CONTENTS, FILE_PATH FROM
db2admin.CATEGORYFILE WHERE FILE_ID='F000000018'
2008-10-21 11:32:49,687 ERROR [jdbc.audit] 18. PreparedStatement.executeQuery() SELECT FILE_ID, REF_ID, FILE_NAME, FILE_SIZE, FILE_EXTENSION, FILE_CONTENTS, FILE_PATH FROM
db2admin.CATEGORYFILE WHERE FILE_ID='F000000018'
com.ibm.db2.jcc.b.nm: DB2 SQL Error: SQLCODE=-270, SQLSTATE=42997, SQLERRMC=63, DRIVER=3.50.152
at com.ibm.db2.jcc.b.wc.a(wc.java:579)
at com.ibm.db2.jcc.b.wc.a(wc.java:57)
at com.ibm.db2.jcc.b.wc.a(wc.java:126)
at com.ibm.db2.jcc.b.tk.c(tk.java:1901)
at com.ibm.db2.jcc.b.tk.d(tk.java:1889)
at com.ibm.db2.jcc.b.tk.a(tk.java:1416)
at com.ibm.db2.jcc.t4.db.g(db.java:138)
at com.ibm.db2.jcc.t4.db.a(db.java:38)
at com.ibm.db2.jcc.t4.t.a(t.java:32)
at com.ibm.db2.jcc.t4.sb.h(sb.java:141)
at com.ibm.db2.jcc.b.tk.N(tk.java:1387)
at com.ibm.db2.jcc.b.uk.Kb(uk.java:2461)
at com.ibm.db2.jcc.b.uk.e(uk.java:3101)
at com.ibm.db2.jcc.b.uk.yb(uk.java:535)
at com.ibm.db2.jcc.b.uk.executeQuery(uk.java:509)
at net.sf.log4jdbc.PreparedStatementSpy.executeQuery(PreparedStatementSpy.java:612)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:645)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:588)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:638)
at anyframe.core.query.impl.SQLPagingJdbcTemplate.query(SQLPagingJdbcTemplate.java:86)
at anyframe.core.query.impl.PagingNamedParamJdbcTemplate.query(PagingNamedParamJdbcTemplate.java:61)
at anyframe.core.query.impl.ExtendedQueryServiceImpl.findInternal(ExtendedQueryServiceImpl.java:706)
at anyframe.core.query.impl.ExtendedQueryServiceImpl.find(ExtendedQueryServiceImpl.java:577)
at anyframe.core.query.AbstractDAO.findByPk(AbstractDAO.java:167)
at anyframe.core.query.AbstractDAO.findByPk(AbstractDAO.java:152)
at anyframe.templates.emp.general.categoryfile.service.impl.CategoryFileDAO.getFileInfo(CategoryFileDAO.java:37)
at anyframe.templates.emp.general.categoryfile.service.impl.CategoryFileServiceImpl.getFileInfo(CategoryFileServiceImpl.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:54)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy5.getFileInfo(Unknown Source)
at anyframe.templates.emp.web.general.category.action.CategoryFileAction.downloadByBlob(CategoryFileAction.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at anyframe.web.struts.common.action.AbstractDispatchAction.dispatchMethod(AbstractDispatchAction.java:146)
at anyframe.web.struts.common.action.DefaultDispatchActionSupport.process(DefaultDispatchActionSupport.java:127)
at anyframe.web.struts.common.action.AbstractDispatchAction.process(AbstractDispatchAction.java:76)
at anyframe.web.struts.common.action.DefaultActionSupport.execute(DefaultActionSupport.java:98)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:313)
at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:214)
at jeus.servlet.engine.HttpRequestProcessor.run(HttpRequestProcessor.java:284)
Root cause follows.
com.ibm.db2.jcc.b.SqlException: DB2 SQL Error: SQLCODE=-727, SQLSTATE=56098, SQLERRMC=2;-270;42997;63, DRIVER=3.50.152
at com.ibm.db2.jcc.b.wc.a(wc.java:55)
at com.ibm.db2.jcc.b.wc.a(wc.java:126)
at com.ibm.db2.jcc.b.tk.c(tk.java:1901)
at com.ibm.db2.jcc.b.tk.d(tk.java:1889)
at com.ibm.db2.jcc.b.uk.a(uk.java:2387)
at com.ibm.db2.jcc.t4.db.a(db.java:187)
at com.ibm.db2.jcc.t4.db.b(db.java:81)
at com.ibm.db2.jcc.t4.t.b(t.java:69)
at com.ibm.db2.jcc.t4.tb.c(tb.java:224)
at com.ibm.db2.jcc.b.uk.Hb(uk.java:2378)
at com.ibm.db2.jcc.b.uk.Kb(uk.java:2462)
at com.ibm.db2.jcc.b.uk.e(uk.java:3101)
at com.ibm.db2.jcc.b.uk.yb(uk.java:535)
at com.ibm.db2.jcc.b.uk.executeQuery(uk.java:509)
at net.sf.log4jdbc.PreparedStatementSpy.executeQuery(PreparedStatementSpy.java:612)
at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:645)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:588)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:638)
at anyframe.core.query.impl.SQLPagingJdbcTemplate.query(SQLPagingJdbcTemplate.java:86)
at anyframe.core.query.impl.PagingNamedParamJdbcTemplate.query(PagingNamedParamJdbcTemplate.java:61)
at anyframe.core.query.impl.ExtendedQueryServiceImpl.findInternal(ExtendedQueryServiceImpl.java:706)
at anyframe.core.query.impl.ExtendedQueryServiceImpl.find(ExtendedQueryServiceImpl.java:577)
at anyframe.core.query.AbstractDAO.findByPk(AbstractDAO.java:167)
at anyframe.core.query.AbstractDAO.findByPk(AbstractDAO.java:152)
at anyframe.templates.emp.general.categoryfile.service.impl.CategoryFileDAO.getFileInfo(CategoryFileDAO.java:37)
at anyframe.templates.emp.general.categoryfile.service.impl.CategoryFileServiceImpl.getFileInfo(CategoryFileServiceImpl.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:54)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy5.getFileInfo(Unknown Source)
at anyframe.templates.emp.web.general.category.action.CategoryFileAction.downloadByBlob(CategoryFileAction.java:113)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at anyframe.web.struts.common.action.AbstractDispatchAction.dispatchMethod(AbstractDispatchAction.java:146)
at anyframe.web.struts.common.action.DefaultDispatchActionSupport.process(DefaultDispatchActionSupport.java:127)
at anyframe.web.struts.common.action.AbstractDispatchAction.process(AbstractDispatchAction.java:76)
at anyframe.web.struts.common.action.DefaultActionSupport.execute(DefaultActionSupport.java:98)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:313)
at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:214)
at jeus.servlet.engine.HttpRequestProcessor.run(HttpRequestProcessor.java:284)
Root cause follows.
중복된 부분도 있습니다.. 확인 부탁드립니다.


최신 template 1.5 을 3.1.0 migration 하여 테스트 해보았습니다..
최신(20081021 다운받은 template-1.5) 템플릿 프로젝트를 말씀하신것 처럼 3.1.0 라이브러리에 맞게 포팅하여
테스트한 결과 한글 파일명에 대해 파일업로드 및 DB 저장/조회가 잘 됩니다.
Template 프로젝트의 원래 환경 그대로 euc-kr(eclipse workspace 인코딩 설정 MS949), Tomcat 5.5, Oracle(local, 10gR2, KO16KSC5601) 의 환경에서 테스트 하였습니다.
일반 데이터에 대한 한글은 문제가 없는지 확인하시고, 설치환경 및 인코딩 설정관련하여 틀린 곳이 없는지 다시 한번 확인 바랍니다.
참고로 utf-8을 사용하시는 경우 Anyframe 공통 Action을 상속하여 쓰실 때는 DefaultActionServlet 설정의 초기화 파라메터로 아래 내용이 추가되어야 합니다.
<init-param>
<!-- using this charset config. in the DefaultActionSupport preProcess. if null, forces to euc-kr by default -->
<param-name>character-encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
migration한 템플릿 프로젝트 및 한글 저장 캡쳐 화면을 첨부합니다.