diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodec.java b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodec.java index 8694a70c3f0e23c417974c05acf6a20f7578c9ac..a7ef95a7ced77b840f8ab731d54476992ae6e160 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodec.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftCodec.java @@ -98,10 +98,10 @@ public class ThriftCodec implements Codec { throws IOException { if ( message instanceof Request ) { - encodeRequest( output, ( Request ) message ); + encodeRequest( channel, output, ( Request ) message ); } else if ( message instanceof Response ) { - encodeResponse( output, ( Response ) message ); + encodeResponse( channel, output, ( Response ) message ); } else { throw new UnsupportedOperationException( new StringBuilder( 32 ) @@ -184,7 +184,7 @@ public class ThriftCodec implements Codec { result.setMethodName( message.name ); String argsClassName = ExtensionLoader.getExtensionLoader(ClassNameGenerator.class) - .getDefaultExtension().generateArgsClassName( serviceName, message.name ); + .getExtension(ThriftClassNameGenerator.NAME).generateArgsClassName( serviceName, message.name ); if ( StringUtils.isEmpty( argsClassName ) ) { throw new RpcException( RpcException.SERIALIZATION_EXCEPTION, @@ -295,7 +295,7 @@ public class ThriftCodec implements Codec { } else if ( message.type == TMessageType.REPLY ) { String resultClassName = ExtensionLoader.getExtensionLoader( ClassNameGenerator.class ) - .getDefaultExtension().generateResultClassName( serviceName, message.name ); + .getExtension(ThriftClassNameGenerator.NAME).generateResultClassName( serviceName, message.name ); if ( StringUtils.isEmpty( resultClassName ) ) { throw new IllegalArgumentException( @@ -390,7 +390,7 @@ public class ThriftCodec implements Codec { } - private void encodeRequest( OutputStream output, Request request ) + private void encodeRequest( Channel channel, OutputStream output, Request request ) throws IOException { RpcInvocation inv = ( RpcInvocation ) request.getData(); @@ -413,7 +413,8 @@ public class ThriftCodec implements Codec { seqId ); String methodArgs = ExtensionLoader.getExtensionLoader( ClassNameGenerator.class ) - .getDefaultExtension().generateArgsClassName( serviceName, inv.getMethodName() ); + .getExtension(channel.getUrl().getParameter(ThriftConstants.CLASS_NAME_GENERATOR_KEY, ThriftClassNameGenerator.NAME)) + .generateArgsClassName(serviceName, inv.getMethodName()); if ( StringUtils.isEmpty( methodArgs ) ) { throw new RpcException( RpcException.SERIALIZATION_EXCEPTION, @@ -529,15 +530,16 @@ public class ThriftCodec implements Codec { } - private void encodeResponse( OutputStream output, Response response ) + private void encodeResponse( Channel channel, OutputStream output, Response response ) throws IOException { RpcResult result = ( RpcResult ) response.getResult(); RequestData rd = cachedRequest.get( response.getId() ); - String resultClassName = ExtensionLoader.getExtensionLoader( ClassNameGenerator.class ) - .getDefaultExtension().generateResultClassName( rd.serviceName, rd.methodName ); + String resultClassName = ExtensionLoader.getExtensionLoader( ClassNameGenerator.class ).getExtension( + channel.getUrl().getParameter(ThriftConstants.CLASS_NAME_GENERATOR_KEY, ThriftClassNameGenerator.NAME)) + .generateResultClassName(rd.serviceName, rd.methodName); if ( StringUtils.isEmpty( resultClassName ) ) { throw new RpcException( RpcException.SERIALIZATION_EXCEPTION, diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftConstants.java b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftConstants.java index 4a5efe92ebdb8d88296ffd760aea022122047a3d..7bf67ad04ae049b796c2419b5e23f9569ed3362f 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftConstants.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/main/java/com/alibaba/dubbo/rpc/protocol/thrift/ThriftConstants.java @@ -7,6 +7,7 @@ public final class ThriftConstants { public static final String THRIFT_PROTOCOL_KEY = "thrift.protocol"; public static final String BINARY_THRIFT_PROTOCOL = "binary"; + public static final String CLASS_NAME_GENERATOR_KEY = "class.name.generator"; public static final String DEFAULT_PROTOCOL = BINARY_THRIFT_PROTOCOL; private ThriftConstants() {} diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoConsumer.java b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoConsumer.java index 1c1e03f6ace59a210992c6c1eb64d6c56a463195..369f61a5c8d851c415eda8d238728001af29d80d 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoConsumer.java +++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/java/com/alibaba/dubbo/rpc/protocol/thrift/examples/DubboDemoConsumer.java @@ -1,8 +1,9 @@ package com.alibaba.dubbo.rpc.protocol.thrift.examples; -import com.alibaba.dubbo.rpc.gen.dubbo.Demo; import org.springframework.context.support.ClassPathXmlApplicationContext; +import com.alibaba.dubbo.rpc.gen.thrift.Demo; + /** * @author kimi */ @@ -12,7 +13,7 @@ public class DubboDemoConsumer { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("dubbo-demo-consumer.xml"); context.start(); - Demo demo = (Demo) context.getBean("demoService"); + Demo.Iface demo = (Demo.Iface) context.getBean("demoService"); System.out.println(demo.echoI32(32)); for (int i = 0; i < 10; i++) { System.out.println(demo.echoI32(i + 1)); diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-consumer.xml b/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-consumer.xml index 31cb0d904b01440ed3e2a0fe2e7cf6ff74a8a05c..4f1ccc4238031c507b9c70d1ca842e53302e5af0 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-consumer.xml +++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-consumer.xml @@ -12,6 +12,6 @@ - + \ No newline at end of file diff --git a/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-provider.xml b/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-provider.xml index 54ca212123bbbef72abcb61cd8dd51fc3557d5d6..8727b7bea1ed759ff647006775f8ffff9e76629e 100644 --- a/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-provider.xml +++ b/dubbo-rpc/dubbo-rpc-thrift/src/test/resources/dubbo-demo-provider.xml @@ -12,8 +12,8 @@ - + - + \ No newline at end of file