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