{"record":{"id":"5bdb6fa417a30fe4","repo":"mybatis/mybatis-3","slug":"each-xmlconfigbuilder-can-only-be-used-once","errorCode":null,"errorMessage":"Each XMLConfigBuilder can only be used once.","messagePattern":"Each XMLConfigBuilder can only be used once\\.","errorType":"exception","errorClass":"BuilderException","httpStatus":null,"severity":"error","filePath":"src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java","lineNumber":107,"sourceCode":"\n  public XMLConfigBuilder(Class<? extends Configuration> configClass, InputStream inputStream, String environment,\n      Properties props) {\n    this(configClass, new XPathParser(inputStream, true, props, new XMLMapperEntityResolver()), environment, props);\n  }\n\n  private XMLConfigBuilder(Class<? extends Configuration> configClass, XPathParser parser, String environment,\n      Properties props) {\n    super(newConfig(configClass));\n    ErrorContext.instance().resource(\"SQL Mapper Configuration\");\n    this.configuration.setVariables(props);\n    this.parsed = false;\n    this.environment = environment;\n    this.parser = parser;\n  }\n\n  public Configuration parse() {\n    if (parsed) {\n      throw new BuilderException(\"Each XMLConfigBuilder can only be used once.\");\n    }\n    parsed = true;\n    parseConfiguration(parser.evalNode(\"/configuration\"));\n    return configuration;\n  }\n\n  private void parseConfiguration(XNode root) {\n    try {\n      // issue #117 read properties first\n      propertiesElement(root.evalNode(\"properties\"));\n      Properties settings = settingsAsProperties(root.evalNode(\"settings\"));\n      loadCustomVfsImpl(settings);\n      loadCustomLogImpl(settings);\n      typeAliasesElement(root.evalNode(\"typeAliases\"));\n      pluginsElement(root.evalNode(\"plugins\"));\n      objectFactoryElement(root.evalNode(\"objectFactory\"));\n      objectWrapperFactoryElement(root.evalNode(\"objectWrapperFactory\"));\n      reflectorFactoryElement(root.evalNode(\"reflectorFactory\"));","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/mybatis/mybatis-3/blob/008069adb1b089579b5dcba87ee591908b263274/src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java#L89-L125","documentation":"Error \"Each XMLConfigBuilder can only be used once.\" thrown in mybatis/mybatis-3.","triggerScenarios":"Thrown at src/main/java/org/apache/ibatis/builder/xml/XMLConfigBuilder.java:107 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Create a new XMLConfigBuilder instance for each configuration parse instead of reusing one.","Do not call parse() twice on the same builder; rebuild it from the reader/resource."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"008069adb1b089579b5dcba87ee591908b263274","analyzedAt":"2026-08-14T13:07:10.264Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}