protected Runnable doExport()

in dubbo-rpc-extensions/dubbo-rpc-webservice/src/main/java/org/apache/dubbo/rpc/protocol/webservice/WebServiceProtocol.java [99:132]


    protected <T> Runnable doExport(T impl, Class<T> type, URL url) throws RpcException {
        transportFactory = new SoapTransportFactory();
        destinationRegistry = new DestinationRegistryImpl();
        String addr = getAddr(url);
        ProtocolServer protocolServer = serverMap.get(addr);
        if (protocolServer == null) {
            RemotingServer remotingServer = httpBinder.bind(url, new WebServiceHandler());
            serverMap.put(addr, new ProxyProtocolServer(remotingServer));
        }
        serverFactoryBean = new ServerFactoryBean();
        serverFactoryBean.setAddress(url.getAbsolutePath());
        serverFactoryBean.setServiceClass(type);
        serverFactoryBean.setServiceBean(impl);
        serverFactoryBean.setBus(bus);
        serverFactoryBean.setDestinationFactory(transportFactory);
        serverFactoryBean.getServiceFactory().getConfigurations().add(new URLHashMethodNameSoapActionServiceConfiguration());
        server = serverFactoryBean.create();
        return new Runnable() {
            @Override
            public void run() {
                if (serverFactoryBean.getServer() != null) {
                    serverFactoryBean.getServer().destroy();
                }
                if (serverFactoryBean.getBus() != null) {
                    serverFactoryBean.getBus().shutdown(true);
                }
                ProtocolServer httpServer = serverMap.get(addr);
                if (httpServer != null) {
                    httpServer.close();
                    serverMap.remove(addr);
                }
            }
        };
    }