0

標準の OpenCms WebDAV 構成では、CmsVfsResourceNotFoundExceptionWebDAV 経由でリソースにアクセスするときにエラーが発生する可能性があります。

これは非常に厄介です。なぜなら、任意のフォルダーの内容を一覧表示するたびに__properties、OpenCms はそのフォルダー内のファイルごとに 36 のスタックトレース ログラインをダンプするからです! デバッグ中に WebDAV ディレクトリを頻繁にスキャンする場合 (注 1 を参照)、これらのログによって作業が困難になります。(もちろん、ログ レベルを より高いレベルに変更することもできますINFOが、私には受け入れられません。)

この問題は簡単に再現できます。ブラウザで opencms-exported webdav パスをポイントし、任意のディレクトリをクリックします__properties

私は 2 つの回避策を見つけましたが、どれも満足していません。おそらく、より良い解決策がありますか?


ノート

1 NetBeans でいくつかの OpenCms モジュールをデバッグしています。それらのソースを OpenCms の WebDAV 経由でエクスポートし、Linux に としてマウントしますdavfs。それらを NetBeans プロジェクトに追加すると、このマウントされたファイル階層が自動的にスキャンされ、その結果、OpenCms が「凶暴」になり、貧弱なコンソールに無駄なトレースがあふれ始めます。NetBeans が定期的にこれらのディレクトリを再スキャンするため、さらに悪化します。

2考えられるすべてのファイルとディレクトリのプロパティを UTF-8 に設定content-encodingしても役に立ちません (スタックトレースはそれがないと主張しています)。


関連する環境と設定:

INFO OpenCms version      : 8.0.3
INFO System file.encoding : UTF-8
INFO i18n configuration   : the JVM default locale is "en"
INFO Initializing WebDAV servlet
INFO Initialized param "listings" with value "true"
INFO Initialized param "readonly" with value "false"
INFO Using repository with name "standard"

web.xml関連する設定:

<servlet>
    <description>
        Creates an access to OpenCms through WebDAV.
    </description>
    <servlet-name>OpenCmsWebDavServlet</servlet-name>
    <servlet-class>org.opencms.webdav.CmsWebdavServlet</servlet-class>
    <init-param>
      <param-name>listings</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>readonly</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>repository</param-name>
      <param-value>standard</param-value>
    </init-param>
</servlet>  

私のopencms-importexport.xml関連する設定:

<repositories>
    <repository name="standard" class="org.opencms.repository.CmsRepository">
        <params>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceExtensionWrapperJsp</param>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceExtensionWrapperXmlContent</param>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceExtensionWrapperXmlPage</param>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceWrapperSystemFolder</param>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceWrapperPropertyFile</param>
        </params>
        <filter type="include">
            <regex>/</regex>
            <regex>/__properties/.*</regex>
            <regex>/sites/.*</regex>
            <regex>/system/</regex>
            <regex>/system/__properties/.*</regex>
            <regex>/system/galleries/.*</regex>
            <regex>/system/modules/.*</regex>
            <regex>/system/workplace/.*</regex>
        </filter>
    </repository>

私のopencms-system.xml関連する設定:

<opencms>
  <system>
    <internationalization>
      <localehandler class="org.opencms.i18n.CmsDefaultLocaleHandler"/>
      <localesconfigured>
        <locale>en</locale>
        <locale>de</locale>
      </localesconfigured>
      <localesdefault>
        <locale>en</locale>
        <locale>de</locale>
      </localesdefault>
      <timezone>GMT+01:00</timezone>
    </internationalization>

スタックトレース:

01 Aug 2012 18:09:05,607  INFO [.opencms.i18n.CmsLocaleManager: 311] Could not read encoding property for resource "/sites/default/.content/config/__properties/c_0001.html.properties".
org.opencms.file.CmsVfsResourceNotFoundException: Error reading the property value for property "content-encoding" of resource "/.content/config/__properties/c_0001.html.properties".
    at org.opencms.file.CmsVfsResourceNotFoundException.createException(CmsVfsResourceNotFoundException.java:71)
    at org.opencms.db.CmsDbContext.throwException(CmsDbContext.java:334)
    at org.opencms.db.CmsDbContext.report(CmsDbContext.java:286)
    at org.opencms.db.CmsSecurityManager.readPropertyObject(CmsSecurityManager.java:4405)
    at org.opencms.file.CmsObject.readPropertyObject(CmsObject.java:2681)
    at org.opencms.i18n.CmsLocaleManager.getResourceEncoding(CmsLocaleManager.java:305)
    at org.opencms.file.wrapper.CmsObjectWrapper.needUtf8Marker(CmsObjectWrapper.java:871)
    at org.opencms.file.wrapper.CmsObjectWrapper.getResourcesInFolder(CmsObjectWrapper.java:382)
    at org.opencms.repository.CmsRepositorySession.list(CmsRepositorySession.java:268)
    at org.opencms.webdav.CmsWebdavServlet.renderHtml(CmsWebdavServlet.java:2480)
    at org.opencms.webdav.CmsWebdavServlet.serveResource(CmsWebdavServlet.java:2727)
    at org.opencms.webdav.CmsWebdavServlet.doGet(CmsWebdavServlet.java:1208)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at org.opencms.webdav.CmsWebdavServlet.service(CmsWebdavServlet.java:2893)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:662)
Caused by: org.opencms.file.CmsVfsResourceNotFoundException: Unable to read resource "/.content/config/__properties".
    at org.opencms.db.generic.CmsVfsDriver.readResource(CmsVfsDriver.java:2162)
    at org.opencms.db.CmsDriverManager.readResource(CmsDriverManager.java:7293)
    at org.opencms.db.CmsDriverManager.readPropertyObjects(CmsDriverManager.java:7110)
    at org.opencms.db.CmsDriverManager.readPropertyObject(CmsDriverManager.java:7043)
    at org.opencms.db.CmsSecurityManager.readPropertyObject(CmsSecurityManager.java:4403)
    ... 23 more
4

1 に答える 1

1

私は2つの回避策を見つけました:

フィルターの正規表現を編集して、'__properties' ディレクトリを除外します。

opencms-importexport.xml

   <repository name="webdavrep" class="org.opencms.repository.CmsRepository">
        <params><!-- don't change it --></params>
        <filter type="include">
            <regex>/</regex>
            <regex>/__properties/.*</regex>
            <regex>/sites/((?!__properties).)*</regex>
            <!-- instead of ...
            <regex>/sites/.*</regex>
            -->
            <!-- etc -->
        </filter>
   </repository>

web.xml( webdav リポジトリ名を変更するために を更新することを忘れないでください。)

リポジトリから「CmsResourceWrapperPropertyFile」を削除します。

opencms-importexport.xml

   <repository name="webdavrep" class="org.opencms.repository.CmsRepository">
        <params>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceExtensionWrapperJsp</param>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceExtensionWrapperXmlContent</param>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceExtensionWrapperXmlPage</param>
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceWrapperSystemFolder</param>
            <!-- Do not publish properties ...
            <param name="wrapper">org.opencms.file.wrapper.CmsResourceWrapperPropertyFile</param>
            -->
        </params>
        <filter type="include"><!-- don't change it --></filter>

web.xml(繰り返しますが、webdav リポジトリ名を変更するために更新することを忘れないでください。)

于 2012-08-01T19:16:29.230 に答える