package egovframework.com.cmm; /* * Copyright 2002-2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.io.IOException; import java.io.Reader; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.support.lob.LobCreator; import org.springframework.jdbc.support.lob.LobHandler; import egovframework.rte.psl.orm.ibatis.support.AbstractLobTypeHandler; /** * iBATIS TypeHandler implementation for Strings that get mapped to CLOBs. * Retrieves the LobHandler to use from SqlMapClientFactoryBean at config time. * *

Particularly useful for storing Strings with more than 4000 characters in an * Oracle database (only possible via CLOBs), in combination with OracleLobHandler. * *

Can also be defined in generic iBATIS mappings, as DefaultLobCreator will * work with most JDBC-compliant database drivers. In this case, the field type * does not have to be BLOB: For databases like MySQL and MS SQL Server, any * large enough binary type will work. * * @author Juergen Hoeller * @since 1.1.5 * @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#setLobHandler * * * 수정일 수정자 수정내용 * ------- -------- --------------------------- * 2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] * * */ @SuppressWarnings("deprecation") public class AltibaseClobStringTypeHandler extends AbstractLobTypeHandler { private static final Logger LOGGER = LoggerFactory.getLogger(AltibaseClobStringTypeHandler.class); /** * Constructor used by iBATIS: fetches config-time LobHandler from * SqlMapClientFactoryBean. * @see org.springframework.orm.ibatis.SqlMapClientFactoryBean#getConfigTimeLobHandler */ public AltibaseClobStringTypeHandler() { super(); } /** * Constructor used for testing: takes an explicit LobHandler. */ protected AltibaseClobStringTypeHandler(LobHandler lobHandler) { super(lobHandler); } protected void setParameterInternal( PreparedStatement ps, int index, Object value, String jdbcType, LobCreator lobCreator) throws SQLException { lobCreator.setClobAsString(ps, index, (String) value); } protected Object getResultInternal(ResultSet rs, int index, LobHandler lobHandler) throws SQLException { StringBuffer read_data = new StringBuffer(""); int read_length; char [] buf = new char[1024]; Reader rd = lobHandler.getClobAsCharacterStream(rs, index); try { while( (read_length=rd.read(buf)) != -1) { read_data.append(buf, 0, read_length); } } catch (IOException ie) { SQLException sqle = new SQLException(ie.getMessage()); throw sqle; // 2011.10.10 보안점검 후속조치 } finally { if (rd != null) { try { rd.close(); //2017.03.03 조성원 시큐어코딩(ES)-부적절한 예외 처리[CWE-253, CWE-440, CWE-754] } catch (IOException ignore) { LOGGER.error("[IOException] : Connection Close"); } catch (Exception ignore) { LOGGER.error("["+ ignore.getClass() +"] Connection Close : " + ignore.getMessage()); } } } return read_data.toString(); //return lobHandler.getClobAsString(rs, index); } public Object valueOf(String s) { return s; } }