2025년 2월 22일 토요일

The reference to entity “문자” must end with the ‘;’ delimiter 에러내용 정리

soap to rest 동기 인터페이스 이며 타겟쪽 조회된 데이터가 리턴되면서 아래와 같은 에러가 발생
Invalid white space character (Oxb) in text to output(in xml 1.1, could output as a character entity)
로그레벨이 낮은경우 response데이터인경우 request데이터처럼 로그상에 payload에서 바로 확인할수 있는게 아니라서 데이터를 보고 찾아내야 할때가 있음

po타겟 채널이 rest라서 json포맷으로 리턴받은 데이터는 확인 할수 있지만 눈으로 보기에는 어렵고 의심되는 데이터 부분을 카피해서 하나씩 send text로 날려서 매핑에러가 발생되는 데이터를 찾아내야 했고 그래서 찾아낸 데이터와 에러내용이 아래와 같음
html 태그안에 들어간 데이터인데 ‘A&D시스템담당자’ 이렇게 데이터가 들어가있고 에러내용은
The reference to entity “D시스” must end with the ‘;’ delimiter.
위 에러내용을 풀이하면 엔티티 참조가 ‘;’로 끝나지 않았다 ? 이것의 AI답변은 아래와 같음

왜 이 데이터만 문제일까?

‘A&D시스’에서 &가 HTML 엔티티로 인식되었지만, &D시스은 유효한 엔티티가 아니라서 오류가 발생한 것입니다.
왜 오류가 발생했을까?
HTML에서는 & 기호가 특별한 의미를 가집니다. 예를 들어:
&lt; → < (less than, 작다 기호)
&gt; → > (greater than, 크다 기호)
&amp; → & (앤드 기호)
이런 식으로 & 뒤에 특정 문자 조합이 오면, HTML 특수 문자로 변환됩니다.
그런데 A&D시스을 보면:
A&까지는 그냥 문자처럼 보이지만,
&D시스에서 &D가 HTML 특수 문자로 인식될 수 있는지 검사하게 됩니다.
여기서 문제는 &D시스이라는 HTML 엔티티는 존재하지 않는다는 점이에요.
&D는 HTML에서 정해진 엔티티가 아니니까 브라우저가 "이거 잘못된 거야!" 라고 오류를 내는 거죠.
다른 &는 올바르게 &amp;로 변환되었지만, A&D시스는 escape 처리가 되지 않았기 때문에 수동으로 처리해야 합니다.
해결 방법은 &를 반드시 &amp;로 변환하는 것입니다.

Escape처리란

이스케이프 처리 (Escape Characters)
XML 문서에서 특정 문자들은 특수한 의미를 가지므로, 이러한 문자가 문자 그대로 사용되지 않도록 이스케이프 처리(escape)가 필요합니다. 이스케이프 처리는 특수 문자가 XML 문서 안에서 잘못 해석되지 않도록 변환하는 방법입니다.

일단은 타겟쪽의 CDATA처리로 진행하려고 하는데 PO의 Receiver REST채널 옵션인
Convert to XML 1.1 document나 Custom XML/JSON Conversion Rules의 해당필드의 타입지정으로 해결이 될수 있을것 같음

만약 PO쪽 문제 가능성은?

PO 인터페이스 업무를 하다보면 이유를 모른채 그냥 해결되는경우도 존재하는데 송,수신 그리고 PO도 변경한게 없는데 그냥 해결됨


댓글 없음:

댓글 쓰기

최근글

주방일에 대해 정리