2016-06-10 2 views
2

최근 웹 로그 환경을 버전 10.3.3.0에서 10.3.6.0으로 업그레이드하는 작업에 참여했습니다. 둘 다 OSB의 동일한 버전을 호스팅하고 있었고 모든 코드를 복사 한 후에 문제가 발생했습니다. 모든 것이 우리가 결국 xquery의 조각으로 발견 한 것과는 별개로 작용했습니다. 문제의 XQuery는 데이터베이스에서 토큰을 가져 와서 비즈니스 서비스를 통해 요청을 보내고 데이터베이스에서 검색 한 토큰이 잘못 포맷되었습니다. 문제의 XQuery는 fn-bea:execute-sql 명령입니다. 기존의 환경이 캐리지 리턴과 토큰 형식의 토큰을 생성하는 경우, 새로운 환경은 동일한 코드를 실행하고이처럼 보였다 토큰을 생성 :weblogic의 SQL Xquery 구현

54686973206973206120746F6B656E0D#&13; 
0A54686973206973206120746F6B656E#&13; 
0D0A54686973206973206120746F6B65#&13; 
6E0D0A54686973206973206120746F6B#&13; 
656E0D0A54686973206973206120746F#&13; 
6B656E0D0A5468697320697320612074#&13; 

토큰 한 각 줄의 끝 이전에 추가 #&13; 캐리지 리턴 (나는 메모장 + +로 확인하고 이것 이후 캐리지 리턴 문자를 보았다). 이제 나는 #&13;이 캐리지 리턴을위한 ASCII 코드임을 알고 있으며 해결 방법으로 xquery 형식을 사용하여 조금 제거했습니다. 문제의 XQuery는 다음과 같습니다.

fn:replace(xs:token(TOKEN), " " , " 
") 

여기서 token은 SQL 함수의 결과를 넣는 변수입니다.

그러나이 문제의 원인은 무엇입니까? 이 xquery 기능이 최신 버전의 weblogic에서 제거 되었습니까? 웹 로직 변경 로그에서이 것과 직접 관련이있는 내용을 볼 수 없었습니다.

문자열을 토큰으로 포맷하여 # & 13을 제거하는 것보다 더 깨끗한 해결 방법이 있습니다. 캐리지 리턴과 함께 추가 된 공백 대신 캐리지 리턴을 다시 추가 하시겠습니까?

감사합니다, TheVoicedElk

답변

1

이 토큰은 한 추가 # & (13); 각 줄 끝에 캐리지 리턴 전에

별로 없습니다.


은 캐리지 리턴 (일명 \r 또는 &#xD)입니다.


은 줄 바꿈 (일명 \n 또는 &#xA)입니다.

그래서 xquery 엔진은 \ n을 메모장에서 인식 할 수있는 실제 개행 문자로 변환하지만 캐리지 리턴을 엔티티로 인코딩 된 상태로 유지합니다.

제거하려는 경우 replace($token, '\r','')이 작동합니다. 당신은 \ n하지만 스트립을 유지합니다.

+1

메모장에서 토큰을보고 나서 ++ ​​54286973206973206120746F6B656E0D # &13; CRLF와 같은 것을 얻었습니다. 건배, 나는 캐리지 리턴을 교체하는 것에 대해 생각하지 않았습니다. 기능을 건너 뛸 것이기 때문입니다. – TheVoicedElk