質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Guice

Guiceは、Javaで開発されたDIフレームワーク。アノテーションを用いたJavaオブジェクトへの依存性の注入をサポートします。独自のファクトリーを作成する必要なないためテストが容易になり、プログラムのモジュール性を高めることが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

2623閲覧

Struts2 2.5内でgoogle guiceが動作しない

退会済みユーザー

退会済みユーザー

総合スコア0

Guice

Guiceは、Javaで開発されたDIフレームワーク。アノテーションを用いたJavaオブジェクトへの依存性の注入をサポートします。独自のファクトリーを作成する必要なないためテストが容易になり、プログラムのモジュール性を高めることが可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2020/10/27 10:38

概要

Struts2 2.3を使用して、Webアプリケーションを運用しています。
2.3がEOLを迎えているため、2.5へバージョンアップを行うこととなりました。

2.3使用時からいくつかのプラグインを導入しており、その内、google guiceに関して手詰まりになってしまったため、質問いたします。

google guice使用にあたり、以下のライブラリが2.3導入当時から使用されていました。
guice-2.0
guice-servlet-2.0
guice-struts2-plugin-2.0
https://repo1.maven.org/maven2/com/google/inject/extensions/

この内、struts2バージョンアップに伴って連携を行っているguice-struts2-plugin-2.0.jarが機能しなくなってしまったと考えています。

発生している問題

tomcat起動時以下のメッセージが表示されます。
10 27, 2020 9:06:30 午前 com.google.inject.struts2.GuiceObjectFactory createInjector
情報: Creating injector...
10 27, 2020 9:06:31 午前 com.google.inject.struts2.GuiceObjectFactory$1 configure
情報: No module found. Set 'guice.module' to a Module class name if you'd like to use one.
10 27, 2020 9:06:31 午前 com.google.inject.struts2.GuiceObjectFactory createInjector
情報: Injector created successfully.
10 27, 2020 9:06:37 午前 org.apache.coyote.AbstractProtocol start
情報: プロトコルハンドラー ["http-bio-8080"] を開始しました。
10 27, 2020 9:06:37 午前 org.apache.catalina.startup.Catalina start
情報: Server startup in 39262 ms

guice-struts2-plugin-2.0.jar内のGuiceObjectFactory.classを確認したところ、Creating injector...やInjector created successfully.のメッセージは文字通りInjectorがnullの場合に出力しているようです。

メッセージ自体はinfoレベルなのですが、実際にアクセスすると以下のエラーメッセージでダウンしてしまいます。

2020/10/27 19:24:11:284 ERROR org.apache.struts2.dispatcher.DefaultDispatcherErrorHandler (87) Exception occurred during processing request: null
java.lang.NullPointerException: null
at com.google.inject.struts2.GuiceObjectFactory$ProvidedInterceptor.intercept(GuiceObjectFactory.java:224) ~[guice-struts2-plugin-2.0.jar:?]
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) ~[struts2-core-2.5.22.jar:2.5.22]
at org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:48) ~[struts2-core-2.5.22.jar:2.5.22]
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:574) [struts2-core-2.5.22.jar:2.5.22]
at org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79) [struts2-core-2.5.22.jar:2.5.22]
at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:141) [struts2-core-2.5.22.jar:2.5.22]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.104]

該当のソースコード

struts.xml、web.xmlに対しては前バージョン(2.3.32)使用時から以下のような記述をしており、変更はしていません。

struts.xml

xml

1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" 4 "http://struts.apache.org/dtds/struts-2.5.dtd"> 5 6<struts> 7 <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 8 <constant name="struts.devMode" value="false" /> 9 <constant name="struts.ui.theme" value="simple" /> 10 <constant name="struts.action.extension" value="do,action,json" /> 11 <constant name="struts.custom.i18n.resources" value="constant,message" /> 12 <constant name="struts.appVersion" value="X.X.X" /> 13 14 <package name="default" namespace="/" extends="struts-default"> 15 ----省略---- 16 </package> 17 18 <include file="webapi.xml" /> 19</struts>

web.xml

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 5 6 <display-name>Struts Blank</display-name> 7 <distributable /> 8 9 <filter> 10 <filter-name>struts2</filter-name> 11 <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> 12 </filter> 13 <listener> 14 <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> 15 </listener> 16 17 <filter-mapping> 18 <filter-name>struts2</filter-name> 19 <url-pattern>/*</url-pattern> 20 <dispatcher>REQUEST</dispatcher> 21 <dispatcher>FORWARD</dispatcher> 22 </filter-mapping> 23 24 <welcome-file-list> 25 <welcome-file>index.jsp</welcome-file> 26 </welcome-file-list> 27 28 <servlet> 29 <servlet-name>MayaaServlet</servlet-name> 30 <servlet-class>org.seasar.mayaa.impl.MayaaServlet</servlet-class> 31 <load-on-startup>1</load-on-startup> 32 </servlet> 33 34 <servlet-mapping> 35 <servlet-name>MayaaServlet</servlet-name> 36 <url-pattern>*.html</url-pattern> 37 </servlet-mapping> 38</web-app> 39

確認したこと

①struts2.5とgoogle guiceの適合性について調べましたが、有力な情報が得られていない状況です。

②2.5へのバージョンアップに伴ってstruts2内で一部パッケージ移動が発生していますが、guice-struts2-plugin内に対象パッケージをインポートしている箇所はないため、影響はないと考えています。

補足情報

■開発環境OS
Windows10

■使用IDE
eclipse oxygen

■JDK
jdk8u262-b10

■tomcat
7.0.104

■主な使用ライブラリ
struts 2.5.22
guice-2.0
guice-servlet-2.0
guice-struts2-plugin-2.0

ご教示の程よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

自己解決に至りましたので終了といたします。

guice2.0のまま対応策を探ることにも限界を感じたので、4.2.3へバージョンアップを実施しました。
バージョンアップ後エラーメッセージが変わり、リスナーの定義を求められるようになったので、以下のリスナーを作成しました。

リスナーの作成は以下サイトを参考にしています。
https://www.programmersought.com/article/78392106545/

package jp.co.hoge.listener; import javax.inject.Singleton; import org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.servlet.GuiceServletContextListener; import com.google.inject.servlet.ServletModule; import com.google.inject.struts2.Struts2GuicePluginModule; public class GuiceListener extends GuiceServletContextListener { public Injector getInjector() { return Guice.createInjector(new Struts2GuicePluginModule(), new ServletModule() { protected void configureServlets() { bind(StrutsPrepareAndExecuteFilter.class).in(Singleton.class); filter("/*").through(StrutsPrepareAndExecuteFilter.class); } }); } }

guiceをアップデートするために導入したライブラリは以下です。
guice以外は依存ライブラリになります。
・guice-4.2.3.jar
・guice-servlet-4.2.3.jar
・guice-struts2-4.2.3.jar
・jailureaccess-1.0.jar
・guava-27.1-jre.jar
・javax.inject-1.jar

以上の対応を行うことでgoogle guiceに関するエラーはなくなりました。
影響が少ない場合はstruts2.5を機にguiceを使用しない方針にした方が負担は少ないと感じました。

投稿2020/10/30 02:34

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問