java - Spring 异步方法不适用于 EndPoint

标签 java spring web-services asynchronous spring-ws

尽管我似乎已经正确完成了所有操作,但我的异步实现无法正常工作。

我正在从 EndPoint 类调用异步方法。

请查看下面的代码并帮助我解决问题。

我的 EndPoint 类如下:

@Endpoint
public class EndpointDummy {

    private static final String TARGET_NAMESPACE = "http://www.abc.xyz.com/GetAcctInfo";

    @Autowired
    private DummyService service;

    @PayloadRoot(localPart = "GetAcctInfoRq", namespace = TARGET_NAMESPACE)
    public @ResponsePayload GetAcctInfoRs handleRequest(@RequestPayload GetAcctInfoRq request, MessageContext messageContext) throws JAXBException, TransformerException {

        /*****************************************************************
        * Call the handler function
        * This handler function is asynchronous
        *****************************************************************/
        service.handleRequest();

        /*****************************************************************
        * Send response back
        *****************************************************************/
        SaajSoapMessage soapResponse = (SaajSoapMessage) messageContext.getResponse();
        SoapHeader respheader = soapResponse.getSoapHeader(); 

        MsgHdrRs msgHdrRs = new MsgHdrRs();
        JAXBContext jaxbContext = JAXBContext.newInstance(MsgHdrRs.class);
        jaxbContext.createMarshaller().marshal(msgHdrRs, respheader.getResult());

        GetAcctInfoRs response = new GetAcctInfoRs();
        return response;
    }
}

正如您在上面看到的,我的 EndPoint 类调用 DummyService 方法handleRequest。

Dummy Service 类使用 @Service 进行注释,handRequest 方法使用 @Async 进行注释,如下所示:

@Service
public class DummyService {

    private Logger logger = Logger.getLogger(DummyService.class);

    @Async("taskExecutorServiceImpl")
    public void handleRequest() {

        logger.info("DummyService: 1");

        try {
            Thread.sleep(20000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        logger.info("DummyService: 2");
    }

}

我还定义了我的配置类,如下所示:

@Configuration
@EnableAsync
public class ThreadConfig {

    @Bean(name = "taskExecutorServiceImpl")
    public ThreadPoolTaskExecutor specificTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.initialize();
        return executor;
    }
}

请帮助我解决问题。我是 Spring 框架的新手,希望得到任何帮助。

谢谢

最佳答案

问题已解决,与上述代码无关。 问题出在配置文件中,与上面的正确代码无关。

关于java - Spring 异步方法不适用于 EndPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52466378/

相关文章:

java - 为什么 Java 会一遍又一遍地从损坏的套接字读取相同的字节?

java - 如何在不使用配置文件的情况下覆盖 Spring Boot 应用程序属性以进行测试?

c# - 反序列化 Json 对象 - DateTime

web-services - 如何指定 webServiceTemplate 使用哪种版本的 soap?

java - 从 ViewPager Fragment 监听 DialogFragment dismiss 事件

java - onItemClick 单击时不起作用

java - 以更智能的方式在 Junit 5(或其他测试 Java 库)中使用数组参数化

java - 方面未从计划中捕获方法

java - Spring 中的 FileNotFoundException

java - 使用 Axis2 和 Maven 从 WSDL 文件创建 Web 服务客户端所需的最低依赖项和插件配置是什么?