升级Mule Runtime至4.6.9时遭遇javax.xml.parsers.ParserConfigurationException
解决方案:Mule升级后javax.xml.parsers.ParserConfigurationException处理
问题根源
Mule Runtime 4.6.x升级了底层XML解析器组件,默认JAXP实现(DocumentBuilderFactory/SAXParserFactory)与Oracle XMLType所需的解析器不兼容;同时Mule Maven Plugin(MMP)4.x的构建系统属性传递逻辑和3.x不同,原Studio中配置的系统属性未同步到Maven构建流程,导致XMLType存储过程调用时解析器初始化失败。
分步解决
1. 强制指定Oracle兼容的JAXP解析器系统属性
在Maven构建和运行时,必须显式设置JAXP解析器为Oracle提供的实现,确保XMLType处理的兼容性。在pom.xml的MMP配置中添加系统属性:
<plugin> <groupId>org.mule.tools.maven</groupId> <artifactId>mule-maven-plugin</artifactId> <version>4.3.0</version> <configuration> <systemProperties> <!-- 指定Oracle JAXP解析器实现 --> <property> <name>javax.xml.parsers.DocumentBuilderFactory</name> <value>oracle.xml.jaxp.JXDocumentBuilderFactory</value> </property> <property> <name>javax.xml.parsers.SAXParserFactory</name> <value>oracle.xml.jaxp.JXSAXParserFactory</value> </property> <!-- 启用Oracle JDBC XML解析支持 --> <property> <name>oracle.jdbc.parseXML</name> <value>true</value> </property> </systemProperties> </configuration> </plugin>
2. 调整依赖排除冲突的XML解析器
Mule 4.6.x自带的XML解析器可能与Oracle的XML依赖包冲突,需在Oracle JDBC依赖中排除冲突组件:
<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc11</artifactId> <version>对应你的Oracle版本</version> <exclusions> <exclusion> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> </exclusion> <exclusion> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> </exclusion> </exclusions> </dependency> <!-- 确保引入Oracle XMLType所需的依赖 --> <dependency> <groupId>com.oracle.database.xml</groupId> <artifactId>xdb6</artifactId> <version>对应你的Oracle版本</version> </dependency> <dependency> <groupId>com.oracle.database.xml</groupId> <artifactId>xmlparserv2</artifactId> <version>对应你的Oracle版本</version> </dependency>
3. 配置Mule权限允许访问JAXP类
Mule 4.6.x的安全管理器会限制类访问权限,需在mule-artifact.json中添加特权访问配置:
{ "privilegedAccess": [ { "resource": "javax.xml.parsers.*", "permission": "read" }, { "resource": "oracle.xml.jaxp.*", "permission": "read" }, { "resource": "oracle.xdb.XMLType", "permission": "read" } ] }
4. 验证Spring Bean配置
确保Spring存储过程Bean中XMLType参数的类型声明正确,且数据源配置未遗漏XML相关属性:
<bean id="oracleDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@//host:port/service"/> <property name="username" value="your-user"/> <property name="password" value="your-pass"/> </bean> <bean id="xmlProcessingProcedure" class="org.springframework.jdbc.object.StoredProcedure"> <property name="dataSource" ref="oracleDataSource"/> <property name="procedureName" value="PKG_XML.PROCESS_XML_DATA"/> <declare-parameters> <declare-parameter name="p_input_xml" type="oracle.xdb.XMLType" mode="IN"/> <declare-parameter name="p_output_result" type="java.lang.String" mode="OUT"/> </declare-parameters> </bean>
验证步骤
- 执行
mvn clean package构建应用,确认无ParserConfigurationException错误 - 部署到Mule Runtime 4.6.9,调用存储过程接口,验证XMLType参数能正常处理
内容的提问来源于stack exchange,提问作者andersoal
相关产品推荐
相关产品推荐

