JAXB를 이용한 File로 마샬링, 마샬링된 XML을 언마샬링 하는 방법에 대해 살펴보았습니다. 이번엔 HttpUrlConnection
을 통해 얻어온 InputStream으로 언마샬링 하는 예제를 써보겠습니다. 1부의 File을 통한 Marshalling, UnMarshalling
예제를 보시고 나면 금방 이해 되실 듯 싶습니다. 1부에서는 List형 데이터를 마샬링, 언마샬링 하는 방법을 다뤘고
이번에는 약간 변경하여 XML Element의 Attribute처리를 다뤄봤습니다.
-XML 원본 데이터 예시(UnMarshalling시 사용)
<packing_list>
<packing_data barcode_read_date="XXX" packing_no="XXX" reg_userid="XXX" complete_yn="Y" matched_result="N" />
<packing_data barcode_read_date="XXX" packing_no="XXX" reg_userid="XXX" complete_yn="Y" matched_result="N" />
</packing_list>
-------------------------------------------------------------------------------------------------※ HttpUrlConnection을 통해 XML을 InputStream으로 가져옴
public InputStream getXmlStreamFromUrl(Map<String, Object> paramMap){
String packingNo = (String)paramMap.get("packing_no");
URL url = null;
HttpURLConnection httpUrlConnection = null;
InputStream ips = null;
try {
url = new URL("http://testurl.com/test.xml");
URLConnection urlConnection = url.openConnection();
httpUrlConnection = (HttpURLConnection) urlConnection;
httpUrlConnection.setDoInput(true);
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setRequestMethod("POST");
httpUrlConnection.setUseCaches(false);
httpUrlConnection.setDefaultUseCaches(false);
httpUrlConnection.setRequestProperty("Content-Type", "text/xml");
ips = httpUrlConnection.getInputStream();
ips.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ips;
}
------------------------------------------------------------------------------------------------
- HttpUrlConnection을 통해 가져온 XML(InputStream) 언마샬링
//UnMarshalling을 위해 XML을 HttpURLConnection을 통해 가져온 InputStream을
//가져온다.
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
JAXBContext jaxbContext = null;
InputStream xmlStream = getXmlStreamFromUrl(paramMap);
PackingList packingList = null;
try {
jaxbContext = JAXBContext.newInstance(PackingList.class);
packingList = (PackingList) jaxbContext.createUnmarshaller().unmarshal(xmlStream);
} catch (JAXBException e) {
e.printStackTrace();
}
------------------------------------------------------------------------------------------------
- UnMarshalling을 위한 Java Class - PackingList
//UnMarshalling시에는 Marshalling과 반대로 XmlRootElement어노테이션에 지정한 이름에
//해당하는 데이터를 가져오게 된다.
@XmlRootElement(name="packing_list")
@XmlAccessorType(XmlAccessType.FIELD)
public class PackingList {
//UnMarshalling시에는 Marshalling과 반대로 XmlElement어노테이션에 지정한 이름에 해당하는
//데이터를 가져오게 된다.(Marshalling시에는 필드이름으로 지정하게 됨)
//PackingListVO에서는 원본 XML과 같이 각 속성의 이름을 통해 값을 가져오도록 함.
@XmlElement(name="packing_data")
private List<PackingListVO> list = null;
public void setPackingList(List<PackingListVO> packList){
this.list = packList;
}
public List<PackingListVO> getPackingList(){
return this.list;
}
}
------------------------------------------------------------------------------------------------
- PackingListVO Class - ValueObject Class(DTO)
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
//XML로드시 필드명으로 읽어 들이겠다고 선언
@XmlAccessorType(XmlAccessType.FIELD)
public class PackingListVO {
//XML에 정의된 속성명을 동해 값을 가져오게 된다.
@XmlAttribute(name="barcode_read_date")
private String barcodeReadDate = "";
@XmlAttribute(name="packing_no")
private String packingNo = "";
@XmlAttribute(name="reg_userid")
private String regUserID = "";
@XmlAttribute(name="complete_yn")
private String completeYN = "";
@XmlAttribute(name="matched_result")
private String matchedResult = "";
..
getter/setter 생략
..
------------------------------------------------------------------------------------------------
HttpUrlConnection을 통해 언마샬링 처리는 실무에서 직접 적용 해본바로는 다른 프로그래밍 언어를 사용하는 타사와의
데이터 연동시에 유용하게 쓰였습니다. 사용하는 방법은 1부에서 파일로 XML마샬링 후 처리하는것과 비슷하게 크게
복잡한 부분은 없었습니다. 접속만 잘된다면 매우 유용하겠지요.
'프로그래밍 이야기' 카테고리의 다른 글
JAXB를 이용한 XML UnMarshalling(HttpServletResponse getWriter()) 예제 #4 (0) | 2013.08.19 |
---|---|
JAXB를 이용한 XML Marshalling, UnMarshalling(InputStream, OutputStream) 예제 #3 (0) | 2013.08.19 |
JAXB를 이용한 XML Marshalling, UnMarshalling(File) 예제 #1 (0) | 2013.08.19 |
[JAVA] 기준년월의 전월 구하는 기능, 현재 년월의 전월, 마지막 날짜 구하는 기능 (0) | 2013.04.23 |
[JSP_AJAX] jQuery Ajax, Apache Commons Upload를 사용한 다중파일 업로드, 프로그레스 바 제작 (2) | 2012.12.16 |