티스토리 뷰
Mybatis oracle proedure xmlType 처리
그리고 maven pom.xml에 다음과 같이 설정을 해주자.
<repositories>
<repository>
<id>local-repository</id>
<name>local repository</name>
<url>file://${project.basedir}/lib</url>
</repository>
</repositories>
<dependency>
<groupId>com.custom</groupId>
<artifactId>ojdbc7</artifactId>
<version>12.1.0.2</version>
</dependency>
<dependency>
<groupId>com.custom</groupId>
<artifactId>xdb6</artifactId>
<version>12.1.0.2</version>
</dependency>
<dependency>
<groupId>com.custom</groupId>
<artifactId>xmlparserv2</artifactId>
<version>12.1.0.2</version>
</dependency>
<dependency>
<groupId>com.custom</groupId>
<artifactId>orai18n</artifactId>
<version>12.1.0.2</version>
</dependency>
디펜던시를 추가해주고 mvn install를 해주자.
mvn install:install-file -Dfile=lib/com/custom/orai18n.jar -DgroupId=com.custom -DartifactId=orai18n -Dversion=12.1.0.2 -Dpackaging=jar
mvn install:install-file -Dfile=lib/com/custom/ojdbc7.jar -DgroupId=com.custom -DartifactId=ojdbc7 -Dversion=12.1.0.2 -Dpackaging=jar
mvn install:install-file -Dfile=lib/com/custom/xdb6.jar -DgroupId=com.custom -DartifactId=xdb6 -Dversion=12.1.0.2 -Dpackaging=jar
mvn install:install-file -Dfile=lib/com/custom/xmlparserv2-12.1.0.2.jar -DgroupId=com.custom -DartifactId=xmlparserv2 -Dversion=12.1.0.2 -Dpackaging=jar
이제 mapper.xml을 작성하자. procedure 작성은 아래와 같이 statementType를 CALLBLE로 하고 CALL 패기지 or 프로시저명을 입력 mode는 내가 보낼 파라미터이고
mode out은 return받을 결과값이다. 그리고 여기서 가장 중요한 oracle xmlType를 결과로 받기위해 jdbcType을 SQLXML로 해줬다. jdbcType는 mybatis문서에 보면 나와있다. 더 자세한건 따로 찾아보자.
<mapper namespace="me.seungwoo.mapper.CityCodeMapper">
<resultMap id="cityMap" type="java.util.HashMap"/>
<select id="selectCityCode" statementType="CALLABLE" parameterType="java.util.HashMap">
{ CALL PKG_TEST.XML_SELECT(
#{serviceName, mode=IN, jdbcType=VARCHAR},
#{inputString, mode=IN, jdbcType=NCLOB},
#{result, mode=OUT, jdbcType=SQLXML, javaType=String, resultMap=cityMap},
#{xmlString, mode=OUT, jdbcType=SQLXML, javaType=String, resultMap=cityMap})
}
</select>
</mapper>
이제 모든걸 설정했으니 실행해보자 그럼 로컬에서는 아주 잘 된다. 그럼 서버에 war로 배포를 해보자. 필자는 개인pc에 tomcat를 설치해서 거기에 배포를 했다.
그런데 에러가 난다.....여기서 엄청난 삽질을 했다.
https://stackoverflow.com/questions/43944803/java-lang-securityexception-org-xml-sax-saxnotrecognizedexception-feature-htt .....
여기서 tomcat 설정을 따로 해줘야한다. 아래와 같이 catalina.properties에 설정을 추가해주자. 그럼아주 잘된다.
TOMCAT_HOME/conf/catalina.properties:
javax.xml.parsers.DocumentBuilderFactory = com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
javax.xml.transform.TransformerFactory = com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
javax.xml.parsers.SAXParserFactory = com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
javax.xml.datatype.DatatypeFactory = com.sun.org.apache.xerces.internal.jaxp.datatype.DatatypeFactoryImpl
간단한 예제는 여기에 있다.
'기타' 카테고리의 다른 글
Spring REST Docs (1) | 2019.10.02 |
---|---|
Apache Kafka (0) | 2019.06.28 |
maven multi 모듈 (0) | 2019.01.26 |
Agile Practices - Scrum/Kanban (0) | 2018.04.23 |
TDD, BDD (0) | 2018.04.23 |