2017-01-04 23 views
0

お客様は、監査を必要とするアプリケーションに取り組んでいます。これらの監査レコードは、Webページで表示できるものでなければなりません。そのために現在のデータを変更しています。 アプリケーションクラスAutowired Beanの候補が見つかりません

package my.company.app.audit; 

public class AuditApplication extends ResourceConfig { 
    public AuditApplication() { 
     register(AuditResource.class); 
    } 
} 

リソースクラス

をMavenのは、エラーなしでコードをコンパイルしますが、監査レコードを表示するには、Webページを呼び出すときに、私は

04-Jan-2017 15:22:25.133 WARNING [http-nio-7443-exec-7] org.glassfish.jersey.server.spring.AutowiredInjectResolver.getBeanFromSpringContext No qualifying bean of type 'my.company.app.audit.service.IAuditService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
04-Jan-2017 15:22:25.167 WARNING [http-nio-7443-exec-7] org.glassfish.jersey.internal.Errors.logErrors The following warnings have been detected: WARNING: Unknown HK2 failure detected: 
MultiException stack 1 of 3 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'my.company.app.audit.service.IAuditService' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

MultiException stack 2 of 3 
java.lang.IllegalArgumentException: While attempting to resolve the dependencies of my.company.app.audit.rest.resources.AuditResource errors were found 

MultiException stack 3 of 3 
java.lang.IllegalStateException: Unable to perform operation: resolve on my.company.app.audit.rest.resources.AuditResource 

次の例外を受け取ります

package my.company.app.audit.rest.resources; @Path(AUDIT_RESOURCE_LINK) @Produces({ MediaType.APPLICATION_JSON }) public class AuditResource extends AbstractResource { @Autowired private IAuditService auditService; // Commenting out this line results in the exception no longer popping up } 

Serviceクラス

package my.company.app.audit.service; 

import org.springframework.stereotype.Service; 

@Service 
public class AuditService implements IAuditService { 
} 

Auditアプリケーション固有の設定:監査-config.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/data/jpa 
    http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd"> 

    <context:annotation-config/> 

    <context:component-scan base-package="my.company.app.audit"/> 

    <jpa:repositories base-package="my.company.app.audit" transaction-manager-ref="txManager"/> 

    <aop:aspectj-autoproxy/> 

</beans> 

のweb.xml私は例として、似たモジュールを取っ

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> 

    <display-name>foo web_audit</display-name> 

    <!-- SESSION --> 
    <session-config> 
     <session-timeout>30</session-timeout> 
     <cookie-config> 
      <name>WEB_AUDIT</name> 
      <path>/</path> 
      <http-only>true</http-only> 
      <secure>true</secure> 
     </cookie-config> 
    </session-config> 

    <!-- SPRING --> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:applicationContext.xml, 
      classpath:foo-json-serialization-beans.xml, 
      classpath:foo-dao-jpa-beans.xml, 
      classpath:foo-dao-jpa-vendor-adapter-beans.xml, 
      classpath:spring/foo-jpa-services-common.xml, 
      classpath:audit-config.xml, 
      classpath:iam-config.xml 
     </param-value> 
    </context-param> 
    <listener> 
     <listener-class> 
      org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

    <!-- FILTER --> 
    <filter> 
     <filter-name>securityHeadersFilter</filter-name> 
     <filter-class>my.company.fooshared.web.filter.SecurityHeadersFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>securityHeadersFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <filter> 
     <filter-name>SSOFilter</filter-name> 
     <filter-class>my.company.fooshared.webaccess.filter.WebAccessFilter</filter-class> 
     <init-param> 
      <param-name>acsUrl</param-name> 
      <param-value>/acs</param-value> 
     </init-param> 
     <init-param> 
      <param-name>logoutUrl</param-name> 
      <param-value>/logout</param-value> 
     </init-param> 
     <init-param> 
      <param-name>authRequestUrl</param-name> 
      <param-value>/authRequest</param-value> 
     </init-param>  
     <init-param> 
      <param-name>spProviderId</param-name> 
      <param-value>screeningutility-ci.browse.companynet.sipn.company.com</param-value> 
     </init-param> 
     <init-param> 
      <param-name>idProviderSSOUrl</param-name> 
      <param-value>https://idp.companynet.sipn.company.com/idp/profile/SAML2/POST/SSO</param-value> 
     </init-param> 
     <init-param> 
      <param-name>cacertPath</param-name> 
      <param-value>/var/lib/tomcat/cacert/</param-value> 
     </init-param> 
     <init-param> 
      <param-name>keystoreFile</param-name> 
      <param-value>/var/lib/tomcat/jks/suchannel.jks</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>SSOFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <!-- JERSEY --> 
    <servlet> 
     <servlet-name>Jersey2Dispatcher</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>my.company.app.audit.AuditApplication</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey2Dispatcher</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

    <error-page> 
     <location>/error.html</location> 
    </error-page> 

</web-app> 

私のコードをビルドしてください。他のモジュールはうまく動作するので、何かが欠けているはずです... 提案は大歓迎です。

デフォルトのコンストラクタを追加してその中にブレークポイントを設定すると、AuditServiceクラスのコンストラクタが呼び出されないことがわかりました。

+0

@Serviceアノテーションがorg.springframework.stereotype.Serviceであることを確認してください。 – Michal

+0

@Michal:はい、あります。 –

+0

私はそれが原因だとは思わない。同じServletContainerクラスがプロジェクト全体で使用されます。 –

答えて

0

実装されたインターフェイスではなく、クラス自体をオートワイヤリングすることでこの問題が解決されました。私はなぜインターフェイスがうまくいかないのか説明していません。

編集

私はおそらく、問題の原因を発見しました。

コードを変更しながら、私はいくつかの新しいモジュールを実装しました。これらの新しいモジュールは、最初にコードを含むモジュールの子モジュールです。古い監査モジュールに頼っていた

Old situation:  New siuation: 
audit-module   audit-module 
|- src    |- persistence 
|- target    | |- src 
|- pom.xml   | |- target 
         | |- pom.xml 
         |- service 
         | |- src 
         | |- target 
         | |- pom.xml 
         |- web 
         | |- src 
         | |- target 
         | |- pom.xml 
         |- pom.xml 

しかし、他のモジュールが更新されていなかったので、新しいモジュールの親に参照のうえました。これはおそらく、AuditServiceクラスがSpringによって正しくロードされなかった原因です。

関連する問題