データ型についての注意(デフォルトの動作が変わりました)

ColdFusion 2018では、デフォルト時の動作の違いとして、「データ型の保持」があげられます。ColdFusionはタイプレスな言語ですが、これまで、JSON 形式等への変換の際に予期しない型に変換される場合がありました。例えば、文字列 ”yes” をセットしたらブール値に変換されたり、文字列として ”01” を渡したくても数字の ”1” に変換されてしまうなどがありました。

それらの問題に対応するため、ColdFusion2018 では、デフォルトの動作として、値をセットした際に「データ型を保持」するようになりました。

例えば、列のデータ型が定義されない下記のような変数の作成の場合でも、以前のバージョン(文字列としてシリアル化)とは異なり、データ型の保持が行われます。

【サンプルプログラム】

<cfscript>
 a=1234567890;
 b="1234567890";
 for (key in Variables) {
   writeOutput("#key# = #Variables[key]#(#getMetadata(Variables[key])#) <br>");
 }
</cfscript>

上記のプログラムを実行すると、今までのColdFusionでは

A = 1234567890(class java.lang.String)
B = 1234567890(class java.lang.String)

となっていましたが、これが ColdFusion 2018 では

A = 1234567890(class java.lang.Integer)
B = 1234567890(class java.lang.String)

となります。この「データ型の保持」によって、JSONへの変換の際などに、ColdFusion2018ではこれまでのバージョンとは違う出力となる場合があります。

ただ、これまでのColdFusionの動作に従ってプログラムを作成していた場合、ColdFusion2018では「データ型」を意識した変換を考えてプログラムし直す必要が生じます。ColdFusion 2016 と 2018 に両対応するプログラムを運用されている場合には、ここで互換性の問題が生じることになるため、ColdFusion 2018 ではシステムプロパティ「-Dcoldfusion.literal.preservetype=false」を指定し、動作をこれまでのバージョンと同じ処理に戻す機能が用意されています。それを希望される場合は、ColdFusion Administrator の [ サーバー の設定 ] の「Java と JVM」画面を開き、「JVM 引数」の入力項目に「-Dcoldfusion.literal.preservetype=false」を追加してください。
(※追加する際は、項目と項目の間をスペース区切り、途中に改行は入れないようにしてください)

(参考)
https://helpx.adobe.com/jp/coldfusion/developing-applications/the-cfml-programming-language/using-coldfusion-variables/data-types-developing-guide.html
https://www.samuraiz.co.jp/coldfusion/faq/dl/ColdFusion2018_seminar.pdf#page=23

 


記事公開日:2020年07月10日
最終更新日:2020年07月15日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.