OXM은 JAXB르 비롯한 다양한 Object-XML 매핑(또는 바인딩) 기술에 대한 추상화 서비스를 제공하는 모듈이다. 그 필요성이 점점 보편화되면서 SWS에서 코어로  3.0에서 편입되었다.

OXM의 Marshaller와 Unmarshaller라는 두가지 API를 이용해서 JAXB2, JiBX, XmlBeans, Castor, XStream등의 다양한 기술에 대한 투명한 접근방법을 만들어 준다. OXM엔진 자체는 설정을 통해서 언제든지 변경할 수 있도록 하고, 일관된 API를 통해서 OXM기능에 접근하도록 해주는 장점이 있다.

하지만 이 일관성을 유지하기 위해서는 각 기술의 특징을 잘 이해하고 사용할 필요가 있다.

JAXB의 경우는 unmarshal을 하는 경우 root element의 바인딩 오브젝트가 아니라 그에 대한 정보르 담은 JAXBElement<?>타입을 돌려주기도 하기 때문이다. JAXB의 Tutorial등에서도 이 방법이 자연스러운 것처럼 설명하는 곳이 많이 있다. 물론 JAXBElement에서 getValue()하면 루트 오브젝트를 가져올 수 있긴하다.

문제는 JAXB의 JAXBElement를 사용하게 되면 기껏 스프링이 제공하는 OXM추상화서비스라는 것이 무의미해진다는 점이다. OXM엔진을 JiBX에서 JAXB로 바꿨는데 그 때문에 unmarshal을 처리하는 코드에서 JAXBElement타입으로 받아서 getValue() 하도록 함께 수정해야 한다면 그게 무슨 서비스 추상화라고 할 수 있겠는가.

스프링의 OXM을 사용한다면 적어도 OXM기술에서 독립된 방식으로 일관된 코드를 유지할 수 있도록 만들어줘야 한다.

그러기 위해서 JAXB가 어떤 때는 unmarshal을 할 때 JAXBElement를 리턴하고 어떤 때는 바로 루트 바인딩 오브젝트를 돌려주는지를 알아야 한다.

JAXB가 루트 엘러먼트에 대한 정보를 가지고 있다면 그때는 unmarshal시 바로 루트 오브젝트를 리턴해준다. 바인딩용 루트 엘러먼트에 대한 클래스에 @XmlRootElement가 존재해야 한다.

스키마를 이용해서 바인딩 클래스를 만드는 경우라면 루트 엘러먼트를 정의할 때 그 타입을 분리해서 정의하면 안된다. 다음과 같이 anonymous type으로 정의해줘야 한다.

<element name="flights">
    <complexType>
        <sequence>
            <element name="flight" type="tns:flightType"
                     maxOccurs="unbounded">
            </element>
        </sequence>
    </complexType>
</element>

 

만약 타입을 따로 분리하는 경우는 JAXB컴파일러는 이를 가장 비관적으로 해석해서 다른 XML의 부분이라고 생각할 수도 있다는 것이다. 그때는 @XmlRootElement가 지정되지 않으며 unmarshal시에는 JAXBElement타입의 오브젝트를 리턴할 것이다. 

이를 막기 위해서 스키마에 컴파일러가 참조할 수 있는 애노테이션을 주는 방법도 있다. 스키마를 정의할 때 항상 모든 타입을 명시적으로 정의하는 스타일이라면 이 방법을 선택하는 것도 좋을 것이다.

 

아무튼 중요한 것은 서비스 추상화를 이용하려면 항상 일관된 코드를 유지할 수 있도록 만들라는 것. 현실적으로 OXM엔진을 바꿀 필요가 없을 것 같더라도 말이다.

Related posts:

  1. Spring 2.0의 XML확장기능 (2)
  2. Spring 3.0 (46) Spring 3.0 M4 릴리스
  3. Spring 3.0 (53) Spring Dependency Matrix 업데이트
  4. Spring 3.0 (42) Spring Dependency Matrix 업데이트
  5. Spring 3.0 (35) Spring 3.0 Reference Document 공개
  6. Spring 3.0 (26) Spring Expression Language와 @Value
  7. Spring 3.0 (7) Spring 3.0 Dependency Matrix
  8. 유쾌한 이슈처리 재촉 메일
  9. Spring 3.0 (38) Spring Reference 업데이트
  10. Spring 3.0 (44) Spring 3.0과 JEE6
  11. Spring 3.0 (4) – Maven에서 Spring 3.0 최신버전 사용하기
  12. Spring 3.0 (23) Web.Portlet 모듈 선택라이브러리 분석
  13. Spring 3.0 (18) Oxm 모듈의 선택 라이브러리 분석
  14. Spring 3.0 (12) Expression 모듈의 선택 라이브러리 분석
  15. Spring 3.0.2 모듈/라이브러리 의존관계

Facebook comments:

to “Spring 3.0 (48) OXM모듈의 JAXB2 사용시 주의할 점”

  1. usually posts some quite fascinating stuff like this. If youre new to this site

  2. Wow, great article post.Thanks Again. Awesome.

  3. It as not that I want to replicate your website, but I really like the layout. Could you let me know which style are you using? Or was it custom made?

  4. viagra and alcohol safe joined
    http://viagraboomer.com – viagra pills viagra for daily use prices valid css
    natural viagra alternatives that work – viagra online canada
    viagra rbook.cgi

  5. I truly appreciate this post. I?аАТ’аЂа†ve been looking all over for this! Thank goodness I found it on Bing. You ave made my day! Thx again

  6. There is apparently a bunch to know about this. I think you made certain nice points in features also.

  7. I view something really special in this website.

  8. Way cool! Some extremely valid points! I appreciate you writing this write-up and also the rest of the site is extremely good.

  9. Gtcqxm hmnyfj male erection pills erectile dysfunction drugs

  10. What’s up mates, good paragraph and fastidious arguments commented at this place, I am truly enjoying by these.|

  11. Hello, I enjoy reading all of your article post. I wanted to write a little comment to support you.|

  12. You’re so awesome! I don’t suppose I’ve read through something like this before. So wonderful to discover somebody with some original thoughts on this subject matter. Really.. many thanks for starting this up. This site is one thing that is required on the web, someone with some originality!|

  13. Here are some of the web-sites we suggest for our visitors

  14. My family members every time say that I am killing my time here at net, but I know I am getting know-how all the time by reading thes pleasant content.|

  15. I blog often and I seriously thank you for your content. The article has really peaked my interest. I will bookmark your blog and keep checking for new details about once a week. I opted in for your Feed too.|

  16. Stunning story there. What happened after? Good luck!|

  17. Sites of interest we’ve a link to

  18. What i do not understood is in truth how you are now not really much more neatly-favored than you might be right now. You are very intelligent. You understand thus considerably with regards to this topic, produced me in my view consider it from so many various angles. Its like men and women aren’t fascinated except it’s one thing to accomplish with Woman gaga! Your own stuffs excellent. All the time take care of it up!|

  19. http://merger-ingenieria.es/11774-2/ where to meet catholic singles in san diego http://maroskult.hu/2020/02/12/5968/ looking for older disabled seniors in florida

  20. Here are several of the web sites we advocate for our visitors

  21. Wonderful story, reckoned we could combine a few unrelated information, nevertheless really really worth taking a look, whoa did one study about Mid East has got much more problerms too

  22. I think this is a real great post.Really looking forward to read more. Awesome.

  23. Very informative article.Much thanks again. Will read on

  24. https://www.boka.com.ve/index.php/2020/01/15/7337/ where to meet african singles in texas https://firstclassrealestate.tech/3520-2/ looking for older senior citizens in philippines

  25. below you will uncover the link to some web-sites that we think you’ll want to visit

  26. below you will locate the link to some internet sites that we think you need to visit

  27. Bdutga opfmlx medicine for impotence medicine for erectile

  28. Here are several of the web pages we advocate for our visitors

  29. we came across a cool internet site that you simply may possibly enjoy. Take a appear when you want

  30. Here are several of the websites we advise for our visitors

  31. usually posts some really exciting stuff like this. If you are new to this site

  32. Here are a few of the web sites we advise for our visitors

  33. we like to honor numerous other online internet sites around the internet, even when they arent linked to us, by linking to them. Under are some webpages really worth checking out

  34. just beneath, are quite a few totally not related web pages to ours, nevertheless, they may be surely really worth going over

  35. please stop by the web sites we adhere to, which includes this 1, as it represents our picks in the web

  36. although web sites we backlink to beneath are considerably not associated to ours, we really feel they are basically worth a go by means of, so possess a look

  37. Hi, Neat post. There’s a problem together with your site in web explorer, could test this? IE still is the market leader and a large component to people will miss your great writing due to this problem.|

  38. Howdy! I’m at work surfing around your blog from my new apple iphone! Just wanted to say I love reading your blog and look forward to all your posts! Carry on the superb work!|

  39. Here are several of the web-sites we recommend for our visitors

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha