When I set `path` in ServiceConfig or `contextpath` in ProtocolConfig, RestProtocol throws NPE on this line:
https://github.com/apache/incubator-dubbo/blob/master/dubbo-rpc/dubbo-rpc-rest/src/main/java/org/apache/dubbo/rpc/protocol/rest/RestProtocol.java#L93
```java
Class implClass = ApplicationModel.getProviderModel(url.getServiceKey()).getServiceInstance().getClass();
```

<dubbo:service path="test" interface="org.apache.dubbo.samples.rest.api.facade.UserRestService" ref="userRestService"
                   protocol="rest" validation="true"/>

This is because we use `group/interface:version` as the key when putting ProviderModel:
```java
Application.initProviderModel(group/interface:version, providerModel)
```
but use `group/path:version` to get, as showed above.

I think to unify to `path` would solve this problem.

}
    @Test
    public void testRestProtocolWithContextPath() {
        DemoServiceImpl server = new DemoServiceImpl();
        Assertions.assertFalse(server.isCalled());
        URL url = URL.valueOf("rest://127.0.0.1:5341/a/b/c?version=1.0.0");
        ProviderModel providerModel = new ProviderModel(url.getServiceKey(), server, DemoService.class);
        ApplicationModel.initProviderModel(url.getServiceKey(), providerModel);
        Exporter<DemoService> exporter = protocol.export(proxy.getInvoker(server, DemoService.class, url));
        url = URL.valueOf("rest://127.0.0.1:5341/a/b/c/?version=1.0.0");
        Invoker<DemoService> invoker = protocol.refer(DemoService.class, url);
        DemoService client = proxy.getProxy(invoker);
        String result = client.sayHello("haha");
        Assertions.assertTrue(server.isCalled());
        Assertions.assertEquals("Hello, haha", result);
        invoker.destroy();
        exporter.unexport();
    }
    @Test
    public void testExport() {
        DemoService server = new DemoServiceImpl();
        ProviderModel providerModel = new ProviderModel(exportUrl.getServiceKey(), server, DemoService.class);
        ApplicationModel.initProviderModel(exportUrl.getServiceKey(), providerModel);
        RpcContext.getContext().setAttachment("timeout", "200");
        Exporter<DemoService> exporter = protocol.export(proxy.getInvoker(server, DemoService.class, exportUrl));
        DemoService demoService = this.proxy.getProxy(protocol.refer(DemoService.class, exportUrl));
        Integer echoString = demoService.hello(1, 2);
        assertThat(echoString, is(3));
        exporter.unexport();
    }