2

sportsdata を取得するには、Web サービス クライアントを作成する必要があります。しかし、しようとすると例外が発生し@Autowired sportsdataます。

例外:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [de.openligadb.schema.SportsdataSoap] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

JavaConfig :

@Configuration
@ComponentScan(basePackages = "com.example", excludeFilters = { @Filter(Configuration.class) })
public class MainConfig {
    private @Value("${openligadb.wsdlDocumentUrl}") String wsdlDocumentUrl;
    private @Value("${openligadb.endpointAddress}") String endpointAddress;
    private @Value("${openligadb.namespaceUri}") String namespaceUri;
    private @Value("${openligadb.serviceName}") String serviceName;

    @Bean
    public JaxWsPortProxyFactoryBean sportsdata() throws MalformedURLException {
        JaxWsPortProxyFactoryBean ret = new JaxWsPortProxyFactoryBean();
        ret.setWsdlDocumentUrl(new URL(wsdlDocumentUrl));
        ret.setServiceInterface(SportsdataSoap.class);
        ret.setEndpointAddress(endpointAddress);
        ret.setNamespaceUri(namespaceUri);
        ret.setServiceName(serviceName);
        return ret;
    }

    @Bean
    public static PropertySourcesPlaceholderConfigurer properties() {
        PropertySourcesPlaceholderConfigurer ret = new PropertySourcesPlaceholderConfigurer();
        ret.setLocation(new ClassPathResource("application.properties"));
        return ret;
    }
}

そして、はい:知って@PropertySourceいますが、後でコントローラーでも使用できるように、Bean を作成する必要があります。

4

1 に答える 1

4

とのFactoryBean相互運用性の問題@Configurationです。詳細については、この回答をご覧ください。

短いバージョンは、Bean を構成に明示的に追加することです。

@Bean
public SportsdataSoap sportsdataSoap() throws ... {

    return (SportsdataSoap) sportsdata().getObject();
}
于 2013-07-24T20:38:21.093 に答える