[개발일기]2013년 8월 2일

일기라면 시작은 역시 날씨인가...
여름이라 ㅡ_- 매우 찝찝하고 더운....뭐 그런 날씨 였다.

갑자기 개발 일기를 쓰게 된 이유는?
=_= 흠....만약 당신이 이런 질문을 받는다면..어떨까?
자네가 경험한 프로젝트 중 위기를 극복한 사례를 말하라.. 하면?

글쎄..프로젝트 중 누구나 작고 큰 위기를 맞이하게 된다. 하지만 지나고 나면 전부 시시한 이슈가 되어 나 자신이 그냥 그런 이슈를 해결 했던 사람이 된다는 것

그리고 =_=;; 본인은 잘 잊어 버리는 나쁜 머리라....뭘 했는지 1~2개월만 지나면 기억이 나질 않는 다는 이유(=_= 사실 이말이 맞다.)

2가지 이유로 일기를 써볼까..해서 써봤다.

오늘의 이슈? OXM
OXM이란 Object Xml Mapping이라는 용어의 단축말?인 용어? =_=;
(아...말솜씨가... =_= 멋지다.)

Oxm의 대표 기능은 마샬링과 언마샬링이라는 기능이다.

마샬링이란 Object 를 xml로 변환하는 작업이고, 언마샬링이란 딱 이름만 들어도 알다 싶을 정도인 딱 Xml를 Object로 변환하는 작업이다.

Oxm이라는 기능을 사용한 이유는 이번 프로젝트에서 =_=요상한 xml,
스키마가 없는..뭐 말그대로 요상한 xml를 객체화 하고 객체를 xml로 변환하는 기능이 필요 했기 때문이다.

사실 요구 사항은 좀 더 복잡하다
마샬링 시 : custom된 jsTree -> json -> xml element object -> 마샬링
언마샬링 시 : xml upload/server xml file -> 언마샬링 -> xml element object -> json -> 커스텀된 jstree


암튼 여기서 문제의 포인트는 말 그대로 요상한 xml이다.

이 요상한 xml은 xml내에 특정 스키마를 사용하겠다고 등록하면 =_=  사용 시 파싱에 대한 오류가 난다.
(휴 =_=;; 니미럴 이럴꺼면 오픈 소스 라이브러리를 쓰던가.)
또한 구조상의 xml element의 조건은 Element가 recursion하게 반복되는 구조이다.

예를 들면
<a>
 <a>
  <b />
  <a>
   <b />
  </a>
 </a>
</a>

이런 구조이다.
즉 a란 테그는 자식에 a란 테그와 b라는 테그를 둘 수 있고 b는 minOccurs=0이고 maxOccurs=1 이다.

첫 개발 시 xsd(xml 스키마)를 적용할까 했는데 recursion한 구조와 스키마를 등록하면 파싱이 안되는 요상한 xml  덕분에 스키마 작성을 안하고 구현하는 방법으로 구상 했다.

그래서 annotation으로 xml element class를 작성하여서..
(쉽게 이야기 하지만...여기엔 삽질이 동원 되었다.)
겨우 기능을 맞쳤다.

해당 코드는 내일 글에서 참고 하시길...(=_= 내가 이렇다..기억이 나질 않는다. @XmlElement 뭐 요딴거하고 @Root~~~ 요딴걸 썻던 기억이 얼추 나긴 하지만.)

그리고 해당 기능을 포함한 개발을 완료 하였다.

BUT 이렇게 끝나면...=_= 왜 글을 썻겠는가..

이슈는 이제 부터이다.

이슈 사항은 정말 쉬워보이는 문제였다. 구현하기 전 까지는.....젠장

위에 예를 든 <b>라는 Element가 <a>테그 내에서 한번 이상 썻을때 예외가 발생하지 않고 멀쩡히 언마샬링이 되는 것이다.

=_= 그냥 되면 되는거지만 QA팀은 그렇지 않은가보다.

@XmlElement 어노테이션의 속성 중 required = false로하면 minOccurs=0, maxOccurs=1가 된다고 하여 적용해보았지만.. 실패! =_=
짧은 영어가 문제인가. 이해를 못한 내가 문제인가..라는 순간 고민 했다.

문제의 속성에 대한 문서
Customize the element declaration to be required.If required() is true, then Javabean property is mapped to an XML schema element declaration with minOccurs="1". maxOccurs is "1" for a single valued property and "unbounded" for a multivalued property.
If required() is false, then the Javabean property is mapped to XML Schema element declaration with minOccurs="0". maxOccurs is "1" for a single valued property and "unbounded" for a multivalued property.
Default:
false

"젠장.젠장" 과 동시에 스친 생각 =_=;; 스키마가 필요해...

스키마를 작성 하는 방법은.... 삽질..
작성시 사용했던 삽질에 대한 노하우는 아래와 같다.

1. Xml schema generator로 검색
2. http://www.freeformatter.com/xsd-generator.html 사이트 득템
3. 예가 되는 xml를 붙여넣기
4. 대강의 스키마 도큐먼트 획득
( =_= 이걸 바로 쓸 생각은 하지말길... 이건 말 그대로 대강의 스키마이다.)

5. notepad++ 열기 (=_= 유명한 editor이다. 검색하면 바로 나온다.)
6. notepad plugin 중 xml에 대한 xml 블라블라 plug in이 있다.
(아까도 말했다..머리가 안좋다고 ㅜㅜ)
7. plugin를 설치하면 xml에 대한 스키마 검증을 할 수 있다.
8. =_=; 스키마 수정 -> 안되네 -> 스키마 수정 -> 안되네 .... 반복과 검색 후
9 스키마 작성 완료

=_=;; 물론 이렇게 개발하면 안된다.
시간이 있다면 그대들은 제대로 스키마 작성하는 방법을 익히길 바란다.

이렇게 나온 스키마를 언마샬러(언마샬링을 담당하는 객체)에 setSchema라는 메소드를 이용하여 등록한다.

(ps. 이용해야할 resource파일의 위치를 모른다면.. ClassLoader를 이용하여 위치정보를 찾은 방법은 찾아라. =_= 몰라서 그러는게 아님.. 구찮아서 그러는 거임)

그리고 언마샬링 수행하면 =_=v Exception를 바라는 xml 문서에서 Exception 발생
오늘은 여기 까지 작업을 진행 하였다.

내일은 Exception을 받아서 나머지 부분인 메세지 처리 작업을 진행할 예정이다.
토요일이지만...물론 아주 잠깐만 나가서 할꺼다.








댓글

  1. Your site gives very helpful and useful information for newcomers . Thanks for sharing this one . I am a gamer and I would like to suggest to you an auto-clicker which is really interesting.
    Autoclicker

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

Spring Batch - JobParameters Default Value 만들기

Hsqldb Server 재기동 시 오류