{"record":{"id":"d308e5a1feb495f3","repo":"pentaho/pentaho-kettle","slug":"e-wrapped-exception","errorCode":null,"errorMessage":"e (wrapped exception)","messagePattern":"e \\(wrapped exception\\)","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/addxml/AddXML.java","lineNumber":157,"sourceCode":"            Element e = xmldoc.createElement( element );\n            Node n = xmldoc.createTextNode( value );\n            e.appendChild( n );\n            root.appendChild( e );\n          } else {\n            Node n = xmldoc.createTextNode( value );\n            root.appendChild( n );\n          }\n        }\n      }\n    }\n\n    StringWriter sw = new StringWriter();\n    DOMSource domSource = new DOMSource( xmldoc );\n    try {\n      this.getSerializer().transform( domSource, new StreamResult( sw ) );\n\n    } catch ( TransformerException e ) {\n      throw new KettleException( e );\n    } catch ( Exception e ) {\n      throw new KettleException( e );\n    }\n\n    Object[] outputRowData = RowDataUtil.addValueData( r, getInputRowMeta().size(), sw.toString() );\n\n    putRow( data.outputRowMeta, outputRowData );\n\n    return true;\n  }\n\n  private String formatField( ValueMetaInterface valueMeta, Object valueData, XMLField field )\n    throws KettleValueException {\n    String retval = \"\";\n    if ( field == null ) {\n      return \"\";\n    }\n","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/addxml/AddXML.java#L139-L175","documentation":"After building the in-memory DOM, AddXML serializes it via a Transformer (getSerializer().transform). If the javax.xml.transform Transformer throws TransformerException (or any other Exception), processRow wraps it in a KettleException with no additional message — the cause carries all detail. The error means DOM-to-string serialization failed at runtime.","triggerScenarios":"processRow calls this.getSerializer().transform(domSource, new StreamResult(sw)) and the transformer fails — e.g. transformer factory misconfiguration, encoding problems, or DOM state the transformer cannot serialize.","commonSituations":"JDK/JAXP transformer factory conflicts (e.g. wrong Xalan/Saxon on classpath); unsupported output encoding set in step settings; serializer plugin lookup returning a broken serializer.","solutions":["Inspect the cause chain (KettleException.getCause()) for the real TransformerException message","Check for conflicting JAXP transformer implementations (Xalan/Saxon JARs) on the classpath and remove duplicates","Verify the step's encoding setting is a supported charset name","Pin a known-good transformer factory via -Djavax.xml.transform.TransformerFactory system property"],"exampleFix":"// before (diagnosing)\ncatch (KettleException ke) { logError(ke.getMessage()); }\n// after\ncatch (KettleException ke) { logError(\"XML transform failed\", ke); logError(\"Root cause:\", ke.getCause()); }","handlingStrategy":"try-catch","validationCode":"try {\n  Transformer t = TransformerFactory.newInstance().newTransformer();\n  t.transform(new DOMSource(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()), new StreamResult(new StringWriter()));\n} catch (TransformerException e) {\n  failFast(\"JAXP transformer environment broken: \" + e.getMessage());\n}","typeGuard":null,"tryCatchPattern":"try { step.processRow(); } catch (KettleException ke) {\n  Throwable cause = ke.getCause();\n  if (cause instanceof TransformerException) {\n    logError(\"XML serialization failed: \" + cause.getMessage(), cause);\n  }\n}","preventionTips":["Keep a single JAXP TransformerFactory implementation on the classpath","Use standard encodings (UTF-8) in step settings","Smoke-test transformations on the target JDK before deployment"],"tags":["xml","transformer","wrapped-exception","kettle"],"backgroundTag":"xml-transform-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}