ここで何が問題になっていますか?
The ResourceConfig instance does not contain any root resource classes.
Dec 10, 2010 10:21:24 AM com.Sun.jersey.spi.spring.container.servlet.SpringServlet initiate
SEVERE: Exception occurred when intialization
com.Sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
at com.Sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.Java:103)
at com.Sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.Java:1182)
at com.Sun.jersey.server.impl.application.WebApplicationImpl.access$600(WebApplicationImpl.Java:161)
at com.Sun.jersey.server.impl.application.WebApplicationImpl$12.f(WebApplicationImpl.Java:698)
at com.Sun.jersey.server.impl.application.WebApplicationImpl$12.f(WebApplicationImpl.Java:695)
at com.Sun.jersey.spi.inject.Errors.processWithErrors(Errors.Java:197)
at com.Sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.Java:695)
at com.Sun.jersey.spi.spring.container.servlet.SpringServlet.initiate(SpringServlet.Java:117)
フィルタ:
<filter>
<filter-name>JerseyFilter</filter-name>
<filter-class>com.Sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class>
<init-param>
<param-name>com.Sun.jersey.config.feature.Redirect</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.Sun.jersey.config.property.JSPTemplatesBasePath</param-name>
<param-value>/views/</param-value>
</init-param>
<init-param>
<param-name>com.Sun.jersey.config.property.WebPageContentRegex</param-name>
<param-value>/(images|css|jsp)/.*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>JerseyFilter</filter-name>
<url-pattern>/myresource/*</url-pattern>
</filter-mapping>
コード:
@Path ("/admin")
public class AdminUiResource {
@GET
@Produces ("text/html")
@Path ("/singup")
public Viewable getSignUp () {
return new Viewable("/public/signup", "Test");
}
}
基本的に私は以下のようにそれを修正し、すべてがうまくいきました。
<servlet>
<servlet-name >MyWebApplication</servlet-name>
<servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.Sun.jersey.config.feature.Redirect</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.Sun.jersey.config.property.JSPTemplatesBasePath</param-name>
<param-value>/views/</param-value>
</init-param>
<init-param>
<param-name>com.Sun.jersey.config.property.WebPageContentRegex</param-name>
<param-value>/(images|css|jsp)/.*</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>MyWebApplication</servlet-name>
<url-pattern>/myapp/*</url-pattern>
</servlet-mapping>
追加してみましたか
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>my.package.name</param-value>
</init-param>
springServletの定義に?明らかに、my.package.nameをAdminUiResourceが含まれているパッケージに置き換えて、クラスパスにあることを確認してください。
私はジャージーを初めて使いました。同じ問題がありましたが、「/」を削除して@path( "admin")を使用しただけで機能しました。
@Path("admin")
public class AdminUiResource { ... }
つまり、ジャージRESTful Webサービスとして実行できるクラスが見つかりませんでした。
小切手:
com.Sun.jersey.config.property.packages
'がweb.xmlにないかどうか。com.Sun.jersey.config.property.packages
'パラメーターの値が欠落しているか無効であるか(言及されたパッケージが存在しない)。これは、ジャージサービスとして実行されるPOJOクラスを配置したパッケージである必要があります。@Path
属性のアノテーションが付けられたメソッドを持つPOJOクラスが少なくとも1つ存在するかどうか。でパッケージ名を追加する必要があります
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>your.package.name</param-value>
</init-param>
また、私が気づいた1つのこと、
MAVEN BUILDの後にプロジェクトを更新する必要があります。それ以外の場合は、同じエラーが表示されます。
プロジェクトを更新する必要がある理由を知っている場合はコメントしてください。
リソースパッケージには、@ Pathアノテーションが付いているか、@ Pathまたは@ GET、@ PUT、@ POST、@ DELETEなどのリクエストメソッド指定子がアノテーションされているメソッドを少なくとも1つ持つ少なくとも1つのpojoを含める必要があります。リソースメソッドは、要求メソッド指定子で注釈が付けられたリソースクラスのメソッドです。これで問題が解決しました。
JBOSS EAP 6.1でこの問題に遭遇しました。 Eclipseを介してJBOSSサーバーにコードをデプロイできましたが、ファイルをWARファイルとしてJBOSSにデプロイしようとすると、このエラーが発生し始めました。
ソリューションは、web.xmlがJBOSSで適切に機能するように設定することで、2つを連携させることでした。
次の2行はweb.xmlでコメントアウトされており、JBOSSが独自の設定を行えるようになっています。
<!--
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>com.your.package</param-value>
</init-param> -->
そして、次のコンテキストパラメータを追加します
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.providers</param-name>
<param-value>false</param-value>
</context-param>
Web.xmlにResourseConfigがないため、この例外が発生しています。
追加:
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>/* Name of Package where your service class exists */</param-value>
</init-param>
サービスクラスとは、次のようなサービスを含むクラスを意味します。@Path("/orders")
Eclipseプロジェクトからwebappを実行しようとすると、同じ問題が発生しました。 .classファイルを/WEB-INF/classes
にコピーするとすぐに完全に機能しました。
私は同じ問題を抱えて、多くの異なる例をテストし、可能な解決策をすべて試しました。最終的にそれが機能したのは、クラス行に@Path("")
を追加したときでした。
同じ問題があり、それがソースコードのデプロイ方法に問題があることがわかりました。エラーメッセージが示すように:"...does not contain any root resource classes"
。そのため、構成済みパッケージにリソースクラスが見つかりませんでした。私はクラスを間違ってデプロイしました-それがそれを拾わなかった理由です。
クラスファイルをWARの/ WEB-INF/classesディレクトリにデプロイするのを忘れていました。最初は、WARファイルのルートに直接配置していました。そのため、リソースクラスを検索しても、それらは見つかりませんでした-それらは別の(間違った)場所に存在していたからです。
同じ問題-web.xmlは次のようになりました。
<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.mystuff.web.JerseyApplication</param-value>
</init-param>
...
カスタムアプリケーションを提供すると、XMLで設定されたクラスの自動検出がオーバーライドされます。適切なメソッドを実装して、独自のコードを記述してクラスを結び付ける必要があります。 javadocsを参照してください。
このエラーの別の考えられる原因は、ビルドパスに既に/WEBINF/lib
フォルダーにあるライブラリを追加するのを忘れたことです(たとえば、.war
-ファイルをインポートし、求められたときにライブラリをチェックしない場合)魔法使い)。ちょうど私に起こった。
Main.jarをデプロイしたときに、Eclipseのexport jarメニューのadd directory entriesボックスをチェックせずに起こりました。
もう1つ確認するのは、以前のエントリの組み合わせです
Web.xmlファイルに以下を含めることができます。
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>com.acme.rest</param-value>
</init-param>
そしてあなたは持つことができます
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.providers</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>resteasy.scan.resources</param-name>
<param-value>false</param-value>
</context-param>
しかし、両方を持つことはできません。または、この種のエラーが発生します。この場合の修正は、どちらか一方をコメントアウトすることです(おそらく最初のコードスニペットはコメントアウトされるでしょう)
わかりました...私にとっては、「servlet-class」をcom.sum.jersey.spi.container.servlet.ServletContainerに割り当てるだけでうまく動作します。私はIDE(Eclipse Mars)を使用しています。
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.Sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/frontend/*</url-pattern>
</servlet-mapping>
しかし、何らかの理由で、ローカルホストで作業するためにコンピューターを再起動する必要がありました。それでも動作しない場合は? 「servlet」タグの間にこのコードをweb.xmlに追加する必要があります。
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>the.package.name</param-value>
</init-param>
「the.package.name」は、クラスがあるパッケージ名です。 IDEを使用している場合は、プロジェクトを更新し、Tomcatで再度実行します。それでも動作しませんか?コンピューターを再起動すると動作します。
@pathの最後にスラッシュを追加する必要がありました
@Path ("/admin/")
まあ、返信が少し遅れています。私は同じ問題に直面しました、そして、私のGoogle検索は無駄でした。しかし、何が問題なのかを見つけることができました。このエラーが発生する理由はたくさんありますが、次の理由でエラーが発生しました。これを仲間の開発者と共有したいと思いました。
また、この種のエラーが発生しました。xmlの構成に注意してください。
com.Sun.jersey.comfig.property.packages
を書きました
com.Sun.jersey.config.property.packages
の代わりに
修正後は機能しています。
おそらく手遅れですが、これが私がこのエラーを解決する方法です。
このソリューションが機能しない場合、
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>/* Name of Package where your service class exists */</param-value>
</init-param>
Eclipseの場合:
右クリックプロジェクトで選択するか、プロジェクトを選択して押しますAlt + Enter開いたウィンドウの左側でJavaビルドパス
右側のタブパネルからライブラリを選択します。破損しているものやjarの上に十字マークが表示されているものがある場合は、同じjarを削除して再度追加します
適用して閉じる
プロジェクトを再構築する
その問題は、ジャージが宣言された残りのサービスの依存関係パッケージを見つけることができないためです
プロジェクトパッケージの配布を確認し、web.xmlのパラメーター値と等しいことをアサートします
はい、com.Sun.jersey.config.property.packagesのinitパラメーターを追加すると、この問題が修正されました。
ジャージーレストサービスをMavenベースのSpringアプリケーションにマージしていたときにこのエラーが発生しました。
私の場合、戦争からインポートした後、ビルドパスにjarを2回追加しました。エラーデプロイメント記述子のエラーページを表示していた余分なjarを削除した後、正常に機能しました
追加
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>service.package.name</param-value>
</init-param>
また、さまざまな理由で2回、この問題に遭遇しました。最初に含めるのを忘れたとき
<init-param>
<param-name>com.Sun.jersey.config.property.packages</param-name>
<param-value>my.package.name</param-value>
</init-param>
前のコメントで説明したように、私がそれを行うと、機能し始めました。
それでも...別の日、私はEclipseを開始し、中断したところから続けることを期待し、プログラムを動作させる代わりに、まったく同じエラーをもう一度示しました。誤っていくつかの変更を加えて破損したファイルを保存したかどうかをチェックし始めましたが、そのようなエラーは見つからず、ファイルはすべて私が持っている例とまったく同じように見えました。前日は動作していたので、最初の検索の後、Eclipse、またはTomcatの不具合などだと思ったので、変更を加えて反応するかどうかを見てみましょう。そのため、web.xmlファイルにスペースとバックスペースを追加しました。ファイルが変更されたことをEclipseをだまして、それを保存しました。次のステップは、Tomcatサーバーを(Eclipse IDEから)再起動することでした。
より幅広い経験を持つ誰かが、このすべての背後にある問題が実際に何であったかを説明できるでしょうか?