2010. 6. 29. 17:20
텔레메트릭스 어쩌구 하면서 IEEE1451 TEDS Tool을 작업하면서 XML로 TEDS 데이터를 관리한적이 있었다.
그당시 JDOM(??)을 사용했을듯 한데.. 하튼.. 아무 생각없이 좀 무식하게 만들감이 있어.. XML to Object 를 찾다가 발견한넘이 JAXB(Java Architecture for XML Binding)다. 생각보다 요넘 많이 유용한듯..
문서를 찾다보니.. 예외 처리 시 어쩌구 저쩌구 하지만.. 그 방법은 다음으로 미루고.. 초기 프로토타입 버전을 올림(난중에 얼마나 무식했었는지 참고용ㅋㅋ)
Example
ps.
- XML to Java Class 를 이클립스 plug in 으로 만들어 보는게 좋을듯.. 공부도 할겸. (이런거는 좀 미루지 말자.)
그당시 JDOM(??)을 사용했을듯 한데.. 하튼.. 아무 생각없이 좀 무식하게 만들감이 있어.. XML to Object 를 찾다가 발견한넘이 JAXB(Java Architecture for XML Binding)다. 생각보다 요넘 많이 유용한듯..
문서를 찾다보니.. 예외 처리 시 어쩌구 저쩌구 하지만.. 그 방법은 다음으로 미루고.. 초기 프로토타입 버전을 올림(난중에 얼마나 무식했었는지 참고용ㅋㅋ)
Example
package jface.common.xmlbind;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.UnmarshallerHandler;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import jface.common.coolbar.marshalling.Coolbar;
public class XmlBinding {
/**
* unmarshalling
*
* XML to java 데이터 객체
*
* @param path
* .xml 경로
* @return
* 언마샬된 데이터 객체
*/
public Coolbar getCoolBarMenu(String path) {
try {
ClassLoader cl = this.getClass().getClassLoader();
JAXBContext context = JAXBContext.newInstance(Coolbar.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
// Unmarshaller에서 저수준 처리기를 얻는다.
UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
// SAX 파서를 얻기 위해 JAXP를 사용한다.
SAXParserFactory factory = SAXParserFactory.newInstance();
// factory 옵션을 설정한 다음, 표준 JAXP 호출을 사용한다.
factory.setNamespaceAware(true);
XMLReader reader = factory.newSAXParser().getXMLReader();
// unmarshallerHandler로 reader 처리기를 설정한다.
reader.setContentHandler(unmarshallerHandler);
// 이제 JAXB에서 가져온 언마샬링 처리기를 사용해 구문분석에 들어간다.
reader.parse(new InputSource(cl.getResourceAsStream(path)));
Coolbar instance = (Coolbar)unmarshallerHandler.getResult();
return instance;
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
/**
* marshalling
*
* java object to XML
* @param path
* .xml 경로
* @param coolbar
* java 데이터 객체
*/
public void setCoolBarMenu(String path, Coolbar coolbar) {
try {
ClassLoader cl = this.getClass().getClassLoader();
JAXBContext jc = JAXBContext.newInstance(Coolbar.class);
Marshaller m = jc.createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
OutputStream os = new FileOutputStream( new File(cl.getResource(path).getPath()) );
m.marshal( coolbar, os );
} catch(Exception e) {
}
}
}
import javax.xml.bind.JAXBContext;
import javax.xml.bind.UnmarshallerHandler;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import jface.common.coolbar.marshalling.Coolbar;
public class XmlBinding {
/**
* unmarshalling
*
* XML to java 데이터 객체
*
* @param path
* .xml 경로
* @return
* 언마샬된 데이터 객체
*/
public Coolbar getCoolBarMenu(String path) {
try {
ClassLoader cl = this.getClass().getClassLoader();
JAXBContext context = JAXBContext.newInstance(Coolbar.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
// Unmarshaller에서 저수준 처리기를 얻는다.
UnmarshallerHandler unmarshallerHandler = unmarshaller.getUnmarshallerHandler();
// SAX 파서를 얻기 위해 JAXP를 사용한다.
SAXParserFactory factory = SAXParserFactory.newInstance();
// factory 옵션을 설정한 다음, 표준 JAXP 호출을 사용한다.
factory.setNamespaceAware(true);
XMLReader reader = factory.newSAXParser().getXMLReader();
// unmarshallerHandler로 reader 처리기를 설정한다.
reader.setContentHandler(unmarshallerHandler);
// 이제 JAXB에서 가져온 언마샬링 처리기를 사용해 구문분석에 들어간다.
reader.parse(new InputSource(cl.getResourceAsStream(path)));
Coolbar instance = (Coolbar)unmarshallerHandler.getResult();
return instance;
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
/**
* marshalling
*
* java object to XML
* @param path
* .xml 경로
* @param coolbar
* java 데이터 객체
*/
public void setCoolBarMenu(String path, Coolbar coolbar) {
try {
ClassLoader cl = this.getClass().getClassLoader();
JAXBContext jc = JAXBContext.newInstance(Coolbar.class);
Marshaller m = jc.createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
OutputStream os = new FileOutputStream( new File(cl.getResource(path).getPath()) );
m.marshal( coolbar, os );
} catch(Exception e) {
}
}
}
ps.
- XML to Java Class 를 이클립스 plug in 으로 만들어 보는게 좋을듯.. 공부도 할겸. (이런거는 좀 미루지 말자.)
'java > xml' 카테고리의 다른 글
[xml] - xjc.exe 를 사용한 xsd to java class 생성 (0) | 2010.06.29 |
---|---|
[xml] - xml to xsd (0) | 2010.06.29 |
[java] - Marshaller 을 이용한 Object to xml string (0) | 2010.06.25 |