{"record":{"id":"cf7a5d17001f8a87","repo":"apple/pkl","slug":"typemismatch","errorCode":null,"errorMessage":"typeMismatch","messagePattern":"typeMismatch","errorType":"error_code","errorClass":"VmException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/stdlib/xml/RendererNodes.java","lineNumber":343,"sourceCode":"          || value instanceof Double;\n    }\n\n    private static boolean isContent(Object value) {\n      return isScalar(value) || isXmlCData(value) || isXmlComment(value);\n    }\n\n    private static boolean isXmlElement(Object value) {\n      return value instanceof VmDynamic dynamic\n          && VmUtils.readMemberOrNull(dynamic, Identifier.IS_XML_ELEMENT) == Boolean.TRUE;\n    }\n\n    private void renderXmlElement(VmDynamic value) {\n      assert isXmlElement(value);\n\n      var name = VmUtils.readMember(value, Identifier.NAME);\n      // this check will be unnecessary once we have an XmlElement Pkl class\n      if (!(name instanceof String)) {\n        throw new VmExceptionBuilder().typeMismatch(value, BaseModule.getStringClass()).build();\n      }\n\n      Object attributes = VmUtils.readMember(value, Identifier.ATTRIBUTES);\n      // this check will be unnecessary once we have an XmlElement Pkl class\n      if (!(attributes instanceof VmMapping)) {\n        throw new VmExceptionBuilder().typeMismatch(value, BaseModule.getMappingClass()).build();\n      }\n\n      var isBlockFormat = VmUtils.readMember(value, Identifier.IS_BLOCK_FORMAT);\n      // this check will be unnecessary once we have an XmlElement Pkl class\n      if (!(isBlockFormat instanceof Boolean)) {\n        throw new VmExceptionBuilder().typeMismatch(value, BaseModule.getBooleanClass()).build();\n      }\n\n      writeXmlElement((String) name, (VmMapping) attributes, value, (Boolean) isBlockFormat, true);\n    }\n\n    private boolean isXmlInline(Object value) {","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/stdlib/xml/RendererNodes.java#L325-L361","documentation":"When rendering a `Dynamic` value as an XML element, the renderer reads its `name` member and requires it to be a String (since there is no dedicated XmlElement Pkl class yet). If `name` is any other type it throws a typeMismatch against the String class.","triggerScenarios":"An object with `name`/`attributes`/`content` members rendered as XML where `name` evaluates to a non-String (e.g. an Int, Identifier, or another object).","commonSituations":"Hand-rolled XML element objects where `name` was accidentally assigned a number or expression returning non-String; typo'd member names causing fallback reads.","solutions":["Set `name` to a String literal or stringified expression (e.g. `name = \"book\"`)","Explicitly convert: `name = id.toString()`","Validate that all element objects you feed to the XML renderer have String `name`","Use the pkl-xml library's `XmlElement` helpers instead of ad-hoc Dynamics"],"exampleFix":"// before\nname = 42\n// after\nname = \"42\"","handlingStrategy":"type-guard","validationCode":"name: String\nassertion: name is String","typeGuard":"function isValidXmlElement(d: Dynamic): Boolean = d.name is String && d.attributes is Mapping && d.isBlockFormat is Boolean","tryCatchPattern":null,"preventionTips":["Always define `name` as a String in element-like Dynamics","Use the pkl-xml library's element builders","Add module-level assertions validating element shape"],"tags":["xml","type-mismatch","dynamic","pkl"],"backgroundTag":"type-mismatch","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}