1

HandlerConfiguration.javaで次のように定義されている2つのGenericHandlerResolverBeanがあります。

@Bean(autowire = Autowire.BY_NAME)
@Scope(value = "prototype")
public GenericHandlerResolver defaultHandlerResolver() {
    return new GenericHandlerResolver(){{
        setHandlers(new ArrayList<Handler>(){{
            add(loggingHandler());
            add(sessionHandler());
        }});
    }};
}

@Bean(autowire = Autowire.BY_NAME)
@Scope(value = "prototype")
public GenericHandlerResolver maskingHandlerResolver() {
    return new GenericHandlerResolver(){{
        setHandlers(new ArrayList<Handler>(){{
            add(maskingLoggingHandler());
            add(sessionHandler());
        }});
    }};
}

次に、2つの異なるBeanをWebServiceConfiguration.javaに自動配線し、次のように数十のJaxWsPortProxyFactoryBeanBeanで使用します。

@Configuration
public class WebServiceConfiguration {
...

public Integer paymentServiceTimeout;
@Bean @DependsOn("applicationProperties")
public Map<String, Object> paymentServiceProperties(){
    return new HashMap<String, Object>(){
        {put(timeoutKey, paymentServiceTimeout);}
    };
}

...
// Logging handler resolver:    
/*@Autowired
protected GenericHandlerResolver defaultHandlerResolver;*/

// Logging handler resolver that will mack Credit Cards:
@Autowired
protected GenericHandlerResolver maskingHandlerResolver;

...

@Bean
@Lazy
@DependsOn("applicationProperties")
public JaxWsPortProxyFactoryBean paymentServicePort() throws Exception {
    JaxWsPortProxyFactoryBean jppfb = new JaxWsPortProxyFactoryBean() {{
        setServiceInterface(PaymentServicePortType.class);
        setWsdlDocumentUrl(new URL(paymentServiceEndpoint + "?wsdl"));
        setServiceName("PaymentService");
        setEndpointAddress(paymentServiceEndpoint);
        setCommonProperties(this,
                paymentServiceProperties(),
                maskingHandlerResolver,
                LEGACY_NAMESPACE);
    }};
    jppfb.afterPropertiesSet();
    return jppfb;
}

protected void setCommonProperties(JaxWsPortProxyFactoryBean bean,
                                   Map<String, Object> customProperties,
                                   GenericHandlerResolver handlerResolver,
                                   String namespace) {
    bean.setMaintainSession(false);
    bean.setLookupServiceOnStartup(false);
    bean.setCustomProperties(customProperties);
    bean.setHandlerResolver(handlerResolver);
    bean.setNamespaceUri(namespace);
}

私の問題は、これがXML構成で機能することですが、これをjavaConfigに移動すると、WebServiceConfiguration.javaに複数のGenericHandlerResolverがある場合、ハンドラーは機能しません(ロギングなし)が、エラーメッセージが表示されないため、何が起こっているのかわからない。

4

1 に答える 1

0

Autowired の代わりに Resource アノテーションを使用してみてください。

@Resource(name="defaultHandlerResolver")
protected GenericHandlerResolver defaultHandlerResolver;

@Resource(name="maskingHandlerResolver")
protected GenericHandlerResolver maskingHandlerResolver

または、 @Autowired で @Qualifier を使用することもできます

@Autowired
@Qualifier("defaultHandlerResolver")
protected GenericHandlerResolver defaultHandlerResolver;*/

@Autowired
@Qualifier("maskingHandlerResolver")
protected GenericHandlerResolver maskingHandlerResolver;
于 2012-10-24T16:32:45.807 に答える