jaxp 와 xerces 의 관계가 어떻게 되나요?

hwayak의 이미지

xerces 가 없어도 jaxp 만으로 xml을 다루는 코드를 작성할 수 있나요?

방금 간단히 xml 을 만드는 코드를 만들고(jaxp 만을 사용했습니다.) 컴파일시에

javac -cp xercesImpl.jar:xml-apis.jar:xmlParserAPIs.jar Test.java

와 같이 컴파일을 하고

java -cp xercesImpl.jar:xml-apis.jar:xmlParserAPIs.jar Test

와 같이 컴파일을 했습니다.

헌데 javac Test.java, java Test 와 같이 컴파일 및 실행을 해도 아무 문제가 안 생기네요. class path 에 혹시나 xerces 가 등록되어 있나 살펴보아도 전혀 등록되어 있지 않습니다.

xerces 홈페이지에 보니까 아래와 같은 말이 있던데요..

"Always try to use only the standard XML APIs when writing XML applications. This will keep your application shielded from changes in the underlying implementation of those standard APIs and also gives you more flexibility to change the implementation of the standard pieces without modifying your application code."

그럼 jaxp 만으로 코딩하면 되지, 왜 굳이 xerces 같은게 있나요?

jaxp 랑 xerces 가 도대체 무슨관계인지 감이 안오네요..

atie의 이미지

3년전 쯤 전 일인데, 이 글을 읽어 보면 감이 잡힐 겁니다.
요약을 하면 처음 자바 xml 파서는 IBM에서 쓸만하게 만들어 그것을 아파치에 넘겨 xerces와 xalan 프로젝트가 아파치 명의하에 시작이 되었습니다. (5년전 쯤 이던가?) 이를 썬에서 J2se1.4 부터 JCP를 통해 표준화한 것이 JAXP입니다. (3년전에 시작되었습니다.) 최근의 xerces와 xalan는 이 표준인 JAXP를 따르고, xerces 2.7.1과 J2SE 5.0은 JAXP1.3 API를 동일하게 사용을 합니다.

----
I paint objects as I think them, not as I see them.
atie's minipage

feanor의 이미지

Xerces는 JAXP의 구현입니다.

Xerces를 CLASSPATH에 안 넣어도 컴파일이 되는 이유는, Sun에서 배포하는 rt.jar 안에 Xerces가 들어 있기 때문입니다. jar tf 로 확인해 보세요.

--feanor

iolo의 이미지

jaxp에 대해서 여러가지로 정의하시는 것 같은데...
제가 알고 있는 jaxp는

"xml parser factory builder"입니다.

즉, 특정한 파서 라이브러리에 의존하지 않는 방법으로 w3c의 표준 dom, sax를 사용할 수 있도록 하기 위한(해당 파서의 구현 클래스를 로딩할 수 있는) 일종의 래퍼입니다.

xerces는 jaxp를 통해 인스턴스화 할수 있는 파서 중의 하나입니다. crimson이나 dom4j 등도 jaxp를 통해서 사용할 수 있습니다.

물론 직접 xerces, crimson등의 팩토리나 생성자(org.apache.xserces나 org.dom4j.패키지의 클래스들이겠죠)를 사용해도 그만이겠지만 jaxp를 통해서 사용하면 소스 코드 수정없이 파서를 교체할 수 있는 장점이 생기죠. 시스템 프로퍼티로 사용할 파서를 지정할 수 있습니다.

위에 분에 rt.jar에 xerces가 들어있다고 하셨는데...
rt.jar에 들어있는 xml파서구현은 crimson입니다. 그리고 말씀하신대로 다른 구현체가 없다면 crimson이 기본으로 사용됩니다.
특별히 xerces를 써야하는 이유가 없다면(dom level3의 추가 API라던가 xerces의 유틸리트 클래스들) crimson으로 대부분의 경우 충분합니다.

길어졌는데... 간단히말하면 org.w3c.xml패키지의 클래스들만 사용해서 XML프로그래밍을 할 수 있도록 도와주는 API입니다.

----
the smile has left your eyes...

vudghkzm의 이미지

우선 위에 모든 분들께 감사드립니니다. :D

한가지만 더 여쭈께요.
xerces 를 사용하도록 하려면 시스템 프로퍼티를 어떻게 설정하면 되나요? 궁금하네요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.