{"record":{"id":"8eb72b1b18419673","repo":"quarkusio/quarkus","slug":"unexpected-error","errorCode":"UNEXPECTED_ERROR","errorMessage":"Unable to create SAXResult for SQLXML.","messagePattern":"Unable to create SAXResult for SQLXML\\.","errorType":"error_code","errorClass":"PSQLException","httpStatus":null,"severity":"error","filePath":"extensions/jdbc/jdbc-postgresql/runtime/src/main/java/io/quarkus/jdbc/postgresql/runtime/graal/PgSQLXML.java","lineNumber":245,"sourceCode":"    public synchronized <T extends Result> T setResult(Class<T> resultClass) throws SQLException {\n        checkFreed();\n        initialize();\n\n        if (resultClass == null || DOMResult.class.equals(resultClass)) {\n            domResult = new DOMResult();\n            active = true;\n            //noinspection unchecked\n            return (T) domResult;\n        } else if (SAXResult.class.equals(resultClass)) {\n            try {\n                SAXTransformerFactory transformerFactory = getXmlFactoryFactory().newSAXTransformerFactory();\n                TransformerHandler transformerHandler = transformerFactory.newTransformerHandler();\n                stringWriter = new StringWriter();\n                transformerHandler.setResult(new StreamResult(stringWriter));\n                active = true;\n                return resultClass.cast(new SAXResult(transformerHandler));\n            } catch (TransformerException te) {\n                throw new PSQLException(GT.tr(\"Unable to create SAXResult for SQLXML.\"),\n                        PSQLState.UNEXPECTED_ERROR, te);\n            }\n        } else if (StreamResult.class.equals(resultClass)) {\n            stringWriter = new StringWriter();\n            active = true;\n            return resultClass.cast(new StreamResult(stringWriter));\n        } else if (StAXResult.class.equals(resultClass)) {\n            StringWriter stringWriter = new StringWriter();\n            this.stringWriter = stringWriter;\n            try {\n                XMLOutputFactory xof = getXmlFactoryFactory().newXMLOutputFactory();\n                XMLStreamWriter xsw = xof.createXMLStreamWriter(stringWriter);\n                active = true;\n                return resultClass.cast(new StAXResult(xsw));\n            } catch (XMLStreamException xse) {\n                throw new PSQLException(GT.tr(\"Unable to create StAXResult for SQLXML\"),\n                        PSQLState.UNEXPECTED_ERROR, xse);\n            }","sourceCodeStart":227,"sourceCodeEnd":263,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/jdbc/jdbc-postgresql/runtime/src/main/java/io/quarkus/jdbc/postgresql/runtime/graal/PgSQLXML.java#L227-L263","documentation":"PgSQLXML is Quarkus's native-image substitute for PostgreSQL's SQLXML. When creating a javax.xml.transform.sax.SAXResult via setResult(Class), the underlying TransformerHandler must accept a TransformerHandler.setResult(StreamResult) call; if the transformer factory throws a TransformerException during that setup, this PSQLException with SQLState UNEXPECTED_ERROR is thrown. It means the JAXP SAX transformer pipeline could not be configured, usually a missing/broken XML transformer implementation in the runtime image.","triggerScenarios":"Calling resultSet.getSQLXML(...).setResult(SAXResult.class) (or an XML getSource(SAXResult.class) write path) where transformerFactory.newTransformerHandler() succeeded but transformerHandler.setResult(new StreamResult(...)) throws TransformerException (e.g. missing XML parser/transformer provider, bad system configuration).","commonSituations":"Native-image builds lacking a TransformerHandler implementation or XML factory service files; restrictive javax.xml.transform.TransformerFactory configuration via system properties; classpath conflicts providing a broken TransformerFactory in native mode.","solutions":["Check for XML-related GraalVM/JAXP provider issues: ensure a working TransformerFactory (Xalan/internal) is included in the native image and its service files are registered","Log the chained TransformerException (getCause()) to see the real provider failure and fix the underlying factory configuration","As a workaround, use setResult(StreamResult.class) or setResult(DOMResult.class), which do not go through the TransformerHandler path","Test the same XML write path in JVM mode to confirm whether it is native-image specific"],"exampleFix":"// before\nSAXResult r = sqlxml.setResult(SAXResult.class);\nTransformer t = r.getTransformer();\n// after (avoid TransformerHandler path)\nStreamResult r = sqlxml.setResult(StreamResult.class);\nTransformer t = tFactory.newTransformer();\nt.transform(new DOMSource(node), r);","handlingStrategy":"try-catch","validationCode":"// Sanity-check the transformer provider before using SAXResult with SQLXML\nTransformerFactory tf = TransformerFactory.newInstance();\ntry { tf.newTransformerHandler(); } catch (TransformerException e) {\n    throw new IllegalStateException(\"No working TransformerHandler provider\", e);\n}","typeGuard":null,"tryCatchPattern":"try {\n    SAXResult r = sqlxml.setResult(SAXResult.class);\n} catch (SQLException e) {\n    if (\"08000\".equals(e.getSQLState()) || e.getCause() instanceof TransformerException) {\n        // fall back to StreamResult path\n        StreamResult sr = sqlxml2.setResult(StreamResult.class);\n    } else throw e;\n}","preventionTips":["Verify XML transform providers work in native-image builds early in CI","Prefer StreamResult/DOMResult unless SAX streaming is required","Log the full cause chain of TransformerException to identify provider issues"],"tags":["jdbc","postgresql","xml","native-image"],"backgroundTag":"xml-transformer-init-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}