2016-04-20 15 views
1

フィルタを使用してスキーマを検証しようとしています。問題は、親の.xsd内のタグに記述されている従属.xsdを見つけることができないことです。 私はresourceResolver-refも使用しましたが、同じ問題に直面しています。ここにサンプル構成ファイルとクラスファイルがあります。私はここで混乱していますタグを持つ.xsd(スキーマ)をスキーマバリデータを使用して検証する方法

<mulexml:schema-validation-filter schemaLocations="${app.home}/sample.xsd" returnResult="false" ref="classpathResourceResolver" name="sample_schema_Validation" doc:name="Schema Validation" /> 

package org.test.util; 
import java.io.IOException; 
import java.io.InputStream; 
import org.apache.xerces.dom.DOMInputImpl; 
import org.mule.util.IOUtils; 
import org.w3c.dom.ls.LSInput; 
import org.w3c.dom.ls.LSResourceResolver; 

public class ClasspathResourceResolver implements LSResourceResolver { 

@Override 
public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) { 

    try { 
     InputStream resource = IOUtils.getResourceAsStream(systemId, getClass()); 
     return new DOMInputImpl(publicId, systemId, baseURI, resource, null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 
} 

は、どのように私は私の外部リソース(依存XSD)をロードするための参照を渡すことができますか? 親切に手伝ってください!

答えて

0

sample.xsdsrc/main/resourcesですか?

これを試してみてください:schemaLocations="${app.home}/classes/sample.xsd"

0

解決策を説明する例を示します。 common/math.xsdを含む一連の他のものをインポートするMathml2.xsdに対して検証しようとしているとします。ここで

@Override 
public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) { 
    try { 
     String path = systemId; 
     if (baseURI != null) 
      path = URI.create(baseURI).resolve(systemId); 
     InputStream resource = IOUtils.getResourceAsStream(path, getClass()); 
     return new DOMInputImpl(publicId, systemId, baseURI, resource, null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

キーがリソースからインポートステートメントを解決するとき、baseURIは、そのリソースの場所であり、systemId(通常は相対的)のschemaLocationであることです。

免責事項:簡潔にするために、私がnullチェックをスキップ(システムIDは、私が遭遇したいくつかのまれなケースではnullにすることができます)とIOUtils.getResourceAsStreamを仮定は、(ラバパッケージからそれを使ったことがない)に応じてリソースを取得します。コードはそのままでは機能しないかもしれませんが、それはあなたにアイデアを与えるはずです。

関連する問題