manywaypark's Blog
개발, 검색, 함수

'xmerl'에 해당되는 글 2건

  1. 2008.09.10 [TIP] xmerl_scan에서 DTD file 문제
  2. 2008.07.30 [ERR] erlang w/ xmerl memory allocation error
외부 DTD 파일에 <?xml version ... ?> 같은 XML 파일임을 나타내는 PI가 들어있으면 xmerl_scan:(file|string)에서는 다음과 같은 에러를 내면서 parsing이 안된다 (java 쪽에서는 별 문제가 없었던 DTD 파일이다).

error msg:
1066- fatal: {invalid_target_name," version=\""}
** exception exit: {fatal,{{invalid_target_name," version=\""},
                           {file,"/path/to/dtd.dtd"},
                           {line,6},
                           {col,18}}}
     in function  xmerl_scan:fatal/2
     in call from xmerl_scan:scan_ext_subset/2
     in call from xmerl_scan:scan_decl_sep/2
     in call from xmerl_scan:scan_ext_subset/2
     in call from xmerl_scan:scan_decl/2
     in call from xmerl_scan:fetch_and_parse/3
     in call from xmerl_scan:fetch_DTD/2
     in call from xmerl_scan:scan_doctype2/3

간편 해결책: DTD 들이 있는 디렉토리에서 다음을 실행해주자 (DTD 파일이 여러개일때...)
$ sed -i -r "/<\?xml .*\?>/s/.*//" *.dtd      # remove xml PI stuff.
$ sed -i '/./,/^$/!d' *.dtd                   # remove leading blank line(s).

happy hackin'
해당 version: R12B-3

xmerl을 사용하여 다량의 xml 파일들을 파싱하는 도중에 특정 파일에서 CPU/메모리사용량이 치솟고 다음과 같은 에러메시지와 함께 erlang이 죽어버렸다.

eheap_alloc: Cannot allocate xxxxx bytes of memory (of type "heap").

특정 파일 하나에서만 이 현상이 생겼는데, 파일을 열어보니 복잡한 테이블과, entity들을 많이 사용한 xml이었다. 조금 복잡하긴 했지만 정상적인 xml이었다.

검색한 결과 xmerl_scan의 버그임이 밝혀졌다.
(R12B-4 에서는 패치된 버전이 포함될 것이라고 한다).

링크에 나와있는대로 한줄만 고쳐주면 에러없이 잘 동작한다.



happy hackin'
1 
분류 전체보기 (306)
잡담 (20)
함수형 언어 (65)
emacs (16)
java (18)
tips & tricks (154)
사랑 (1)
가사 (0)
독서 (4)
mobile (6)
비함수형 언어 (2)

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

04-26 06:33