2017-09-07 19 views
0

私はTomcatサーバーに展開されたwarファイルを持っています。この戦争では、場所webcontent - > WEB-INF - > resources - > HumanActivitySchema.xsdにxsdファイルがあります。通常のJavaクラスからwebcontentフォルダ内のxsdファイルにアクセスする方法は?

入力XML構造を検証するためにスキーマをロードしようとしているJavaクラスがあります。このJavaクラスは、warファイルのデプロイメントの一部です。

私のJavaコードの機能は次のようになります。

public boolean validateXMLSchema(String iActivity){ 


    Source schemaFile = new StreamSource(getClass().getClassLoader() 
      .getResourceAsStream("HumanActivitySchema.xsd")); 

    try { 
     SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 
     Schema schema = factory.newSchema(schemaFile); 
     Validator validator = schema.newValidator(); 
     validator.validate(new StreamSource(new StringReader(iActivity))); 
    } 
    catch (IOException | SAXException e) { 
     if(DBG){ 
      System.out.println("Error Message while validating activity : " + e.getMessage()); 
     } 
     return false; 
    } 
    return true; 
} 

しかし、このコードの問題は、それがXSDファイルを見つけていない、です。したがって、schemaFileのすべてのフィールドはnullです。その結果、例外はfactory.newSchema(schemaFile)ポイントにスローされます。

誰かが私が間違っていることを教えてもらえますか、私は自分の.xsdファイルをロードできるように何をすべきですか?

答えて

1

は、次の2つの選択肢があります。

  1. は、WEB-INF/classesディレクトリに置くことで、クラスパス上のあなたのXSDを中に入れて、でそれをロードします(

    はgetClass()のgetClassLoader。 ) .getResourceAsStream( "/ HumanActivitySchema.xsd")

    上記のスラッシュ( '/')に注意してください。また、Javaクラスのパッケージ名と一致するフォルダに配置し、先行する '/'を省略することもできます。

  2. XSDをServletContext#getResourceAsStrem(String path)メソッドで読み取ります。あなたのケースでは、パスは、ソリューションの

    /HumanActivitySchema.xsd

+0

おかげでたくさんのだろう。私はあなたの第一の解決策を使用し、WEB-INF/classesディレクトリ内にxsdファイルを置いています。そしてそれは私のために働いた。どうもありがとう! :) – Madhusudan

関連する問題