Apache Flex
  1. Apache Flex
  2. FLEX-33644

XMLEncoder improperly handles encoding the string "null".

    Details

    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: Adobe Flex SDK 3.0 (Release), Adobe Flex SDK 3.1 (Release), Adobe Flex SDK 3.2 (Release), Adobe Flex SDK 3.3 (Release), Adobe Flex SDK 3.4 (Release), Adobe Flex SDK 3.5 (Release), Adobe Flex SDK 3.6 (Release), Apache Flex 4.9.0
    • Fix Version/s: None
    • Component/s: RPC: General
    • Labels:

      Description

      The following code returns an empty string:

      var enc:XMLEncoder = new XMLEncoder();
      enc.encode("null");

      However, SchemaMarshaller.marshall() correctly returns the string "null".

      I believe the problems is that XML.appendChild (as used in XMLEncoder.setValue) for some reason treats the string "null" differently. I have no idea why.

      If you're curious as to why I think this is a bug, see this StackOverflow question:
      http://stackoverflow.com/questions/4456438/how-can-i-pass-the-string-null-through-wsdl-soap-from-as3-to-coldfusion-web

      Finally, see this fiddle for examples:
      http://wonderfl.net/c/jYIm

        Activity

        Hide
        Ben Burns added a comment - - edited

        Edited description to reflect my present understanding of what's going on (and perhaps to remove my prior stupidity about type coercion as it applies to the null literal).

        Show
        Ben Burns added a comment - - edited Edited description to reflect my present understanding of what's going on (and perhaps to remove my prior stupidity about type coercion as it applies to the null literal).
        Hide
        Justin Mclean added a comment -

        This is the cause of the issue (at the bottom of the encode method there a similar condition).

        var nullXML:XML = <root>null</root>;

        if (nullXML == null)

        { trace("Some XML is null"); }

        nullXML == null is true!

        Not 100% sure what the best fix is - suggestions welcome.

        Show
        Justin Mclean added a comment - This is the cause of the issue (at the bottom of the encode method there a similar condition). var nullXML:XML = <root>null</root>; if (nullXML == null) { trace("Some XML is null"); } nullXML == null is true! Not 100% sure what the best fix is - suggestions welcome.
        Hide
        Ben Burns added a comment - - edited

        Thanks, Justin. I created a fork of my fiddle test case to demonstrate what you're saying. http://wonderfl.net/c/dd23/read

        Personally I think the real problem is that anything would ever coerce to null, or that null would ever coerce to <root>null</root>. It's my opinion that null should only ever be coerced to false (or maybe the opposite to prevent weird coercion chains) in languages which support type coercion, and that for all other purposes, a == null should be identical to a === null. In lieu of making that change, I'd recommend auditing all flex XML processing code for null checks using the weak equality operator where they should in fact be using the strict equality operator.

        Show
        Ben Burns added a comment - - edited Thanks, Justin. I created a fork of my fiddle test case to demonstrate what you're saying. http://wonderfl.net/c/dd23/read Personally I think the real problem is that anything would ever coerce to null, or that null would ever coerce to <root>null</root>. It's my opinion that null should only ever be coerced to false (or maybe the opposite to prevent weird coercion chains) in languages which support type coercion, and that for all other purposes, a == null should be identical to a === null. In lieu of making that change, I'd recommend auditing all flex XML processing code for null checks using the weak equality operator where they should in fact be using the strict equality operator.

          People

          • Assignee:
            Unassigned
            Reporter:
            Ben Burns
          • Votes:
            1 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

            • Created:
              Updated:

              Development