본문 바로가기

Languages/Flex - Web

FLEX-WEB - XML 파서 실패 요소가 잘못되었습니다.





 

XML 파서 실패 요소가 잘못되었습니다.

{

  • FLEX 에서의 통신방법 중 HTTPService로 불러올 때 XML 데이터에 특수문자("*", null, ">", "<" ...)가 포함된 경우

faultCode:Client.CouldNotDecode faultString:'Error #1090: XML 파서 실패: 요소가 잘못되었습니다.' faultDetail:'null'

  • 위와 같이 허무맹랑한 오류를 뱉아 냅니다.
  • 아무것도 모르면 무작정 하루종일 고생할 게 뻔한 상황입니다. null 이면 null 이지, 특수문자라는 말은 안해주냐구요 왜......

어쨌거나, JSP 건 무엇이건 간에, XML 변환하는 과정에서 발생되는 오류임에는 분명합니다.

  • 데이터베이스에서 가져온 값 중, "<", ">" 혹은 기타 특수문자가 포함되거나 null 이 존재할 경우
  • 일일이 변환해서 넣어주거나 해야하는데, 이렇게 변환을 하더라도 간혹 되지 않을 수 있습니다.

잘난 XML Parser 가 XML을 번역하면서 이미 파악을 해버리기 때문입니다.

  • 따라서 아래와 같이 코딩이 되었다면, 살며시 변화를 줘야 합니다.
  • JSP 경우 BEAN의 데이터를 가져올 때 보통 일반적으로.. 아래와 같이 사용하여도 무방합니다만..

<title><%=bb.getTitle()%></title>

<content><%=bb.getContent()%></content>

<writer><%=bb.getWriter()%></writer>

<date><%=bb.getDate()%></date>

<readCount><%=bb.getReadCount()%></readCount>

  • 그러면 스크립틀릿 내부의 데이터가 들어가면서 XML 로 만들어 집니다.

하지만, 문제는 null 이나 특수문자(*,&,>,<)등이 저기의 내용에 들어갔을 때 문제가 생깁니다.

그렇다면 어떻게 해야 할까요?

바로 아래와 같이 변경해 주시면 됩니다.

<title><!CDATA[[<%=bb.getTitle()%>]]></title>

<content><!CDATA[[<%=bb.getContent()%>]]></content>

<writer><!CDATA[[<%=bb.getWriter()%>]]></writer>

<date><!CDATA[[<%=bb.getDate()%>]]></date>

<readCount><!CDATA[[<%=bb.getReadCount()%>]]></readCount>

  • 바로, 해당 내용이 들어갈 곳에 <!CDATA[[ ... ]]> 의 내용을 넣어주면 됩니다.
  • 이 뜻은 XML Parser 가 번역을 하지 않겠다는 뜻이 됩니다. 그러면, null 이건, 특수문자건 자연스럽게 작동을 하게 됩니다.
  • 보통 iBatis 등을 사용할 때 statement 의 내부에 위와 같이 사용하는 것을 보셨다면, 금방 이해하실 수 있을겁니다.

}