お客様は、監査を必要とするアプリケーションに取り組んでいます。これらの監査レコードは、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クラスのコンストラクタが呼び出されないことがわかりました。
@Serviceアノテーションがorg.springframework.stereotype.Serviceであることを確認してください。 – Michal
@Michal:はい、あります。 –
私はそれが原因だとは思わない。同じServletContainerクラスがプロジェクト全体で使用されます。 –