package egovframework.rte.fdl.xml.ehcache;
import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Resource;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import egovframework.rte.fdl.xml.EgovSAXValidatorService;
import egovframework.rte.fdl.xml.SharedObject;
import egovframework.rte.fdl.xml.impl.EgovDOMFactoryServiceImpl;
import egovframework.rte.fdl.xml.impl.EgovSAXFactoryServiceImpl;
/**
* CategoryControllerTest is TestCase of CategoryController
*
* @author Byunghun Woo
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/context-xmltest.xml" })
public class CacheXMLTest {
@Resource(name = "domconcreteCont")
EgovDOMFactoryServiceImpl domconcrete = null;
@Resource(name = "saxconcreteCont")
EgovSAXFactoryServiceImpl saxconcrete = null;
String cacheServerIP;
int cacheServerPort=0;
String Storekey;
String Retrievekey;
String XMLFileName;
private static final Logger LOGGER = LoggerFactory.getLogger(CacheXMLTest.class);
String XMLFileName1 = "spring/context-sql.xml";
String fileName = Thread.currentThread().getContextClassLoader().getResource(XMLFileName1).getFile();
public void setXMLFileName(String XMLFileName)
{
this.XMLFileName = XMLFileName;
}
public void setPortNIp(String cacheServerIP,int cacheServerPort)
{
this.cacheServerIP = cacheServerIP;
this.cacheServerPort = cacheServerPort; //64208
}
public void setStorekey(String Storekey)
{
this.Storekey = Storekey;
}
public void setRetrievekey(String Retrievekey)
{
this.Retrievekey = Retrievekey;
}
public void sendCacheServer(List<?> list)
{
Socket socket = null;
ObjectOutputStream oos= null;
ObjectInputStream ooi= null;
SharedObject sObject = null;
try {
socket = new Socket(cacheServerIP, cacheServerPort);
oos = new ObjectOutputStream(socket.getOutputStream());
sObject = new SharedObject(Storekey,list);
oos.writeObject(sObject);
ooi = new ObjectInputStream(socket.getInputStream());
sObject = (SharedObject)ooi.readObject();
LOGGER.debug("서버로 부터 Message : {}", sObject.getValue());
} catch(Throwable t) {
t.printStackTrace();
} finally {
try { oos.close(); } catch(Throwable t) {t.printStackTrace();}
try { socket.close(); } catch(Throwable t) {t.printStackTrace();}
}
}
public SharedObject getCacheServer()
{
Socket socket = null;
ObjectOutputStream oos= null;
ObjectInputStream ooi= null;
SharedObject sObject = null;
try {
socket = new Socket(cacheServerIP, cacheServerPort);
oos = new ObjectOutputStream(socket.getOutputStream());
sObject = new SharedObject("*",Retrievekey);
oos.writeObject(sObject);
ooi = new ObjectInputStream(socket.getInputStream());
sObject = (SharedObject)ooi.readObject();
} catch(Throwable t) {
t.printStackTrace();
System.exit(1);
} finally {
try { oos.close(); } catch(Throwable t) {t.printStackTrace();}
try { socket.close(); } catch(Throwable t) {t.printStackTrace();}
}
return sObject;
}
public void viewEelement(List<?> list)
{
Iterator<?> i = list.iterator();
while (i.hasNext()) {
Element element = (Element) i.next();
List<?> attList = element.getAttributes();
if (attList.size() != 0)
{
// 역시 속성리스트를 다시 iterator 로 담고
Iterator<?> ii = attList.iterator();
while(ii.hasNext()) {
/** Attribute 파싱 **/
// iterator 로 부터 하나의 속성을 꺼내와서...
Attribute at = (Attribute)ii.next();
LOGGER.debug("attribute : {} attribute value : {}", at.getName(), at.getValue());
LOGGER.debug("Element1 Name : {} Element1 Value : {}", (String)element.getName(), (String)element.getValue());
} // end of while
} // end of 속성 if
List<?> list2 = element.getChildren();
if(list2.size() > 1)
{
viewEelement(list2);
}
}
}
@Test
public void ModuleTest() throws IOException,JDOMException{
EgovSAXValidatorService saxValidator = null;
String cacheServerIP = "127.0.0.1";
String Storekey = "1";
int cacheServerPort = 64208;
CacheXMLAgent cxa = new CacheXMLAgent();
cxa.setPortNIp(cacheServerIP, cacheServerPort);
cxa.setStorekey(Storekey);
cxa.setXMLFileName(XMLFileName1);
saxValidator = saxconcrete.createSAXValidator();
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File(fileName));
List<?> list = saxValidator.getResult(doc,"//*[@*]");
// 1. 캐쉬에 저장
cxa.sendCacheServer(list);
}
}