gpt4 book ai didi

java - mule:xml 模式验证过滤器,其中未执行自定义错误处理程序

转载 作者:数据小太阳 更新时间:2023-10-29 02:44:59 26 4
gpt4 key购买 nike

我在流程的处理器链中使用模式验证过滤器,我想设置一个自定义错误处理程序,以便我可以保存无效的 XML 行,但问题是我的 “schemaErrorHandler” 永远不会执行。

注意:我的自定义资源解析器,其配置方式与下图类似,完全没有问题。

我已经尝试从消息过滤器中包装模式验证过滤器并从中删除 throwOnUnaccepted="true" 属性,但是 schemaErrorHandler 是从未执行过。

这是一个错误还是我遗漏了什么?都没有找到与此相关的 JIRA。

xml

    <processor-chain>
<message-filter onUnaccepted="TextValidator">
<mxml:is-xml-filter />
</message-filter>
<message-filter throwOnUnaccepted="true">
<mxml:schema-validation-filter errorHandler-ref="schemaErrorHandler" resourceResolver-ref="schemaResourceResolver" schemaLocations="mySchema.xsd"/>
</message-filter>
</processor-chain>

<spring:bean id="schemaResourceResolver" name="schemaResourceResolver" class="my.app.SchemaResourceResolver"/>
<spring:bean id="schemaErrorHandler" name="schemaErrorHandler" class="my.app.SchemaErrorHandler"/>

SchemaErrorHandler.java

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

public class SchemaErrorHandler implements ErrorHandler {

private List<Object> allErrors = new ArrayList<>();

public List<Object> getAllErrors() {
return allErrors;
}

public void setAllErrors(List<Object> allErrors) {
this.allErrors = allErrors;
}

@Override
public void error(SAXParseException arg0) throws SAXException {
System.out.println(arg0.getMessage());
allErrors.add(arg0);

}

@Override
public void fatalError(SAXParseException arg0) throws SAXException {
System.out.println(arg0.getMessage());
allErrors.add(arg0);
}

@Override
public void warning(SAXParseException arg0) throws SAXException {
System.out.println(arg0.getMessage());
allErrors.add(arg0);
}

}

最佳答案

要使流程正常运行,您需要使用不同的方法。附加示例 xml

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml"
xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:file="http://www.mulesoft.org/schema/mule/file"
xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.4.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd">
<spring:beans>
<spring:bean id="schemaErrorHandler" name="schemaErrorHandler"
class="SchemaErrorHandler" />
</spring:beans>

<flow name="xml_schemaFlow1" doc:name="xml_schemaFlow1">
<file:inbound-endpoint path="/home/anil/deleteme/xsd/file"
responseTimeout="10000" doc:name="File" />



<message-filter name="asdf" onUnaccepted="invalidRelationXmlFlow"
doc:name="Message">
<mulexml:schema-validation-filter
schemaLocations="/home/anil/deleteme/xsd/xsd/abc.xsd"
errorHandler-ref="schemaErrorHandler" returnResult="true"
doc:name="Schema Validation">
</mulexml:schema-validation-filter>
</message-filter>



<echo-component doc:name="Echo" />
</flow>

<flow name="invalidRelationXmlFlow" doc:name="invalidRelationXmlFlow">
<logger level="INFO" doc:name="Logger" message="hello"/>

</flow>

这会在 mule 中给你一个警告,但确实有效。美好的。如果文件验证失败,将调用 invalidRelationXmlFlow。

关于java - mule:xml 模式验证过滤器,其中未执行自定义错误处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26514076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com