- [x] I have searched the [issues](https://github.com/apache/dubbo/issues) of 
this repository and believe that this is not a duplicate.
- [x] I have checked the 
[FAQ](https://github.com/apache/dubbo/blob/master/FAQ.md) of this repository 
and believe that this is not a duplicate.

### Environment

* Dubbo version: 2.7.3
* Operating System version: Windos7 and CentOS Linux version 
4.14.67-2dev917.el7.x86_64 
* Java version:  1.8.0_201 

### Steps to reproduce this issue
1. Started a service with Google Protobuf type
2. New ReferenceCofnig and setGerneric("protobuf-json") 
3. Use referenceConfig to get a client and invoke service.

### Expected Result
The Request will be send and be processed by GenericFilter and be process by 
protobuf-json case.And service return generic result to client.
```
 if (ProtocolUtils.isProtobufGenericSerialization(generic)) {
                    // as proto3 only accept one protobuf parameter
                    if (args.length == 1 && args[0] instanceof String) {
                        try (UnsafeByteArrayInputStream is =
                                     new UnsafeByteArrayInputStream(((String) 
args[0]).getBytes())) {
                            args[0] = 
ExtensionLoader.getExtensionLoader(Serialization.class)
                                    .getExtension("" + 
GENERIC_SERIALIZATION_PROTOBUF)
                                    .deserialize(null, 
is).readObject(method.getParameterTypes()[0]);
             
```
### Actual Result
The client work well in Windows7,but failed in Linux.

What actually happens?
In service side, the request from Windows7 with invocation contains "generic = 
protobuf-json".
But the request from Linux with invocation contains "generic = true", which 
cause invoke failed.

```
org.apache.dubbo.rpc.service.GenericException: java.lang.ClassCastException: 
java.lang.String cannot be cast to 
com.ctrip.hotel.productmatch.imagesearchrank.api.proto.ImageSearchRankRequestType
java.lang.ClassCastException: java.lang.String cannot be cast to 
com.ctrip.hotel.productmatch.imagesearchrank.api.proto.ImageSearchRankRequestType
        at org.apache.dubbo.common.bytecode.Wrapper1.invokeMethod(Wrapper1.java)
        at 
org.apache.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:47)
        at 
org.apache.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:84)
        at 
com.ctrip.framework.cdubbo.internal.delegate.callback.StreamInvoker.invoke(StreamInvoker.java:29)
        at 
org.apache.dubbo.config.invoker.DelegateProviderMetaDataInvoker.invoke(DelegateProviderMetaDataInvoker.java:56)
        at 
org.apache.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:56)
        at 
org.apache.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:55)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
org.apache.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:48)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:81)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
org.apache.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:92)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
org.apache.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:96)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
org.apache.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:141)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
org.apache.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at org.apache.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:41)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
com.ctrip.framework.cdubbo.internal.health.HealthCheckFilter.invoke(HealthCheckFilter.java:74)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
com.ctrip.framework.cdubbo.internal.metadata.MetadataFilter.invoke(MetadataFilter.java:41)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
com.ctrip.framework.cdubbo.internal.delegate.server.CDubboServerInvoker.invoke(CDubboServerInvoker.java:66)
        at 
com.ctrip.framework.cdubbo.internal.filter.CatProviderFilter.invoke(CatProviderFilter.java:28)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
com.ctrip.framework.cdubbo.internal.ratelimit.RateLimitFilter.invoke(RateLimitFilter.java:52)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:82)
        at 
org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$CallbackRegistrationInvoker.invoke(ProtocolFilterWrapper.java:157)
        at 
org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:152)
        at 
org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:102)
        at 
org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:193)
        at 
org.apache.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51)
        at 
com.ctrip.framework.cdubbo.internal.delegate.CDubboChannelHandlerDelegate.doReceivedRequest(CDubboChannelHandlerDelegate.java:113)
        at 
com.ctrip.framework.cdubbo.internal.delegate.CDubboChannelHandlerDelegate.received(CDubboChannelHandlerDelegate.java:68)
        at 
org.apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:57)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
```

[ Full content available at: https://github.com/apache/dubbo/issues/5296 ]
This message was relayed via gitbox.apache.org for 
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to