2015-06-25 44 views
3

我用camel validator,我從架構驗證像捕捉錯誤:的架構驗證錯誤的自定義映射器

org.xml.sax.SAXParseException: cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type 

這是任何工具,這將是很好的這個錯誤的漂亮報表映射?我總是可以迭代錯誤,分割它們並準備自定義映射器,但是也許這比這更好? :)

回答

1

我已經通過驗證般地組件創建驗證使用XSD它的工作原理:)

public class SchemaErrorHandler implements Processor { 

    private final String STATUS_CODE = "6103"; 

    private final String SEVERITY_CODE = "2"; 

    @Override 
    public void process(Exchange exchange) throws Exception { 

     Map<String, Object> map = exchange.getProperties(); 
     String statusDesc = "Unknown exception"; 
     if (map != null) { 
      SchemaValidationException exception = (SchemaValidationException) map.get("CamelExceptionCaught"); 
      if (exception != null && !CollectionUtils.isEmpty(exception.getErrors())) { 
       StringBuffer buffer = new StringBuffer(); 
       for (SAXParseException e : exception.getErrors()) { 
        statusDesc = e.getMessage(); 
        buffer.append(statusDesc); 
       } 
       statusDesc = buffer.toString(); 
      } 
     } 
     Fault fault = new Fault(new Message(statusDesc, (ResourceBundle) null)); 
     fault.setDetail(ErrorUtils.createDetailSection(STATUS_CODE, statusDesc, exchange, SEVERITY_CODE)); 
     throw fault; 
    } 
} 
1

撒克遜非常擅長錯誤報告。它的驗證器首先給你可理解的信息。

+0

當然,但是如果您需要將此錯誤映射到其他混亂年齡?不幸的是,我必須這樣做,並準備自定義驗證錯誤,所以我想可能存在一些工具來做到這一點 –

1

這是一條SAX錯誤消息,看起來很清楚,但請參閱ErrorHandlerDefaultHandler來自定義它,但是您更喜歡。

<to uri="validator:xsd/myValidator.xsd"/> 

然後我用doCatch doTry塊內捕捉異常:

<doCatch> 
    <exception>org.apache.camel.ValidationException</exception> 
    <log message="catch exception ${body}" loggingLevel="ERROR" /> 
    <process ref="schemaErrorHandler"/> 
</doCatch> 

之後,我寫了自定義的駱駝處理器