2017-06-13 3 views
0

でXML文字列を検証しながら、私は、XSDスキーマを使用してXMLを検証しようとしているが、検証の際には、java.net.MalformedURLException:なしプロトコルXSDスキーマ

java.net.MalformedURLExceptionスロー:なしプロトコルを:私が間違って起こっているこれまでのところで、

 public boolean ValidateXML(String xmlContent) throws Exception { 
     try 
     { 
      SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
      Schema schema = factory.newSchema(getClass().getClassLoader().getResource("ABC/XYX/PQR.xsd")); 
      Validator validator = schema.newValidator(); 
      validator.validate(new StreamSource(xmlContent)); 
}... 

を行っている何

、それが例外をスローして、この手順をvalidator.validate、私はここでエンコードされた文字列を提供する必要がありますか?

私はファイルでそれを行う場合、私は、ファイルからxmlContentを意味し、

validator.validate(new StreamSource(new File(filePath))); 

、それが正常に動作しています。 私は

答えて

0

ファイルからではなく、文字列オブジェクトからXMLコンテンツがStreamResourceにあなたの文字列を変換したくない:

validator.validate(new StreamSource(new ByteArrayInputStream(xmlContent.getBytes(StandardCharsets.UTF_8)))); 
+0

はい、それは、感謝を働きました。エンコードする必要があります。Stringはそれを処理しません。 – tyro

+0

問題はエンコーディングではなく、StreamResourceコンストラクターで間違った型です。 String引数を指定してStreamResourceコンストラクタを呼び出すと、この文字列をURLとして解析しようとします。ドキュメントにそれを参照してください: https://docs.oracle.com/javase/7/docs/api/javax/xml/transform/stream/StreamSource.html#StreamSource(java.lang.String) 私の提案コールをInputStream引数を持つStreamResourceコンストラクタを作成し、それを行うためにxmlContent文字列をInputStreamでラップしました。 –

+0

削除しました – tyro

関連する問題