MuleSoft配置流遇SAXParseException错误,请求技术排查
排查MuleFlow的SAXParseException错误
错误日志
[ERROR] Failed to execute goal org.mule.tools.maven:mule-maven-plugin:3.8.1:process-classes (default-process-classes) on project account-collateral-api: Execution default-process-classes of goal org.mule.tools.maven:mule-maven-plugin:3.8.1:process-classes failed: There was '1' error while parsing the given file 'account-collateral-api-acctcollaterals-acctcollateralrelkeys-acctcollateralrelid-get.xml'. [ERROR] Full list: [ERROR] org.xml.sax.SAXParseException; lineNumber: 31; columnNumber: 21; cvc-complex-type.2.4.a: Invalid content was found starting with element '{http://www.mulesoft.org/schema/mule/http}:uri-params'. One of '{http://www.mulesoft.org/schema/mule/http}:response-validator' is expected.
对应的Flow配置
<?xml version="1.0" encoding="UTF-8"?> <mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:apikit="http://www.mulesoft.org/schema/mule/mule-apikit" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd http://www.mulesoft.org/schema/mule/mule-apikit http://www.mulesoft.org/schema/mule/mule-apikit/current/mule-apikit.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd"> <flow name="get:\acctCollaterals\acctCollateralRelKeys\(acctCollateralRelId):application\json:account-collateral-api-config"> <logger level="INFO" message="Request: #[payload]" /> <logger level="INFO" message="Service Request: #[payload]" /> <http:request config-ref="http-account-collateral-api-request" method="GET" path="acctCollaterals\acctCollateralRelKeys\(acctCollateralRelId)"> <http:headers><![CDATA[#[output application/java --- { "content-type" : "application/json" }]]]></http:headers> <http:query-params><![CDATA[#[output application/java --- { "limit" : attributes.queryParams.'limit', "cursor" : attributes.queryParams.'cursor' }]]]></http:query-params> <http:uri-params><![CDATA[#[output application/java --- { "acctCollateralRelId" : attributes.uriParams.'acctCollateralRelId' }]]]></http:uri-params> </http:request> <logger level="INFO" message="Service Response: #[payload]" /> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload resource="mappings/responses/acctcollaterals-acctcollateralrelkeys-acctcollateralrelid-responses-mapping.dwl" /> </ee:message> </ee:transform> <logger level="INFO" message="Response: #[payload]" /> <error-handler ref="private-errorhandler" /> </flow> </mule>
Maven POM依赖配置
<dependencies> <dependency> <groupId>org.mule.connectors</groupId> <artifactId>mule-sockets-connector</artifactId> <version>1.2.3</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>org.mule.modules</groupId> <artifactId>mule-tracing-module</artifactId> <version>1.0.0</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>org.mule.modules</groupId> <artifactId>mule-apikit-module</artifactId> <version>1.9.1</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>org.mule.connectors</groupId> <artifactId>mule-http-connector</artifactId> <version>1.8.0</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>com.mulesoft.modules</groupId> <artifactId>mule-secure-configuration-property-module</artifactId> <version>1.2.5</version> <classifier>mule-plugin</classifier> </dependency> <dependency> <groupId>com.mulesoft.munit</groupId> <artifactId>munit-runner</artifactId> <version>2.3.13</version> <classifier>mule-plugin</classifier> <scope>test</scope> </dependency> <dependency> <groupId>com.mulesoft.munit</groupId> <artifactId>munit-tools</artifactId> <version>2.3.13</version> <classifier>mule-plugin</classifier> <scope>test</scope> </dependency> <dependency> <groupId>org.mule.weave</groupId> <artifactId>assertions</artifactId> <version>1.0.2</version> <scope>test</scope> </dependency> </dependencies>
问题原因及解决方法
原因1:XML元素顺序不符合Schema定义
Mule HTTP Connector 1.x的XML Schema对<http:request>的子元素顺序有严格要求,<http:uri-params>必须放在<http:query-params>之前,否则会触发Schema校验错误。当前配置中<http:query-params>在<http:uri-params>前面,违反了顺序规则。
原因2:路径使用了错误的斜杠类型
Mule配置中路径应该使用正斜杠/,而不是反斜杠\,反斜杠会导致路径解析异常。
修正后的Flow配置
<?xml version="1.0" encoding="UTF-8"?> <mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:apikit="http://www.mulesoft.org/schema/mule/mule-apikit" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd http://www.mulesoft.org/schema/mule/mule-apikit http://www.mulesoft.org/schema/mule/mule-apikit/current/mule-apikit.xsd http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd"> <flow name="get:/acctCollaterals/acctCollateralRelKeys/(acctCollateralRelId):application/json:account-collateral-api-config"> <logger level="INFO" message="Request: #[payload]" /> <logger level="INFO" message="Service Request: #[payload]" /> <http:request config-ref="http-account-collateral-api-request" method="GET" path="acctCollaterals/acctCollateralRelKeys/(acctCollateralRelId)"> <http:headers><![CDATA[#[output application/java --- { "content-type" : "application/json" }]]]></http:headers> <!-- 调整uri-params到query-params之前 --> <http:uri-params><![CDATA[#[output application/java --- { "acctCollateralRelId" : attributes.uriParams.'acctCollateralRelId' }]]]></http:uri-params> <http:query-params><![CDATA[#[output application/java --- { "limit" : attributes.queryParams.'limit', "cursor" : attributes.queryParams.'cursor' }]]]></http:query-params> </http:request> <logger level="INFO" message="Service Response: #[payload]" /> <ee:transform doc:name="Transform Message"> <ee:message> <ee:set-payload resource="mappings/responses/acctcollaterals-acctcollateralrelkeys-acctcollateralrelid-responses-mapping.dwl" /> </ee:message> </ee:transform> <logger level="INFO" message="Response: #[payload]" /> <error-handler ref="private-errorhandler" /> </flow> </mule>
额外优化提示
路径中的(acctCollateralRelId)占位符可以直接自动绑定attributes.uriParams.'acctCollateralRelId',所以实际上可以省略<http:uri-params>配置,进一步简化代码:
<http:request config-ref="http-account-collateral-api-request" method="GET" path="acctCollaterals/acctCollateralRelKeys/(acctCollateralRelId)"> <http:headers><![CDATA[#[output application/java --- { "content-type" : "application/json" }]]]></http:headers> <http:query-params><![CDATA[#[output application/java --- { "limit" : attributes.queryParams.'limit', "cursor" : attributes.queryParams.'cursor' }]]]></http:query-params> </http:request>
内容的提问来源于stack exchange,提问作者user4122863
相关产品推荐
相关产品推荐

