- [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]