2016-06-10 16 views
2

Ich war vor kurzem mit der Aktualisierung einer Weblogic-Umgebung von Version 10.3.3.0 auf 10.3.6.0 beteiligt. Beide hosten die gleiche Version von OSB und nachdem wir den gesamten Code kopiert haben, ist ein Problem aufgetreten. Alles funktionierte, abgesehen von dem, was wir schließlich für ein Stück Xquery hielten. Die fragliche XQuery ergriff ein Token aus einer Datenbank, sodass wir über einen Business-Service eine Anfrage senden konnten und das Token, das wir aus einer Datenbank abgerufen hatten, falsch formatiert war. Die fragliche XQuery war ein fn-bea:execute-sql Befehl. Wo die alte Umgebung ein Token erstellt das Token mit Zeilenumbrüche formatiert, lief die neue Umgebung den gleichen Code und ein Token erstellt, die wie folgt aussah:SQL Xquery-Implementierung in Weblogic

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

Das Token hatte ein extra #&13; am Ende jeder Zeile vor der Wagenrücklauf (ich habe mit Notepad ++ gecheckt und danach das Wagenrücklaufzeichen gesehen). Jetzt weiß ich, dass #&13; der ASCII-Code für einen Wagenrücklauf ist, und ich verwendete ein wenig xquery-Formatierung, um sie als eine Umgehungsmöglichkeit zu entfernen. Die XQuery in Frage:

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

Wo Token ist die Variable, die ich in die Ergebnisse der SQL-Funktion setzen.

Ich frage mich jedoch, was das verursacht hat? Wurde diese xquery-Funktionalität aus der neueren Version von weblogic entfernt? Ich konnte nichts in den Weblogic-Änderungsprotokollen sehen, die sich direkt darauf beziehen.

Auch gibt es eine sauberere Problemumgehung als die Formatierung der Zeichenfolge als ein Token zum Entfernen der # & 13; zusammen mit dem Wagenrücklauf und dann die Wagenrückläufe anstelle der Leerzeichen hinzufügen, die hinzugefügt wurden?

Danke, TheVoicedElk

Antwort

1

Das Token ein extra # & 13 hatte; am Ende jeder Zeile vor dem Wagenrücklauf

Nicht ganz.


 ist Wagenrücklauf (aka \r oder &#xD).


 ist Zeilenvorschub (auch bekannt als \n oder &#xA).

So übersetzt die Xquery-Engine das \ n in ein tatsächliches Zeilenumbruchzeichen, das Editor versteht, aber den Wagenrücklauf als eine Entität codiert behält. Wenn Sie das entfernen möchten, würde replace($token, '\r','') funktionieren. Du behältst das \ n aber entfernst das \ r.

+1

Nach dem Betrachten der Token in Notepad ++ erhielten wir etwas wie: 54686973206973206120746F6B656E0D # &13; CRLF. Prost, ich hatte nicht daran gedacht, den Wagenrücklauf selbst zu ersetzen, da das eine Funktion überspringt. – TheVoicedElk