최초 커밋
commit
700819073b
@ -0,0 +1,147 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>cokr.xit.interfaces</groupId>
|
||||
<artifactId>xit-public-info</artifactId>
|
||||
<version>23.04.01-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>xit-public-info</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
|
||||
<java.version>17</java.version>
|
||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||
<maven.compiler.target>${java.version}</maven.compiler.target>
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>mvn2s</id>
|
||||
<url>https://repo1.maven.org/maven2/</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>egovframe</id>
|
||||
<url>https://maven.egovframe.go.kr/maven/</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>maven-public</id>
|
||||
<url>https://nas.xit.co.kr:8888/repository/maven-public/</url>
|
||||
</repository>
|
||||
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>cokr.xit.interfaces</groupId>
|
||||
<artifactId>xit-gpki</artifactId>
|
||||
<version>23.04.01-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.mariadb.jdbc</groupId>
|
||||
<artifactId>mariadb-java-client</artifactId>
|
||||
<version>2.7.2</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<defaultGoal>install</defaultGoal>
|
||||
<directory>${basedir}/target</directory>
|
||||
<finalName>${artifactId}-${version}</finalName>
|
||||
|
||||
<resources>
|
||||
<resource><directory>${basedir}/src/main/resources</directory></resource>
|
||||
</resources>
|
||||
<testResources>
|
||||
<testResource><directory>${basedir}/src/test/resources</directory></testResource>
|
||||
<testResource><directory>${basedir}/src/main/resources</directory></testResource>
|
||||
</testResources>
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>**/*.class</include>
|
||||
</includes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!-- EMMA -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>3.0.0</version>
|
||||
<configuration>
|
||||
<skipTests>true</skipTests>
|
||||
<reportFormat>xml</reportFormat>
|
||||
<excludes>
|
||||
<exclude>**/Abstract*.java</exclude>
|
||||
<exclude>**/*Suite.java</exclude>
|
||||
</excludes>
|
||||
<includes>
|
||||
<include>**/*Test.java</include>
|
||||
</includes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>emma-maven-plugin</artifactId>
|
||||
<inherited>true</inherited>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>2.2</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- Javadoc -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>2.9.1</version>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<!-- Nexus deploy -->
|
||||
<distributionManagement>
|
||||
<snapshotRepository>
|
||||
<id>maven-snapshot</id>
|
||||
<url>https://nas.xit.co.kr:8888/repository/maven-snapshots/</url>
|
||||
</snapshotRepository>
|
||||
|
||||
<repository>
|
||||
<id>maven-release</id>
|
||||
<url>https://nas.xit.co.kr:8888/repository/maven-releases/</url>
|
||||
</repository>
|
||||
</distributionManagement>
|
||||
<!-- Nexus deploy -->
|
||||
</project>
|
@ -0,0 +1,139 @@
|
||||
package cokr.xit.interfaces.publicinfo;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
|
||||
import cokr.xit.foundation.Assert;
|
||||
import cokr.xit.foundation.data.JSON;
|
||||
|
||||
public class Configuration {
|
||||
private static final LinkedHashMap<String, Configuration> confs;
|
||||
|
||||
static {
|
||||
try {
|
||||
ClassPathResource res = new ClassPathResource("intf-conf/public-info.conf");
|
||||
confs = new JSON().parse(res.getInputStream(), new TypeReference<LinkedHashMap<String, Configuration>>() {});
|
||||
confs.forEach((k, v) -> v.name = k);
|
||||
} catch (Exception e) {
|
||||
throw Assert.runtimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static final Map<String, Configuration> get() {
|
||||
return confs;
|
||||
}
|
||||
|
||||
public static final Configuration get(String name) {
|
||||
return Assert.notEmpty(confs.get(name), name);
|
||||
}
|
||||
|
||||
private String
|
||||
name,
|
||||
/** 행정정보 공동이용 서비스가 발급한 api key */
|
||||
apiKey,
|
||||
/** 서비스 api url */
|
||||
apiUrl,
|
||||
|
||||
/** 이용기관 gpki server id */
|
||||
userServerId,
|
||||
/** 보유기관 gpki server id */
|
||||
providerServerId;
|
||||
|
||||
private boolean
|
||||
/** 데이터 암복호화 사용 여부 */
|
||||
gpki,
|
||||
/** 보유기관 가상 데이터 사용 여부 */
|
||||
mock;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
/**행정정보 공동이용 서비스가 발급한 api key를 반환한다.
|
||||
* @return 행정정보 공동이용 서비스가 발급한 apiKey
|
||||
*/
|
||||
public String getApiKey() {
|
||||
return apiKey;
|
||||
}
|
||||
|
||||
/**행정정보 공동이용 서비스가 발급한 api key를 설정한다.
|
||||
* @param apiKey 행정정보 공동이용 서비스가 발급한 apiKey
|
||||
*/
|
||||
public void setApiKey(String apiKey) {
|
||||
this.apiKey = apiKey;
|
||||
}
|
||||
|
||||
/**서비스 api url을 반환한다.
|
||||
* @return 서비스 api url
|
||||
*/
|
||||
public String getApiUrl() {
|
||||
return apiUrl;
|
||||
}
|
||||
|
||||
/**서비스 api url을 설정한다.
|
||||
* @param apiUrl 서비스 api url
|
||||
*/
|
||||
public void setApiUrl(String apiUrl) {
|
||||
this.apiUrl = apiUrl;
|
||||
}
|
||||
|
||||
/**이용기관 gpki server id를 반환한다.
|
||||
* @return 이용기관 gpki server id
|
||||
*/
|
||||
public String getUserServerId() {
|
||||
return userServerId;
|
||||
}
|
||||
|
||||
/**이용기관 gpki server id를 설정한다.
|
||||
* @param userServerId 이용기관 gpki server id
|
||||
*/
|
||||
public void setUserServerId(String userServerId) {
|
||||
this.userServerId = userServerId;
|
||||
}
|
||||
|
||||
/**보유기관 gpki server id를 반환한다.
|
||||
* @return 보유기관 gpki server id
|
||||
*/
|
||||
public String getProviderServerId() {
|
||||
return providerServerId;
|
||||
}
|
||||
|
||||
/**보유기관 gpki server id를 설정한다.
|
||||
* @param providerServerId 보유기관 gpki server id
|
||||
*/
|
||||
public void setProviderServerId(String providerServerId) {
|
||||
this.providerServerId = providerServerId;
|
||||
}
|
||||
|
||||
/**데이터 암복호화 사용 여부를 반환한다.
|
||||
* @return 데이터 암복호화 사용 여부
|
||||
*/
|
||||
public boolean isGpki() {
|
||||
return gpki;
|
||||
}
|
||||
|
||||
/**데이터 암복호화 사용 여부를 설정한다.
|
||||
* @param gpki 데이터 암복호화 사용 여부
|
||||
*/
|
||||
public void setGpki(boolean gpki) {
|
||||
this.gpki = gpki;
|
||||
}
|
||||
|
||||
/**보유기관 가상 데이터 사용 여부를 반환한다.
|
||||
* @return 보유기관 가상 데이터 사용 여부
|
||||
*/
|
||||
public boolean isMock() {
|
||||
return mock;
|
||||
}
|
||||
|
||||
/**보유기관 가상 데이터 사용 여부를 설정한다.
|
||||
* @param mock 보유기관 가상 데이터 사용 여부
|
||||
*/
|
||||
public void setMock(boolean mock) {
|
||||
this.mock = mock;
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
package cokr.xit.interfaces.publicinfo;
|
||||
|
||||
import java.net.http.HttpResponse;
|
||||
|
||||
import cokr.xit.foundation.AbstractComponent;
|
||||
import cokr.xit.foundation.data.JSON;
|
||||
import cokr.xit.foundation.web.WebClient;
|
||||
import cokr.xit.interfaces.gpki.GPKI;
|
||||
|
||||
public class ServiceClient extends AbstractComponent {
|
||||
private JSON json;
|
||||
private Configuration conf;
|
||||
private GPKI gpki;
|
||||
|
||||
public ServiceClient setConf(String confName) {
|
||||
conf = Configuration.get(notEmpty(confName, "confName"));
|
||||
gpki = conf.isGpki() ? new GPKI() : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ServiceClient setJSON(JSON json) {
|
||||
this.json = json;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ServiceMessage.Response request(Object... objs) {
|
||||
if (isEmpty(objs)) return null;
|
||||
|
||||
ServiceMessage.Response resp = new ServiceMessage.Response();
|
||||
try {
|
||||
HttpResponse<String> hresp = new WebClient().post(req ->
|
||||
req.uri(conf.getApiUrl())
|
||||
.json(json)
|
||||
.header(ServiceMessage.Support.header(conf.getName()))
|
||||
.bodyData(reqBody(objs))
|
||||
);
|
||||
|
||||
int statusCode = hresp.statusCode();
|
||||
String body = hresp.body();
|
||||
|
||||
log().debug("statusCode: {}", statusCode);
|
||||
log().debug("body:\n{}", body);
|
||||
|
||||
return resp
|
||||
.setStatus(statusCode)
|
||||
.setHeaders(hresp.headers().map())
|
||||
.setBody(200 == statusCode ? respBody(body) : body);
|
||||
} catch (Exception e) {
|
||||
return resp.setError(rootCause(e));
|
||||
}
|
||||
}
|
||||
|
||||
private String reqBody(Object... objs) {
|
||||
ServiceMessage msg = new ServiceMessage().addData(objs);
|
||||
String str = json.stringify(msg);
|
||||
if (gpki != null)
|
||||
log().debug("request body:\n{}", json.stringify(msg, true));
|
||||
return gpki == null ? str : gpki.encrypt(conf.getProviderServerId(), str);
|
||||
}
|
||||
|
||||
private String respBody(String str) {
|
||||
if (gpki == null)
|
||||
return str;
|
||||
|
||||
String body = gpki.decrypt(str);
|
||||
log().debug("decrypted:\n{}", body);
|
||||
return body;
|
||||
}
|
||||
}
|
@ -0,0 +1,187 @@
|
||||
package cokr.xit.interfaces.publicinfo;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
|
||||
import cokr.xit.foundation.Assert;
|
||||
|
||||
/**서비스 메시지
|
||||
* @author mjkhan
|
||||
*/
|
||||
public class ServiceMessage {
|
||||
private List<Object> data;
|
||||
|
||||
/**data를 반환한다.
|
||||
* @return data
|
||||
*/
|
||||
public List<Object> getData() {
|
||||
return Assert.ifEmpty(data, () -> data = new ArrayList<>());
|
||||
}
|
||||
|
||||
/**data를 설정한다.
|
||||
* @param data data
|
||||
*/
|
||||
public void setData(List<Object> data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
/**사용자 객체를 데이터에 추가한다.
|
||||
* @param objs 사용자 객체
|
||||
* @return 현재 ServiceMessage
|
||||
*/
|
||||
public ServiceMessage addData(Object... objs) {
|
||||
if (!Assert.isEmpty(objs))
|
||||
getData().addAll(List.of(objs));
|
||||
return this;
|
||||
}
|
||||
|
||||
/**서비스 응답 메시지
|
||||
* @author mjkhan
|
||||
*/
|
||||
public static class Response {
|
||||
/** 응답코드 */
|
||||
private int status;
|
||||
/** 응답헤더 */
|
||||
private Map<String, List<String>> headers;
|
||||
/** 응답본문 */
|
||||
private String body;
|
||||
/** 에러 */
|
||||
private Throwable error;
|
||||
|
||||
/**응답코드를 반환한다.
|
||||
* @return 응답코드
|
||||
*/
|
||||
public int getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
/**응답코드를 설정한다.
|
||||
* @param status 응답코드
|
||||
* @return 현재 Response
|
||||
*/
|
||||
public Response setStatus(int status) {
|
||||
this.status = status;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**응답헤더를 반환한다.
|
||||
* @return 응답헤더
|
||||
*/
|
||||
public Map<String, List<String>> getHeaders() {
|
||||
return headers;
|
||||
}
|
||||
|
||||
public List<String> getHeader(String name) {
|
||||
List<String> values = headers != null ? headers.get(name) : null;
|
||||
return values != null ? values : Collections.emptyList();
|
||||
}
|
||||
|
||||
public String header(String name) {
|
||||
List<String> values = getHeader(name);
|
||||
return values.isEmpty() ? values.get(0) : "";
|
||||
}
|
||||
|
||||
/**응답헤더를 설정한다.
|
||||
* @param headers 응답헤더
|
||||
* @return 현재 Response
|
||||
*/
|
||||
public Response setHeaders(Map<String, List<String>> headers) {
|
||||
this.headers = headers;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**응답본문을 반환한다.
|
||||
* @return 응답본문
|
||||
*/
|
||||
public String getBody() {
|
||||
return body;
|
||||
}
|
||||
|
||||
/**응답본문을 설정한다.
|
||||
* @param body 응답본문
|
||||
* @return 현재 Response
|
||||
*/
|
||||
public Response setBody(String body) {
|
||||
this.body = body;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean success() {
|
||||
return error == null && status == 200;
|
||||
}
|
||||
|
||||
/**오류를 반환한다.
|
||||
* @return 오류
|
||||
*/
|
||||
public Throwable getError() {
|
||||
return error;
|
||||
}
|
||||
|
||||
/**오류를 설정한다.
|
||||
* @param error 오류
|
||||
* @return 현재 Response
|
||||
*/
|
||||
public Response setError(Throwable error) {
|
||||
this.error = error;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Support {
|
||||
private static final SimpleDateFormat dataFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS",Locale.KOREA);
|
||||
|
||||
public static final Map<String, String> header(String confName) {
|
||||
Configuration conf = Configuration.get(confName);
|
||||
try {
|
||||
return Map.of(
|
||||
"api_key", conf.getApiKey(),
|
||||
"gpki_yn", conf.isGpki() ? "Y" : "N",
|
||||
"mock_yn", conf.isMock() ? "Y" : "N",
|
||||
"cert_server_id", conf.getUserServerId(),
|
||||
"tx_id", txId(),
|
||||
"SOAPAction", "",
|
||||
// "Host", InetAddress.getLocalHost().toString(),
|
||||
"User-Agent", "java-net-httpclient"
|
||||
);
|
||||
} catch (Exception e) {
|
||||
throw Assert.runtimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static String txId() {
|
||||
return dataFormat.format(new Date()) + key(8);
|
||||
}
|
||||
|
||||
private static String key(int length) {
|
||||
char[] chars = new char[length];
|
||||
Random r = new Random(System.currentTimeMillis());
|
||||
|
||||
for (int i = 0; i < length; i++) {
|
||||
switch (r.nextInt(3)) {
|
||||
case 0: chars[i] = (char)(r.nextInt(26) + 65); break;
|
||||
case 1: chars[i] = (char)(r.nextInt(10) + 48); break;
|
||||
case 2: chars[i] = (char)(r.nextInt(26) + 97); break;
|
||||
default: chars[i] = (char)r.nextInt(256);
|
||||
}
|
||||
}
|
||||
return String.valueOf(chars);
|
||||
}
|
||||
|
||||
public static String peel(String str) {
|
||||
String prefix = "\"data\": [";
|
||||
int pos = str.indexOf(prefix);
|
||||
if (pos < 0) {
|
||||
prefix = "\"data\":[";
|
||||
pos = str.indexOf(prefix);
|
||||
}
|
||||
String result = str.substring(pos + prefix.length());
|
||||
return result.substring(0, result.lastIndexOf("]")).trim();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
{
|
||||
"license": "C:\\GPKI\\Lic", /* 이용기관 GPKI API 라이센스 디렉토리 */
|
||||
|
||||
"charset": "UTF-8", /* 문자셋 */
|
||||
|
||||
"server": {
|
||||
"local": "SVR1311000030", /* 이용기관 서버 CN */
|
||||
"targets": "SVR1500000015" /* 대상기관 서버인증서 아이디, 여러 개일 경우 컴마(,)로 구분 */
|
||||
},
|
||||
|
||||
"ldapUrl": "ldap://10.1.7.118:389/cn=", /* 대상기관 인증서 다운로드를 위한 행정망 LDAP URL */
|
||||
/*"ldapUrl": "ldap://152.99.57.127:389/cn=", 대상기관 인증서 다운로드를 위한 인터넷망 LDAP URL */
|
||||
"certDir": "C:\\GPKI\\Certificate\\class1", /* 서버 인증서, 키 저장 디렉토리 */
|
||||
|
||||
"env": { /* 이용기관 서버 인증서 */
|
||||
"certFile": "SVR1311000030_env.cer",
|
||||
"privateKeyFile": "SVR1311000030_env.key",
|
||||
"privateKeyPassword": "기후대기3395!"
|
||||
},
|
||||
"sig": { /* 이용기관 서버 전자서명 */
|
||||
"certFile": "SVR1311000030_sig.cer",
|
||||
"privateKeyFile": "SVR1311000030_sig.key",
|
||||
"privateKeyPassword": "기후대기3395!"
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
{
|
||||
"basic-info-ext": { /* 자동차 기본정보(연료 제원 포함) 조회 */
|
||||
"apiKey": "59f26bf09ed196bfbd98210388c4c6ea9dd0f77bde3f35526f082647a305325b", /* 행정정보 공동이용 서비스가 발급한 api key */
|
||||
/*"apiUrl": "http://10.188.225.25:29001/piss/api/molit/SignguCarBassMatterInqireService", /* 행정정보 운영 url */
|
||||
"apiUrl": "http://10.188.225.94:29001/piss/api/molit/SignguCarBassMatterInqireService", /* 행정정보 개발 url */
|
||||
"userServerId": "SVR1311000030", /* 이용기관 gpki server id */
|
||||
"providerServerId": "SVR1500000015", /* 보유기관 gpki server id */
|
||||
|
||||
"gpki": true, /* 데이터 암복호화 사용 여부 */
|
||||
"mock": false /* 보유기관 가상 데이터 사용 여부 */
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:context="http://www.springframework.org/schema/context"
|
||||
xmlns:beans="http://www.springframework.org/schema/beans"
|
||||
xmlns:util="http://www.springframework.org/schema/util"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
|
||||
|
||||
<context:component-scan base-package="cokr.xit">
|
||||
<context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>
|
||||
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
|
||||
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
|
||||
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
|
||||
</context:component-scan>
|
||||
|
||||
<bean id="antPathMatcher" class="org.springframework.util.AntPathMatcher" />
|
||||
|
||||
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
|
||||
<property name="basenames">
|
||||
<list>
|
||||
<value>classpath:message/message-common</value>
|
||||
<value>classpath:message/authentication-message</value>
|
||||
<value>classpath:org/egovframe/rte/fdl/property/messages/properties</value>
|
||||
</list>
|
||||
</property>
|
||||
<property name="defaultEncoding" value="UTF-8"/>
|
||||
<property name="cacheSeconds">
|
||||
<value>60</value>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper">
|
||||
<property name="dateFormat" ref="dateFormat"/>
|
||||
</bean>
|
||||
<bean id="dateFormat" class="java.text.SimpleDateFormat">
|
||||
<constructor-arg index="0" value="yyyy-MM-dd HH:mm"/>
|
||||
</bean>
|
||||
|
||||
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
|
||||
<property name="defaultLocale" value="ko_KR"/>
|
||||
</bean>
|
||||
|
||||
<bean name="propertyService" class="org.egovframe.rte.fdl.property.impl.EgovPropertyServiceImpl" destroy-method="destroy">
|
||||
<property name="properties">
|
||||
<map>
|
||||
<entry key="tempDir" value="D:/workspace/temp"/>
|
||||
|
||||
<entry key="pageUnit" value="10"/>
|
||||
<entry key="pageSize" value="10"/>
|
||||
</map>
|
||||
</property>
|
||||
|
||||
<property name="extFileName">
|
||||
<set>
|
||||
<map>
|
||||
<entry key="encoding" value="UTF-8"/>
|
||||
<entry key="filename" value="classpath*:properties/disabled-parking.properties"/>
|
||||
</map>
|
||||
</set>
|
||||
</property>
|
||||
|
||||
</bean>
|
||||
|
||||
<bean id="leaveaTrace" class="org.egovframe.rte.fdl.cmmn.trace.LeaveaTrace" />
|
||||
|
||||
</beans>
|
@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:p="http://www.springframework.org/schema/p"
|
||||
xmlns:aop="http://www.springframework.org/schema/aop"
|
||||
xmlns:tx="http://www.springframework.org/schema/tx"
|
||||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
||||
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
|
||||
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
|
||||
">
|
||||
|
||||
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
|
||||
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
|
||||
<property name="url" value="jdbc:log4jdbc:mariadb://211.119.124.9:4407/platform?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&useSSL=false" />
|
||||
<property name="username" value="fimsweb"/>
|
||||
<property name="password" value="fimsweb!@"/>
|
||||
<!--
|
||||
<property name="url" value="jdbc:log4jdbc:mariadb://localhost:3306/xit-base?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&useSSL=false" />
|
||||
<property name="username" value="root"/>
|
||||
<property name="password" value="mjkhan"/>
|
||||
-->
|
||||
</bean>
|
||||
|
||||
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean"
|
||||
p:dataSource-ref="dataSource"
|
||||
p:configLocation="classpath:sql/mybatis-config.xml"
|
||||
p:mapperLocations="classpath:sql/mapper/**/*.xml"
|
||||
/>
|
||||
|
||||
<bean id="mapperConfigurer" class="org.egovframe.rte.psl.dataaccess.mapper.MapperConfigurer">
|
||||
<property name="basePackage" value="cokr.xit" />
|
||||
<property name="sqlSessionFactoryBeanName" value="sqlSession"/>
|
||||
</bean>
|
||||
|
||||
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
|
||||
<property name="dataSource" ref="dataSource"/>
|
||||
</bean>
|
||||
|
||||
<tx:advice id="txAdvice" transaction-manager="txManager">
|
||||
<tx:attributes>
|
||||
<tx:method name="*" rollback-for="Exception"/>
|
||||
</tx:attributes>
|
||||
</tx:advice>
|
||||
|
||||
<aop:config>
|
||||
<aop:pointcut id="serviceMethod" expression="execution(* cokr.xit..service.bean.*ServiceBean.*(..))" />
|
||||
<aop:pointcut id="requiredTx" expression="execution(* cokr.xit..service.bean.*ServiceBean.*(..))"/>
|
||||
<aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" />
|
||||
</aop:config>
|
||||
|
||||
</beans>
|
@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.foundation.test.TestMapper">
|
||||
|
||||
<insert id="insert" parameterType="map">${sql}</insert>
|
||||
|
||||
<update id="update" parameterType="map">${sql}</update>
|
||||
|
||||
<delete id="delete" parameterType="map">${sql}</delete>
|
||||
|
||||
<update id="commit">COMMIT</update>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
|
||||
<configuration>
|
||||
|
||||
<settings>
|
||||
<setting name="mapUnderscoreToCamelCase" value="false"/>
|
||||
<setting name="cacheEnabled" value="false" />
|
||||
<setting name="jdbcTypeForNull" value="NULL" />
|
||||
<setting name="callSettersOnNulls" value="true"/>
|
||||
</settings>
|
||||
|
||||
<typeAliases>
|
||||
<typeAlias alias="egovMap" type="org.egovframe.rte.psl.dataaccess.util.EgovMap"/>
|
||||
<typeAlias alias="dataobject" type="cokr.xit.foundation.data.DataObject"/>
|
||||
</typeAliases>
|
||||
|
||||
<typeHandlers>
|
||||
<typeHandler handler="cokr.xit.foundation.data.RowValueHandler" javaType="java.lang.Object"/>
|
||||
</typeHandlers>
|
||||
|
||||
<plugins>
|
||||
<plugin interceptor="cokr.xit.foundation.data.paging.PagingSupport" />
|
||||
</plugins>
|
||||
|
||||
</configuration>
|
@ -0,0 +1,121 @@
|
||||
package cokr.xit.interfaces.publicinfo;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import cokr.xit.foundation.data.JSON;
|
||||
import cokr.xit.foundation.test.TestSupport;
|
||||
|
||||
public class ConfigurationTest extends TestSupport {
|
||||
@Test
|
||||
void get() {
|
||||
Map<String, Configuration> confs = Configuration.get();
|
||||
Assertions.assertNotNull(confs);
|
||||
confs.keySet().forEach(System.out::println);
|
||||
|
||||
Configuration conf = Configuration.get("apiName");
|
||||
Assertions.assertNotNull(conf);
|
||||
}
|
||||
|
||||
@Test
|
||||
void header() {
|
||||
ServiceMessage.Support.header("basic-info-ext")
|
||||
.forEach((k, v) -> System.out.println(String.format("%s = %s", k, v)));
|
||||
}
|
||||
|
||||
@Test
|
||||
void body() {
|
||||
Object1 obj1_0 = new Object1();
|
||||
obj1_0.setId("1_0");
|
||||
obj1_0.setName("1 zero");
|
||||
Object2 obj2_0 = new Object2();
|
||||
obj2_0.setId("2_0");
|
||||
obj2_0.setName("2 zero");
|
||||
obj2_0.setPhoneNo("222-2222");
|
||||
|
||||
ServiceMessage msg = new ServiceMessage();
|
||||
msg.getData().add(obj1_0);
|
||||
msg.getData().add(obj2_0);
|
||||
|
||||
JSON json = new JSON();
|
||||
String str = json.stringify(msg, true);
|
||||
System.out.println(str);
|
||||
|
||||
Object parsed = json.parse(str, ServiceMessage.class);
|
||||
System.out.println(parsed);
|
||||
}
|
||||
|
||||
public static class Object1 {
|
||||
private String id;
|
||||
private String name;
|
||||
|
||||
/**id을(를) 반환한다.
|
||||
* @return id
|
||||
*/
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
/**id을(를) 설정한다.
|
||||
* @param id id
|
||||
*/
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
/**name을(를) 반환한다.
|
||||
* @return name
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
/**name을(를) 설정한다.
|
||||
* @param name name
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Object2 {
|
||||
private String id;
|
||||
private String name;
|
||||
private String phoneNo;
|
||||
/**id을(를) 반환한다.
|
||||
* @return id
|
||||
*/
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
/**id을(를) 설정한다.
|
||||
* @param id id
|
||||
*/
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
/**name을(를) 반환한다.
|
||||
* @return name
|
||||
*/
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
/**name을(를) 설정한다.
|
||||
* @param name name
|
||||
*/
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
/**phoneNo을(를) 반환한다.
|
||||
* @return phoneNo
|
||||
*/
|
||||
public String getPhoneNo() {
|
||||
return phoneNo;
|
||||
}
|
||||
/**phoneNo을(를) 설정한다.
|
||||
* @param phoneNo phoneNo
|
||||
*/
|
||||
public void setPhoneNo(String phoneNo) {
|
||||
this.phoneNo = phoneNo;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue