2016-01-02 7 views
5

私はXSDに対してXMLを検証するために、このコードを使用しています:SAX XML Schema Validatorの検証メッセージで内部化を取得する方法は?

SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema"); 
Schema schema = factory.newSchema(xmlSchema); 
Validator validator = schema.newValidator(); 
Source source = new StreamSource(myXmlFile); 

try { 
    validator.validate(source); 
    return null; 
}catch (SAXException ex) { 
    String validationMessage = ex.getMessage(); 
    return validationMessage; 
} 

しかし、XMLが有効でない場合、メッセージは常にこのようなものです:

cvc-minLength-valid: Value '-' with length = '1' is not facet-valid with respect to minLength '2' for type '#AnonType_xLgrTEndereco'. 

は、方法はありますプログラムでメッセージを翻訳することなく、わかりやすいメッセージを自分の言語で返すことができますか?

UPDATE これは、メッセージが発生しているフィールドのXSD内のコードの一部です:あなたはそれが偶数フィールドの「名前」を返すように記述されている見ることができるように

<xs:element name="xLgr"> 
    <xs:annotation> 
     <xs:documentation>Logradouro</xs:documentation> 
    </xs:annotation> 
    <xs:simpleType> 
     <xs:restriction base="TString"> 
      <xs:maxLength value="60"/> 
      <xs:minLength value="2"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

(Logradouro)、スキーマ検証ツールはそれを認識していないようです。

+0

'string validationMessage = ex.getLocalizedMessage();'を使用するときに、好みの言語を取得していますか? –

+0

残念ながら、メッセージはまだ英語で、ユーザーフレンドリーではないフォーマット –

+0

も参考になります。 http://vijiprakash.blogspot.com/2008/05/custom-error-message-in-xml-xsd。 html – Musa

答えて

3

メッセージがわかりにくくなることは避けられません。このAPIは避けられませんが、APIは少なくともエラーの発生場所を指定する方法を提供します。あなたはより多くの無効を見つけるために、行9、列13を見て、あなたを言うだろう

9:13 cvc-minLength-valid: Value '-' with length = '1' is not facet-valid with respect to minLength '2' for type '#AnonType_xLgrTEndereco'. 

のようなものにあなたのメッセージを変更するには

return String.format("%d:%d %s",ex.getLineNumber(),ex.getColumnNumber(),ex.getMessage()); 

ような何かを行うことができます。

少なくとも、エラーがどこにあるかをメッセージで正確に指定することができます。

+0

さて、私に電話をしなくても、ユーザーが問題を理解できる方法を提供することはできません。しかし、とにかくありがとう、あなたのトラブルのためにこの恩恵を受ける。 –

関連する問題