diff --git a/config_example/sys.config b/config_example/sys.config
index f33d74a..b100088 100644
--- a/config_example/sys.config
+++ b/config_example/sys.config
@@ -23,10 +23,10 @@
         {protocol,hessian},
         {port,20881},
         {consumer,[
-            {<<"com.ifcoder.demo.facade.User">>,[]}
+            {<<"org.apache.dubbo.erlang.sample.service.facade.UserOperator">>,[]}
         ]},
         {provider,[
-            {dubbo_service_user_impl,user2,<<"com.ifcoder.demo.facade.User">>,[]}
+            {dubbo_service_user_impl,userOperator,<<"org.apache.dubbo.erlang.sample.service.facade.UserOperator">>,[]}
         ]}
         
     ]}
diff --git a/test/consumer_SUITE.erl b/test/consumer_SUITE.erl
index a820b5d..ade6032 100644
--- a/test/consumer_SUITE.erl
+++ b/test/consumer_SUITE.erl
@@ -21,7 +21,7 @@
 -compile(export_all).
 
 -include_lib("common_test/include/ct.hrl").
--include("dubbo_service.hrl").
+-include("dubbo_sample_service.hrl").
 %%--------------------------------------------------------------------
 %% Function: suite() -> Info
 %% Info = [tuple()]
@@ -44,7 +44,7 @@
     dubboerl:start_provider(),
     timer:sleep(2000),
     dubboerl:start_consumer(),
-    dubbo_service_app:register_type_list(),
+    dubbo_sample_service_app:register_type_list(),
     timer:sleep(5000),
     io:format(user, "test case start info ~p~n", [Start]),
     [{appid, 1}].
@@ -142,15 +142,15 @@
 
 json_sync_invoker(_Config) ->
     application:set_env(dubboerl, protocol, json),
-    R1 = user2:queryUserInfo(#userInfoRequest{username = "name", requestId = "111"}, #{sync=> true}),
+    R1 = userOperator:queryUserInfo(#userInfoRequest{username = "name", requestId = "111"}, #{sync=> true}),
     io:format(user, "json_sync_invoker result ~p ~n", [R1]),
-    R2 = user2:genUserId(),
+    R2 = userOperator:genUserId(),
     io:format(user, "json_sync_invoker result2 ~p ~n", [R2]),
     ok.
 hessian_sync_invoker(_Config) ->
     application:set_env(dubboerl, protocol, hessian),
-    R1 = user2:queryUserInfo(#userInfoRequest{username = "name", requestId = "111"}, #{sync=> true}),
+    R1 = userOperator:queryUserInfo(#userInfoRequest{username = "name", requestId = "111"}, #{sync=> true}),
     io:format(user, "json_sync_invoker result ~p ~n", [R1]),
-    R2 = user2:genUserId(),
+    R2 = userOperator:genUserId(),
     io:format(user, "json_sync_invoker result2 ~p ~n", [R2]),
     ok.
\ No newline at end of file
diff --git a/test/dubbo_sample_service.hrl b/test/dubbo_sample_service.hrl
new file mode 100644
index 0000000..52458ea
--- /dev/null
+++ b/test/dubbo_sample_service.hrl
@@ -0,0 +1,13 @@
+
+-record(userInfoRequest,{
+    requestId ::list(),
+    username ::list()}).
+
+-record(userRes,{
+    userlist ::[]}).
+
+-record(userInfo,{
+    userName ::list(),
+    userAge ::integer(),
+    userId ::list()}).
+
diff --git a/test/dubbo_sample_service_app.erl b/test/dubbo_sample_service_app.erl
new file mode 100644
index 0000000..12771dc
--- /dev/null
+++ b/test/dubbo_sample_service_app.erl
@@ -0,0 +1,39 @@
+%%%-------------------------------------------------------------------
+%% @doc dubbo_sample_service public API
+%% @end
+%%%-------------------------------------------------------------------
+
+-module(dubbo_sample_service_app).
+
+-behaviour(application).
+
+%% Application callbacks
+-export([start/2, stop/1]).
+
+-include("dubbo_sample_service.hrl").
+-export([register_type_list/0]).
+
+%%====================================================================
+%% API
+%%====================================================================
+
+start(_StartType, _StartArgs) ->
+    register_type_list(),
+    dubbo_sample_service_sup:start_link().
+
+%%--------------------------------------------------------------------
+stop(_State) ->
+    ok.
+
+%%====================================================================
+%% Internal functions
+%%====================================================================
+
+
+register_type_list()->
+    List = dubbo_sample_service_type_list:get_list(),
+    lists:map(
+        fun({NativeType,ForeignType,Fields}) ->
+        dubbo_type_transfer:pre_process_typedef(NativeType,ForeignType,Fields)
+    end,List),
+    ok.
\ No newline at end of file
diff --git a/test/dubbo_sample_service_sup.erl b/test/dubbo_sample_service_sup.erl
new file mode 100644
index 0000000..a7e7ead
--- /dev/null
+++ b/test/dubbo_sample_service_sup.erl
@@ -0,0 +1,35 @@
+%%%-------------------------------------------------------------------
+%% @doc dubbo_sample_service top level supervisor.
+%% @end
+%%%-------------------------------------------------------------------
+
+-module(dubbo_sample_service_sup).
+
+-behaviour(supervisor).
+
+%% API
+-export([start_link/0]).
+
+%% Supervisor callbacks
+-export([init/1]).
+
+-define(SERVER, ?MODULE).
+
+%%====================================================================
+%% API functions
+%%====================================================================
+
+start_link() ->
+    supervisor:start_link({local, ?SERVER}, ?MODULE, []).
+
+%%====================================================================
+%% Supervisor callbacks
+%%====================================================================
+
+%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules}
+init([]) ->
+    {ok, { {one_for_all, 0, 1}, []} }.
+
+%%====================================================================
+%% Internal functions
+%%====================================================================
diff --git a/test/dubbo_sample_service_type_list.erl b/test/dubbo_sample_service_type_list.erl
new file mode 100644
index 0000000..ce46bef
--- /dev/null
+++ b/test/dubbo_sample_service_type_list.erl
@@ -0,0 +1,15 @@
+-module(dubbo_sample_service_type_list).
+
+%% API
+-export([register_type_list/0,get_list/0]).
+
+-include("dubbo_sample_service.hrl").
+
+get_list()->
+    [
+        {userInfoRequest,<<"org.apache.dubbo.erlang.sample.service.bean.UserInfoRequest">>,record_info(fields,userInfoRequest)},
+        {userRes,<<"org.apache.dubbo.erlang.sample.service.bean.UserRes">>,record_info(fields,userRes)},
+        {userInfo,<<"org.apache.dubbo.erlang.sample.service.bean.UserInfo">>,record_info(fields,userInfo)}    ].
+
+register_type_list()->
+    ok.
\ No newline at end of file
diff --git a/test/dubbo_service.hrl b/test/dubbo_service.hrl
deleted file mode 100644
index 1153844..0000000
--- a/test/dubbo_service.hrl
+++ /dev/null
@@ -1,30 +0,0 @@
-%%------------------------------------------------------------------------------
-%% Licensed to the Apache Software Foundation (ASF) under one or more
-%% contributor license agreements.  See the NOTICE file distributed with
-%% this work for additional information regarding copyright ownership.
-%% The ASF licenses this file to You under the Apache License, Version 2.0
-%% (the "License"); you may not use this file except in compliance with
-%% the License.  You may obtain a copy of the License at
-%%
-%%     http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%------------------------------------------------------------------------------
-
--record(userInfoRequest, {
-    username :: list(),
-    requestId :: list()}).
-
-
--record(userInfo, {
-    userName :: list(),
-    userId :: list(),
-    userAge :: integer()}).
-
--record(userRes, {
-    userlist :: []}).
-
diff --git a/test/dubbo_service_app.erl b/test/dubbo_service_app.erl
deleted file mode 100644
index bde5980..0000000
--- a/test/dubbo_service_app.erl
+++ /dev/null
@@ -1,51 +0,0 @@
-%%------------------------------------------------------------------------------
-%% Licensed to the Apache Software Foundation (ASF) under one or more
-%% contributor license agreements.  See the NOTICE file distributed with
-%% this work for additional information regarding copyright ownership.
-%% The ASF licenses this file to You under the Apache License, Version 2.0
-%% (the "License"); you may not use this file except in compliance with
-%% the License.  You may obtain a copy of the License at
-%%
-%%     http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%------------------------------------------------------------------------------
--module(dubbo_service_app).
-
--behaviour(application).
-
-%% Application callbacks
--export([start/2, stop/1]).
--export([register_type_list/0]).
-
--include("dubbo_service.hrl").
-
-
-%%====================================================================
-%% API
-%%====================================================================
-
-start(_StartType, _StartArgs) ->
-    register_type_list(),
-    dubbo_service_sup:start_link().
-
-%%--------------------------------------------------------------------
-stop(_State) ->
-    ok.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
-
-
-register_type_list() ->
-    List = dubbo_service_type_list:get_list(),
-    lists:map(
-        fun({NativeType, ForeignType, Fields}) ->
-            dubbo_type_transfer:pre_process_typedef(NativeType, ForeignType, Fields)
-        end, List),
-    ok.
\ No newline at end of file
diff --git a/test/dubbo_service_sup.erl b/test/dubbo_service_sup.erl
deleted file mode 100644
index eb95c4d..0000000
--- a/test/dubbo_service_sup.erl
+++ /dev/null
@@ -1,46 +0,0 @@
-%%------------------------------------------------------------------------------
-%% Licensed to the Apache Software Foundation (ASF) under one or more
-%% contributor license agreements.  See the NOTICE file distributed with
-%% this work for additional information regarding copyright ownership.
-%% The ASF licenses this file to You under the Apache License, Version 2.0
-%% (the "License"); you may not use this file except in compliance with
-%% the License.  You may obtain a copy of the License at
-%%
-%%     http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%------------------------------------------------------------------------------
--module(dubbo_service_sup).
-
--behaviour(supervisor).
-
-%% API
--export([start_link/0]).
-
-%% Supervisor callbacks
--export([init/1]).
-
--define(SERVER, ?MODULE).
-
-%%====================================================================
-%% API functions
-%%====================================================================
-
-start_link() ->
-    supervisor:start_link({local, ?SERVER}, ?MODULE, []).
-
-%%====================================================================
-%% Supervisor callbacks
-%%====================================================================
-
-%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules}
-init([]) ->
-    {ok, {{one_for_all, 0, 1}, []}}.
-
-%%====================================================================
-%% Internal functions
-%%====================================================================
diff --git a/test/dubbo_service_type_list.erl b/test/dubbo_service_type_list.erl
deleted file mode 100644
index 6c8f04d..0000000
--- a/test/dubbo_service_type_list.erl
+++ /dev/null
@@ -1,31 +0,0 @@
-%%------------------------------------------------------------------------------
-%% Licensed to the Apache Software Foundation (ASF) under one or more
-%% contributor license agreements.  See the NOTICE file distributed with
-%% this work for additional information regarding copyright ownership.
-%% The ASF licenses this file to You under the Apache License, Version 2.0
-%% (the "License"); you may not use this file except in compliance with
-%% the License.  You may obtain a copy of the License at
-%%
-%%     http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%------------------------------------------------------------------------------
--module(dubbo_service_type_list).
-
-%% API
--export([register_type_list/0, get_list/0]).
-
--include("dubbo_service.hrl").
-
-get_list() ->
-    [
-        {userInfoRequest, <<"com.ifcoder.demo.bean.UserInfoRequest">>, record_info(fields, userInfoRequest)},
-        {userInfo, <<"com.ifcoder.demo.bean.UserInfo">>, record_info(fields, userInfo)},
-        {userRes, <<"com.ifcoder.demo.bean.UserRes">>, record_info(fields, userRes)}].
-
-register_type_list() ->
-    ok.
\ No newline at end of file
diff --git a/test/user2.erl b/test/user2.erl
deleted file mode 100644
index 7a9daaf..0000000
--- a/test/user2.erl
+++ /dev/null
@@ -1,181 +0,0 @@
-%%------------------------------------------------------------------------------
-%% Licensed to the Apache Software Foundation (ASF) under one or more
-%% contributor license agreements.  See the NOTICE file distributed with
-%% this work for additional information regarding copyright ownership.
-%% The ASF licenses this file to You under the Apache License, Version 2.0
-%% (the "License"); you may not use this file except in compliance with
-%% the License.  You may obtain a copy of the License at
-%%
-%%     http://www.apache.org/licenses/LICENSE-2.0
-%%
-%% Unless required by applicable law or agreed to in writing, software
-%% distributed under the License is distributed on an "AS IS" BASIS,
-%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-%% See the License for the specific language governing permissions and
-%% limitations under the License.
-%%------------------------------------------------------------------------------
--module(user2).
-
--include_lib("dubboerl/include/dubbo.hrl").
--include_lib("dubboerl/include/hessian.hrl").
-
--define(CURRENT_CLASS_NAME, <<"com.ifcoder.demo.facade.User"/utf8>>).
--define(CURRENT_CLASS_VERSION, <<"0.0.0"/utf8>>).
-
--include("dubbo_service.hrl").
-
-
--export([test/0]).
-
-%% API
--export([
-    getUserInfo/1,
-    getUserInfo/2,
-    genUserId/0,
-    genUserId/1,
-    queryUserInfo/1,
-    queryUserInfo/2,
-    queryUserList/1,
-    queryUserList/2]).
-
--export([get_method_999_list/0]).
-
-%% behaviour
--callback getUserInfo(Arg0 :: list()) -> #userInfo{}.
--callback genUserId() -> list().
--callback queryUserInfo(Arg0 :: #userInfoRequest{}) -> #userInfo{}.
--callback queryUserList(Arg0 :: list()) -> #userRes{}.
-
-get_method_999_list() ->
-    [
-        getUserInfo,
-        genUserId,
-        queryUserInfo,
-        queryUserList].
-
-
-
--spec getUserInfo(Arg0 :: list()) ->
-    {ok, reference()}|
-    {ok, reference(), Data :: #userInfo{}, RpcContent :: list()}|
-    {error, Reason :: timeout|no_provider|any()}.
-getUserInfo(Arg0) ->
-    getUserInfo(Arg0, #{}).
-
-getUserInfo(Arg0, RequestOption) ->
-
-    Data = #dubbo_rpc_invocation{
-        className = ?CURRENT_CLASS_NAME,
-        classVersion = ?CURRENT_CLASS_VERSION,
-        methodName = <<"getUserInfo">>,
-        parameterDesc = <<"Ljava/lang/String;"/utf8>>,
-        parameterTypes = [
-            #type_def{foreign_type = <<"java.lang.String">>,
-                native_type = string,
-                fieldnames = []}
-        ],
-        parameters = [
-            Arg0
-        ],
-        attachments = [
-            {<<"path">>, ?CURRENT_CLASS_NAME},
-            {<<"interface">>, ?CURRENT_CLASS_NAME}
-        ]
-    },
-    Request = dubbo_adapter:reference(Data),
-    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME, Request, RequestOption).
-
-
--spec genUserId() ->
-    {ok, reference()}|
-    {ok, reference(), Data :: list(), RpcContent :: list()}|
-    {error, Reason :: timeout|no_provider|any()}.
-genUserId() ->
-    genUserId(#{}).
-
-genUserId(RequestOption) ->
-
-    Data = #dubbo_rpc_invocation{
-        className = ?CURRENT_CLASS_NAME,
-        classVersion = ?CURRENT_CLASS_VERSION,
-        methodName = <<"genUserId">>,
-        parameterDesc = <<""/utf8>>,
-        parameterTypes = [
-
-        ],
-        parameters = [
-
-        ],
-        attachments = [
-            {<<"path">>, ?CURRENT_CLASS_NAME},
-            {<<"interface">>, ?CURRENT_CLASS_NAME}
-        ]
-    },
-    Request = dubbo_adapter:reference(Data),
-    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME, Request, RequestOption).
-
-
--spec queryUserInfo(Arg0 :: #userInfoRequest{}) ->
-    {ok, reference()}|
-    {ok, reference(), Data :: #userInfo{}, RpcContent :: list()}|
-    {error, Reason :: timeout|no_provider|any()}.
-queryUserInfo(Arg0) ->
-    queryUserInfo(Arg0, #{}).
-
-queryUserInfo(Arg0, RequestOption) ->
-
-    Data = #dubbo_rpc_invocation{
-        className = ?CURRENT_CLASS_NAME,
-        classVersion = ?CURRENT_CLASS_VERSION,
-        methodName = <<"queryUserInfo">>,
-        parameterDesc = <<"Lcom/ifcoder/demo/bean/UserInfoRequest;"/utf8>>,
-        parameterTypes = [
-            #type_def{foreign_type = <<"com.ifcoder.demo.bean.UserInfoRequest">>,
-                native_type = userInfoRequest,
-                fieldnames = record_info(fields, userInfoRequest)}
-        ],
-        parameters = [
-            Arg0
-        ],
-        attachments = [
-            {<<"path">>, ?CURRENT_CLASS_NAME},
-            {<<"interface">>, ?CURRENT_CLASS_NAME}
-        ]
-    },
-    Request = dubbo_adapter:reference(Data),
-    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME, Request, RequestOption).
-
-
--spec queryUserList(Arg0 :: list()) ->
-    {ok, reference()}|
-    {ok, reference(), Data :: #userRes{}, RpcContent :: list()}|
-    {error, Reason :: timeout|no_provider|any()}.
-queryUserList(Arg0) ->
-    queryUserList(Arg0, #{}).
-
-queryUserList(Arg0, RequestOption) ->
-
-    Data = #dubbo_rpc_invocation{
-        className = ?CURRENT_CLASS_NAME,
-        classVersion = ?CURRENT_CLASS_VERSION,
-        methodName = <<"queryUserList">>,
-        parameterDesc = <<"Ljava/lang/String;"/utf8>>,
-        parameterTypes = [
-            #type_def{foreign_type = <<"java.lang.String">>,
-                native_type = string,
-                fieldnames = []}
-        ],
-        parameters = [
-            Arg0
-        ],
-        attachments = [
-            {<<"path">>, ?CURRENT_CLASS_NAME},
-            {<<"interface">>, ?CURRENT_CLASS_NAME}
-        ]
-    },
-    Request = dubbo_adapter:reference(Data),
-    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME, Request, RequestOption).
-
-
-test() ->
-    queryUserInfo(#userInfoRequest{username = "name", requestId = "111"}, #{sync=> true}).
\ No newline at end of file
diff --git a/test/userOperator.erl b/test/userOperator.erl
new file mode 100644
index 0000000..0d35917
--- /dev/null
+++ b/test/userOperator.erl
@@ -0,0 +1,164 @@
+-module(userOperator).
+
+-include_lib("dubboerl/include/dubbo.hrl").
+-include_lib("dubboerl/include/hessian.hrl").
+
+-define(CURRENT_CLASS_NAME,<<"org.apache.dubbo.erlang.sample.service.facade.UserOperator"/utf8>>).
+-define(CURRENT_CLASS_VERSION,<<"0.0.0"/utf8>>).
+
+-include("dubbo_sample_service.hrl").
+
+
+
+-export([test/0]).
+%% API
+-export([
+    getUserInfo/1,
+    getUserInfo/2,
+    genUserId/0,
+    genUserId/1,
+    queryUserInfo/1,
+    queryUserInfo/2,
+    queryUserList/1,
+    queryUserList/2]).
+
+-export([get_method_999_list/0]).
+
+%% behaviour
+-callback getUserInfo(Arg0::list())-> #userInfo{}.
+-callback genUserId()-> list().
+-callback queryUserInfo(Arg0::#userInfoRequest{})-> #userInfo{}.
+-callback queryUserList(Arg0::list())-> #userRes{}.
+
+get_method_999_list()->
+    [
+    getUserInfo,
+    genUserId,
+    queryUserInfo,
+    queryUserList].
+
+
+
+-spec getUserInfo(Arg0::list())->
+    {ok,reference()}|
+    {ok,reference(),Data::#userInfo{},RpcContent::list()}|
+    {error,Reason::timeout|no_provider|any()}.
+getUserInfo(Arg0)->
+    getUserInfo(Arg0 ,#{}).
+
+getUserInfo(Arg0, RequestOption)->
+    
+    Data = #dubbo_rpc_invocation{
+        className = ?CURRENT_CLASS_NAME,
+        classVersion = ?CURRENT_CLASS_VERSION,
+        methodName = <<"getUserInfo">>,
+        parameterDesc = <<"Ljava/lang/String;"/utf8>>,
+        parameterTypes = [
+            #type_def{foreign_type = <<"java.lang.String">>,
+            native_type = string,
+            fieldnames = []}
+        ],
+        parameters = [
+            Arg0
+        ],
+        attachments = [
+            {<<"path">>, ?CURRENT_CLASS_NAME},
+            {<<"interface">> , ?CURRENT_CLASS_NAME}
+        ]
+    },
+    Request = dubbo_adapter:reference(Data),
+    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).
+
+
+-spec genUserId()->
+    {ok,reference()}|
+    {ok,reference(),Data::list(),RpcContent::list()}|
+    {error,Reason::timeout|no_provider|any()}.
+genUserId()->
+    genUserId( #{}).
+
+genUserId( RequestOption)->
+    
+    Data = #dubbo_rpc_invocation{
+        className = ?CURRENT_CLASS_NAME,
+        classVersion = ?CURRENT_CLASS_VERSION,
+        methodName = <<"genUserId">>,
+        parameterDesc = <<""/utf8>>,
+        parameterTypes = [
+            
+        ],
+        parameters = [
+            
+        ],
+        attachments = [
+            {<<"path">>, ?CURRENT_CLASS_NAME},
+            {<<"interface">> , ?CURRENT_CLASS_NAME}
+        ]
+    },
+    Request = dubbo_adapter:reference(Data),
+    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).
+
+
+-spec queryUserInfo(Arg0::#userInfoRequest{})->
+    {ok,reference()}|
+    {ok,reference(),Data::#userInfo{},RpcContent::list()}|
+    {error,Reason::timeout|no_provider|any()}.
+queryUserInfo(Arg0)->
+    queryUserInfo(Arg0 ,#{}).
+
+queryUserInfo(Arg0, RequestOption)->
+    
+    Data = #dubbo_rpc_invocation{
+        className = ?CURRENT_CLASS_NAME,
+        classVersion = ?CURRENT_CLASS_VERSION,
+        methodName = <<"queryUserInfo">>,
+        parameterDesc = <<"Lorg/apache/dubbo/erlang/sample/service/bean/UserInfoRequest;"/utf8>>,
+        parameterTypes = [
+            #type_def{foreign_type = <<"org.apache.dubbo.erlang.sample.service.bean.UserInfoRequest">>,
+            native_type = userInfoRequest,
+            fieldnames = record_info(fields,userInfoRequest)}
+        ],
+        parameters = [
+            Arg0
+        ],
+        attachments = [
+            {<<"path">>, ?CURRENT_CLASS_NAME},
+            {<<"interface">> , ?CURRENT_CLASS_NAME}
+        ]
+    },
+    Request = dubbo_adapter:reference(Data),
+    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).
+
+
+-spec queryUserList(Arg0::list())->
+    {ok,reference()}|
+    {ok,reference(),Data::#userRes{},RpcContent::list()}|
+    {error,Reason::timeout|no_provider|any()}.
+queryUserList(Arg0)->
+    queryUserList(Arg0 ,#{}).
+
+queryUserList(Arg0, RequestOption)->
+    
+    Data = #dubbo_rpc_invocation{
+        className = ?CURRENT_CLASS_NAME,
+        classVersion = ?CURRENT_CLASS_VERSION,
+        methodName = <<"queryUserList">>,
+        parameterDesc = <<"Ljava/lang/String;"/utf8>>,
+        parameterTypes = [
+            #type_def{foreign_type = <<"java.lang.String">>,
+            native_type = string,
+            fieldnames = []}
+        ],
+        parameters = [
+            Arg0
+        ],
+        attachments = [
+            {<<"path">>, ?CURRENT_CLASS_NAME},
+            {<<"interface">> , ?CURRENT_CLASS_NAME}
+        ]
+    },
+    Request = dubbo_adapter:reference(Data),
+    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).
+
+test() ->
+    queryUserInfo(#userInfoRequest{username = "name", requestId = "111"}, #{sync=> true}).
\ No newline at end of file
