legacy-knowledge-base
公開されました Sep. 10, 2025

Liferay DXP および Tomcat で resteasy-jaxrs 依存関係を操作する際の問題

written-by

Alfonso Crisci

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • Liferay DXP プロジェクトに RESTeasy JAX RS 依存関係を統合しているときに、サーバー ログに以下のメッセージが表示される場合があります。

    SEVERE [fileinstall-/home/liferay.com/7.0/osgi/war] org.apache.catalina.core.ApplicationContext.log Patterns, regex or servletNames must contain a value.
    java.lang.IllegalArgumentException: Patterns, regex or servletNames must contain a value.
    at org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddFilterRegistration(ContextController.java:245)
    [...]
    または:

    SEVERE [fileinstall-/liferay-portal-7.2.10-ga1/osgi/war] org.apache.catalina.core.ApplicationContext.log Invalid pattern ''
     java.lang.IllegalArgumentException: Invalid pattern ''
    	at org.eclipse.equinox.http.servlet.internal.context.ContextController.checkPattern(ContextController.java:987)
    	at org.eclipse.equinox.http.servlet.internal.context.ContextController.doAddFilterRegistration(ContextController.java:244)
    	at org.eclipse.equinox.http.servlet.internal.context.ContextController.addFilterRegistration(ContextController.java:179)
    	at org.eclipse.equinox.http.servlet.internal.customizer.ContextFilterTrackerCustomizer.addingService(ContextFilterTrackerCustomizer.java:55)
    	at org.eclipse.equinox.http.servlet.internal.customizer.ContextFilterTrackerCustomizer.addingService(ContextFilterTrackerCustomizer.java:1)
    	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943)
    	at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
    	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
    	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
    	at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:903)
    	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109)
    	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:891)
    	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:804)
    	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127)
    	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:228)
    	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:469)
    	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:487)
    	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:1004)
    	at com.liferay.portal.osgi.web.wab.extender.internal.WabBundleProcessor.initFilters(WabBundleProcessor.java:525)
    	at com.liferay.portal.osgi.web.wab.extender.internal.WabBundleProcessor.init(WabBundleProcessor.java:220)
    	at com.liferay.portal.osgi.web.wab.extender.internal.WebBundleDeployer._initWabBundle(WebBundleDeployer.java:179)
    	at com.liferay.portal.osgi.web.wab.extender.internal.WebBundleDeployer.doStart(WebBundleDeployer.java:101)
    	at com.liferay.portal.osgi.web.wab.extender.internal.WabFactory$WABExtension.start(WabFactory.java:114)
    	at com.liferay.portal.osgi.web.wab.extender.internal.WabFactory.addingBundle(WabFactory.java:67)
    	at com.liferay.portal.osgi.web.wab.extender.internal.WabFactory.addingBundle(WabFactory.java:49)
    	at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:475)
    	at org.osgi.util.tracker.BundleTracker$Tracked.customizerAdding(BundleTracker.java:1)
    	at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
    	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
    	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450)
    	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:908)
    	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
    	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
    	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:230)
    	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:137)
    	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:129)
    	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:191)
    	at org.eclipse.osgi.container.Module.publishEvent(Module.java:476)
    	at org.eclipse.osgi.container.Module.doStart(Module.java:578)
    	at org.eclipse.osgi.container.Module.start(Module.java:449)
    	at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:428)
    	at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundle(DirectoryWatcher.java:1264)
    	at org.apache.felix.fileinstall.internal.DirectoryWatcher.startBundles(DirectoryWatcher.java:1237)
    	at org.apache.felix.fileinstall.internal.DirectoryWatcher.doProcess(DirectoryWatcher.java:520)
    	at org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:365)
    	at org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:316)
    メッセージにもかかわらず、ポートレットはシームレスに動作します。

Environment

  • Liferay DXP 7.0+

解決策

  • ロギング メッセージを処理するために考えられる 1 つの方法は、 Filter30Dispatcher クラスをオーバーライドして、 RESTEasyで動作するカスタム フィルターを開発することです。

追加情報

  • これらのケースでは、フィルタ宣言が仕様を満たしていないため、Liferay はポータル側でそれを回避できません。これは、フィルタを受け入れる/コードを維持するためのコードの変更が OSGI および/または Tomcat 固有のトピックであるためです。

    1. Java Servlet Specification、特に第 8 章を見ると、注釈に関する多くの情報が表示されます。

    Web アプリケーションでは、アノテーションを使用するクラスは、それらが WEB-INF/classes ディレクトリにある場合、またはアプリケーション内の WEB-INF/lib にある jar ファイルにパッケージ化されている場合にのみ、アノテーションが処理されます。

    2. WEB-INF/lib 内には、 resteasy-jaxrs.jarがあります。 これは、処理されてエラーをスローしているjarです

    3. jar の中には、 Filter30Dispatcher.classというファイルがあります。 このクラスには、次の注釈があります。
    @WebFilter(
    asyncSupported = true
    )
    4. 仕様のセクション 8.1.2 から:

    この注釈は、Web アプリケーションでフィルターを定義するために使用されます。 この注釈はクラスで指定され、宣言されているフィルターに関するメタデータを含みます。 指定されていない場合のフィルタのデフォルト名は、完全修飾クラス名です。 注釈の urlPatterns 属性、servletNames 属性、または value 属性を指定する必要があります。

    urlPatternsservletNames、値は Filter30DispatcherWebFilter アノテーション内で指定する必要があります。

    さらに、Tomcat の ContextConfig.java クラスを調べると、Tomcat 、これらの値がすべて欠落している場合、フィルターを処理しません。 代わりに、単にそれを無視して先に進みます。 これは、これが Liferay のバグではなく、フィルターの指定方法に問題があるという結論を裏付けています。

did-this-article-resolve-your-issue

legacy-knowledge-base