This is an automated email from the ASF dual-hosted git repository.
xiaoliu pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-go-pixiu.git
The following commit(s) were added to refs/heads/develop by this push:
new c1880a3 moving param types into parameter configuration instead of
standalone… (#161)
c1880a3 is described below
commit c1880a303bc4980d399c00b71214be27629982ea
Author: williamfeng323 <[email protected]>
AuthorDate: Thu May 20 13:05:20 2021 +0800
moving param types into parameter configuration instead of standalone…
(#161)
* moving param types into parameter configuration instead of standalone
config
* remve replace path filter
Signed-off-by: william feng <[email protected]>
* fix reviewdog comment
---
docs/sample/dubbo-body.md | 7 +-
docs/sample/dubbo-mix.md | 9 +-
docs/sample/dubbo-multi.md | 10 +-
docs/sample/dubbo-query.md | 7 +-
docs/sample/dubbo-universality.md | 63 ++----
docs/sample/dubbo-uri.md | 7 +-
docs/sample/zh-cn/dubbo-body.md | 7 +-
docs/sample/zh-cn/dubbo-mix.md | 9 +-
docs/sample/zh-cn/dubbo-multi.md | 10 +-
docs/sample/zh-cn/dubbo-query.md | 24 +-
docs/sample/zh-cn/dubbo-universality.md | 56 ++---
docs/sample/zh-cn/dubbo-uri.md | 7 +-
go.mod | 4 +-
go.sum | 14 +-
pkg/client/client.go | 30 +--
pkg/client/dubbo/dubbo.go | 39 ++--
pkg/client/dubbo/dubbo_test.go | 119 +++++-----
pkg/client/dubbo/mapper.go | 162 +++++++------
pkg/client/dubbo/mapper_test.go | 287 ++++++++++++++++--------
pkg/client/dubbo/option.go | 192 ++++++++++------
pkg/client/dubbo/option_test.go | 97 ++++++++
pkg/client/http/http_test.go | 14 +-
pkg/client/http/mapper.go | 16 +-
pkg/client/http/mapper_test.go | 22 ++
pkg/common/constant/jtypes.go | 6 +-
pkg/filter/replacepath/replace_path.go | 79 -------
pkg/filter/replacepath/replace_place_test.go | 43 ----
pkg/pixiu/listener.go | 4 -
samples/admin/proxy/api_config.yaml | 44 ++--
samples/dubbogo/multi/apiconfig/api_config.yaml | 10 +-
samples/dubbogo/simple/body/api_config.yaml | 9 +-
samples/dubbogo/simple/mix/api_config.yaml | 9 +-
samples/dubbogo/simple/proxy/api_config.yaml | 38 +---
samples/dubbogo/simple/query/api_config.yaml | 7 +-
samples/dubbogo/simple/uri/api_config.yaml | 7 +-
35 files changed, 771 insertions(+), 697 deletions(-)
diff --git a/docs/sample/dubbo-body.md b/docs/sample/dubbo-body.md
index 7422dec..8d81420 100644
--- a/docs/sample/dubbo-body.md
+++ b/docs/sample/dubbo-body.md
@@ -24,10 +24,10 @@ resources:
mappingParams:
- name: requestBody._all
mapTo: 0
+ mapType: "object"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "CreateUser"
- paramTypes: [ "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -41,10 +41,10 @@ resources:
mappingParams:
- name: requestBody._all
mapTo: 0
+ mapType: "object"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUser"
- paramTypes: [ "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -62,12 +62,13 @@ resources:
mappingParams:
- name: requestBody.name
mapTo: 0
+ mapType: "string"
- name: requestBody.user
mapTo: 1
+ mapType: "object"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/dubbo-mix.md b/docs/sample/dubbo-mix.md
index da7e9ae..b4b4119 100644
--- a/docs/sample/dubbo-mix.md
+++ b/docs/sample/dubbo-mix.md
@@ -24,12 +24,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: queryStrings.age
mapTo: 1
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "string", "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -43,12 +44,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -66,12 +68,13 @@ resources:
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/dubbo-multi.md b/docs/sample/dubbo-multi.md
index de9c638..e7a6ed8 100644
--- a/docs/sample/dubbo-multi.md
+++ b/docs/sample/dubbo-multi.md
@@ -26,10 +26,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "StudentService"
interface: "com.dubbogo.pixiu.StudentService"
method: "GetStudentByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -43,12 +43,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "StudentService"
interface: "com.dubbogo.pixiu.StudentService"
method: "UpdateStudentByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -68,10 +69,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "TeacherService"
interface: "com.dubbogo.pixiu.TeacherService"
method: "GetTeacherByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -85,12 +86,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "TeacherService"
interface: "com.dubbogo.pixiu.TeacherService"
method: "UpdateTeacherByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/dubbo-query.md b/docs/sample/dubbo-query.md
index 245ecec..52b7542 100644
--- a/docs/sample/dubbo-query.md
+++ b/docs/sample/dubbo-query.md
@@ -24,10 +24,10 @@ resources:
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -45,12 +45,13 @@ resources:
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
- name: queryStrings.age
mapTo: 1
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "string","int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -68,10 +69,10 @@ resources:
mappingParams:
- name: queryStrings.code
mapTo: 0
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByCode"
- paramTypes: [ "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/dubbo-universality.md
b/docs/sample/dubbo-universality.md
index ce726bb..cce080c 100644
--- a/docs/sample/dubbo-universality.md
+++ b/docs/sample/dubbo-universality.md
@@ -25,44 +25,20 @@ resources:
requestType: dubbo
mappingParams:
- name: requestBody.values
- mapTo: 0
- opt:
- open: true
- usable: true
- name: values
+ mapTo: opt.values
- name: requestBody.types
- mapTo: 1
- opt:
- open: true
- name: types
+ mapTo: opt.types
- name: uri.application
- mapTo: 2
- opt:
- open: true
- name: application
+ mapTo: opt.application
- name: uri.interface
- mapTo: 3
- opt:
- open: true
- name: interface
+ mapTo: opt.interface
- name: queryStrings.method
- mapTo: 4
- opt:
- open: true
- name: method
+ mapTo: opt.method
- name: queryStrings.group
- mapTo: 5
- opt:
- open: true
- name: group
+ mapTo: opt.group
- name: queryStrings.version
- mapTo: 6
- opt:
- open: true
- name: version
- paramTypes: ["object", "object", "string", "string", "string",
"string", "string"]
+ mapTo: opt.version
# Notice: this is the really paramTypes to dubbo service, it takes
precedence over paramTypes when it is finally called.
- toParamTypes: ["string"]
clusterName: "test_dubbo"
```
@@ -134,7 +110,7 @@ const (
#### Options
-Assemble generic params to invoke.
+By configuring mapTo with option keywords(listed below), Pixiu will assemble
generic params to invoke.
```go
// GenericService uses for generic invoke for service call
@@ -144,33 +120,33 @@ type GenericService struct {
}
```
-- types
+- opt.types
> dubbo generic types
Use for dubbogo `GenericService#Invoke` func arg 2rd param.
-- method
+- opt.method
Use for dubbogo `GenericService#Invoke` func arg 1rd param.
-- group
+- opt.group
Dubbo group in `ReferenceConfig#Group`.
-- version
+- opt.version
Dubbo version in `ReferenceConfig#Version`.
-- interface
+- opt.interface
Dubbo interface in `ReferenceConfig#InterfaceName`.
-- application
+- opt.application
Now only use for part of cache key.
-- values
+- opt.values
Use for dubbogo `GenericService#Invoke` func arg 3rd param.
@@ -191,16 +167,11 @@ request body
```yaml
- name: requestBody.types
- mapTo: 1
- opt:
- open: true
- name: types
+ mapTo: opt.types
```
- `requestBody.types` means body content with types key.
-- `opt.name` means use types option.
-- `opt.open` must `true` will create opt,may be deleted in the future for thin
provisioning。
-- `opt.usable` means if remove the request to downstream service.
+- `opt.types` means use types option.
##### Multiple params
diff --git a/docs/sample/dubbo-uri.md b/docs/sample/dubbo-uri.md
index 932335d..de7988f 100644
--- a/docs/sample/dubbo-uri.md
+++ b/docs/sample/dubbo-uri.md
@@ -27,10 +27,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -51,10 +51,10 @@ resources:
mappingParams:
- name: uri.code
mapTo: 0
+ mapType: "int"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByCode"
- paramTypes: [ "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -77,12 +77,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: uri.age
mapTo: 1
+ mapType: "int"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "string", "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/zh-cn/dubbo-body.md b/docs/sample/zh-cn/dubbo-body.md
index f9cfff3..e0f3745 100644
--- a/docs/sample/zh-cn/dubbo-body.md
+++ b/docs/sample/zh-cn/dubbo-body.md
@@ -24,10 +24,10 @@ resources:
mappingParams:
- name: requestBody._all
mapTo: 0
+ mapType: "object"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "CreateUser"
- paramTypes: [ "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -41,10 +41,10 @@ resources:
mappingParams:
- name: requestBody._all
mapTo: 0
+ mapType: "object"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUser"
- paramTypes: [ "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -62,12 +62,13 @@ resources:
mappingParams:
- name: requestBody.name
mapTo: 0
+ mapType: "string"
- name: requestBody.user
mapTo: 1
+ mapType: "object"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/zh-cn/dubbo-mix.md b/docs/sample/zh-cn/dubbo-mix.md
index 6ed0f5f..cce31cb 100644
--- a/docs/sample/zh-cn/dubbo-mix.md
+++ b/docs/sample/zh-cn/dubbo-mix.md
@@ -24,12 +24,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: queryStrings.age
mapTo: 1
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "string", "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -43,12 +44,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -66,12 +68,13 @@ resources:
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/zh-cn/dubbo-multi.md b/docs/sample/zh-cn/dubbo-multi.md
index ef53e11..416e6ac 100644
--- a/docs/sample/zh-cn/dubbo-multi.md
+++ b/docs/sample/zh-cn/dubbo-multi.md
@@ -26,10 +26,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "StudentService"
interface: "com.dubbogo.pixiu.StudentService"
method: "GetStudentByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -43,12 +43,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "StudentService"
interface: "com.dubbogo.pixiu.StudentService"
method: "UpdateStudentByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -68,10 +69,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "TeacherService"
interface: "com.dubbogo.pixiu.TeacherService"
method: "GetTeacherByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -85,12 +86,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "TeacherService"
interface: "com.dubbogo.pixiu.TeacherService"
method: "UpdateTeacherByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/zh-cn/dubbo-query.md b/docs/sample/zh-cn/dubbo-query.md
index f9b5425..c3263bf 100644
--- a/docs/sample/zh-cn/dubbo-query.md
+++ b/docs/sample/zh-cn/dubbo-query.md
@@ -13,82 +13,66 @@ resources:
- path: '/api/v1/test-dubbo/userByName'
type: restful
description: user
- filters:
- - filter0
methods:
- httpVerb: GET
onAir: true
timeout: 1000ms
inboundRequest:
requestType: http
- queryStrings:
- - name: name
- required: true
integrationRequest:
requestType: dubbo
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByName"
- paramTypes: [ "java.lang.String" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
- path: '/api/v1/test-dubbo/userByNameAndAge'
type: restful
description: user
- filters:
- - filter0
methods:
- httpVerb: GET
onAir: true
timeout: 1000ms
inboundRequest:
requestType: http
- queryStrings:
- - name: name
- required: true
- - name: age
- required: true
integrationRequest:
requestType: dubbo
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
- name: queryStrings.age
mapTo: 1
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "java.lang.String","java.lang.Integer" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
- path: '/api/v1/test-dubbo/userByCode'
type: restful
description: user
- filters:
- - filter0
methods:
- httpVerb: GET
onAir: true
timeout: 1000ms
inboundRequest:
requestType: http
- queryStrings:
- - name: code
- required: true
integrationRequest:
requestType: dubbo
mappingParams:
- name: queryStrings.code
mapTo: 0
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByCode"
- paramTypes: [ "java.lang.Integer" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/docs/sample/zh-cn/dubbo-universality.md
b/docs/sample/zh-cn/dubbo-universality.md
index f17e404..754c0ac 100644
--- a/docs/sample/zh-cn/dubbo-universality.md
+++ b/docs/sample/zh-cn/dubbo-universality.md
@@ -25,44 +25,20 @@ resources:
requestType: dubbo
mappingParams:
- name: requestBody.values
- mapTo: 0
- opt:
- open: true
- usable: true
- name: values
+ mapTo: opt.values
- name: requestBody.types
- mapTo: 1
- opt:
- open: true
- name: types
+ mapTo: opt.types
- name: uri.application
- mapTo: 2
- opt:
- open: true
- name: application
+ mapTo: opt.application
- name: uri.interface
- mapTo: 3
- opt:
- open: true
- name: interface
+ mapTo: opt.interface
- name: queryStrings.method
- mapTo: 4
- opt:
- open: true
- name: method
+ mapTo: opt.method
- name: queryStrings.group
- mapTo: 5
- opt:
- open: true
- name: group
+ mapTo: opt.group
- name: queryStrings.version
- mapTo: 6
- opt:
- open: true
- name: version
- paramTypes: ["object", "object", "string", "string", "string",
"string", "string"]
- # 这个是必须注意的,实际传给 dubbo 的 paramTypes,在最终调用的时候优先级高于 paramTypes。
- toParamTypes: ["string"]
+ mapTo: opt.version
+ # Notice: this is the really paramTypes to dubbo service, it takes
precedence over paramTypes when it is finally called.
clusterName: "test_dubbo"
```
@@ -134,7 +110,7 @@ const (
#### 选择项
-组装泛化调用的参数
+在mapTo 里面使用特定的关键字(列表如下),貔貅可以自动组装泛化调用的参数
```go
// GenericService uses for generic invoke for service call
@@ -144,33 +120,33 @@ type GenericService struct {
}
```
-- types
+- opt.types
> dubbo 泛化类型
用于 dubbogo `GenericService#Invoke` 函数的第二个参数。
-- method
+- opt.method
用于 dubbogo `GenericService#Invoke` 函数的第一个参数。
-- group
+- opt.group
Dubbo 组配置 `ReferenceConfig#Group`。
-- version
+- opt.version
Dubbo 版本配置 `ReferenceConfig#Version`。
-- interface
+- opt.interface
Dubbo 接口配置 `ReferenceConfig#InterfaceName`。
-- application
+- opt.application
目前暂时用于缓存,索引的一部分查找对应的缓存对象。
-- values
+- opt.values
值的处理,用于 `GenericService#Invoke` 函数的第三个参数。
diff --git a/docs/sample/zh-cn/dubbo-uri.md b/docs/sample/zh-cn/dubbo-uri.md
index ba34449..b0f0f6f 100644
--- a/docs/sample/zh-cn/dubbo-uri.md
+++ b/docs/sample/zh-cn/dubbo-uri.md
@@ -27,10 +27,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -51,10 +51,10 @@ resources:
mappingParams:
- name: uri.code
mapTo: 0
+ mapType: "int"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByCode"
- paramTypes: [ "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -77,12 +77,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: uri.age
mapTo: 1
+ mapType: "int"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "string", "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/go.mod b/go.mod
index ca0a8ca..00bcf21 100644
--- a/go.mod
+++ b/go.mod
@@ -6,15 +6,17 @@ require (
github.com/apache/dubbo-go v1.5.5
github.com/apache/dubbo-go-hessian2 v1.7.0
github.com/coreos/etcd v3.3.25+incompatible
- github.com/dubbogo/dubbo-go-pixiu-filter v0.1.3
+ github.com/dubbogo/dubbo-go-pixiu-filter
v0.1.4-0.20210427062645-0bec837d429e
github.com/dubbogo/go-zookeeper v1.0.2
github.com/emirpasic/gods v1.12.0
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32
github.com/goinggo/mapstructure v0.0.0-20140717182941-194205d9b4a9
github.com/hashicorp/consul/api v1.5.0
github.com/pkg/errors v0.9.1
+ github.com/shirou/gopsutil v3.21.3+incompatible // indirect
github.com/spf13/cast v1.3.1
github.com/stretchr/testify v1.6.1
+ github.com/tklauser/go-sysconf v0.3.5 // indirect
github.com/urfave/cli v1.22.4
go.uber.org/zap v1.16.0
google.golang.org/grpc v1.26.0
diff --git a/go.sum b/go.sum
index b5bdb87..c9fb8de 100644
--- a/go.sum
+++ b/go.sum
@@ -230,8 +230,8 @@ github.com/docker/go-connections v0.4.0
h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKoh
github.com/docker/go-connections v0.4.0/go.mod
h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
github.com/docker/go-units v0.4.0/go.mod
h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod
h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
-github.com/dubbogo/dubbo-go-pixiu-filter v0.1.3
h1:AkOubLd9pCYfX+94wux6Z2+OB9G0tGI/r5Q1uYA17ps=
-github.com/dubbogo/dubbo-go-pixiu-filter v0.1.3/go.mod
h1:d6SDK5BHl/QCvg84BN+g6LZS9QzVqnI2+yw0NBu0uac=
+github.com/dubbogo/dubbo-go-pixiu-filter v0.1.4-0.20210427062645-0bec837d429e
h1:0d1cHanEYqLu/WRwvTe4Y2zeCeeiimVqFKTL5QXAxAs=
+github.com/dubbogo/dubbo-go-pixiu-filter
v0.1.4-0.20210427062645-0bec837d429e/go.mod
h1:d6SDK5BHl/QCvg84BN+g6LZS9QzVqnI2+yw0NBu0uac=
github.com/dubbogo/go-zookeeper v1.0.2
h1:xmEnPL8SlCe3/+J5ZR9e8qE35LmFVYe8VVpDakjNM4A=
github.com/dubbogo/go-zookeeper v1.0.2/go.mod
h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c=
github.com/dubbogo/gost v1.9.0/go.mod
h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8=
@@ -852,8 +852,9 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529
h1:nn5Wsu0esKSJiIVhscUt
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod
h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sergi/go-diff v1.1.0/go.mod
h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shirou/gopsutil v0.0.0-20181107111621-48177ef5f880/go.mod
h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
-github.com/shirou/gopsutil v2.19.12+incompatible
h1:WRstheAymn1WOPesh+24+bZKFkqrdCR8JOc77v4xV3Q=
github.com/shirou/gopsutil v2.19.12+incompatible/go.mod
h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/shirou/gopsutil v3.21.3+incompatible
h1:uenXGGa8ESCQq+dbgtl916dmg6PSAz2cXov0uORQ9v8=
+github.com/shirou/gopsutil v3.21.3+incompatible/go.mod
h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod
h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod
h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shurcooL/sanitized_anchor_name v1.0.0
h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
@@ -923,6 +924,10 @@ github.com/tevid/gohamcrest v1.1.1/go.mod
h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZ
github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7/go.mod
h1:imsgLplxEC/etjIhdr3dNzV3JeT27LbVu5pYWm0JCBY=
github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU=
github.com/tinylib/msgp v1.1.0/go.mod
h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
+github.com/tklauser/go-sysconf v0.3.5
h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4=
+github.com/tklauser/go-sysconf v0.3.5/go.mod
h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI=
+github.com/tklauser/numcpus v0.2.2
h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA=
+github.com/tklauser/numcpus v0.2.2/go.mod
h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod
h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod
h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc
h1:yUaosFVTJwnltaHbSNC3i82I92quFs+OFPRl8kNMVwo=
@@ -1137,8 +1142,9 @@ golang.org/x/sys
v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211
h1:9UQO31fZ+0aKQOFldThf7BKPMJTiBfWycGh/u3UoO88=
golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa
h1:ZYxPR6aca/uhfRJyaOAtflSHjJYiktO7QnJC5ut7iY4=
+golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/pkg/client/client.go b/pkg/client/client.go
index 53eed5d..7f1b991 100644
--- a/pkg/client/client.go
+++ b/pkg/client/client.go
@@ -39,33 +39,5 @@ type MapOption map[string]RequestOption
// RequestOption option interface.
type RequestOption interface {
- // Usable if option can use
- Usable() bool
- // SetUsable set usable
- SetUsable(b bool)
- // Action do with val for special
- Action(req *Request, val interface{})
- // VirtualPos virtual position
- VirtualPos() int
-}
-
-// CommonOption common opt.
-type CommonOption struct {
- usable bool
- RequestOption
-}
-
-// Usable get usable.
-func (opt *CommonOption) Usable() bool {
- return opt.usable
-}
-
-// SetUsable set usable.
-func (opt *CommonOption) SetUsable(b bool) {
- opt.usable = b
-}
-
-// VirtualPos virtual position, default 0.
-func (opt *CommonOption) VirtualPos() int {
- return 0
+ Action(target, val interface{}) error
}
diff --git a/pkg/client/dubbo/dubbo.go b/pkg/client/dubbo/dubbo.go
index 49f93e3..64213a8 100644
--- a/pkg/client/dubbo/dubbo.go
+++ b/pkg/client/dubbo/dubbo.go
@@ -29,13 +29,13 @@ import (
dg "github.com/apache/dubbo-go/config"
"github.com/apache/dubbo-go/protocol/dubbo"
fc "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/api/config"
+ "github.com/pkg/errors"
)
import (
"github.com/apache/dubbo-go-pixiu/pkg/client"
"github.com/apache/dubbo-go-pixiu/pkg/config"
"github.com/apache/dubbo-go-pixiu/pkg/logger"
- "github.com/pkg/errors"
)
// TODO java class name elem
@@ -140,7 +140,11 @@ func (dc *Client) Close() error {
// Call invoke service
func (dc *Client) Call(req *client.Request) (res interface{}, err error) {
- types, values, err := dc.genericArgs(req)
+ values, err := dc.genericArgs(req)
+ val, ok := values.(*dubboTarget)
+ if !ok {
+ return nil, errors.New("map parameters failed")
+ }
if err != nil {
return nil, err
}
@@ -148,11 +152,11 @@ func (dc *Client) Call(req *client.Request) (res
interface{}, err error) {
dm := req.API.Method.IntegrationRequest
method := dm.Method
- logger.Debugf("[dubbo-go-pixiu] dubbo invoke, method:%s, types:%s,
reqData:%v", method, types, values)
+ logger.Debugf("[dubbo-go-pixiu] dubbo invoke, method:%s, types:%s,
reqData:%v", method, val.Types, val.Values)
gs := dc.Get(dm)
- rst, err := gs.Invoke(req.Context, []interface{}{method, types, values})
+ rst, err := gs.Invoke(req.Context, []interface{}{method, val.Types,
val.Values})
if err != nil {
return nil, err
}
@@ -162,33 +166,26 @@ func (dc *Client) Call(req *client.Request) (res
interface{}, err error) {
return rst, nil
}
-func (dc *Client) genericArgs(req *client.Request) ([]string, interface{},
error) {
+func (dc *Client) genericArgs(req *client.Request) (interface{}, error) {
values, err := dc.MapParams(req)
- types := req.API.IntegrationRequest.ParamTypes
- if len(req.API.IntegrationRequest.ToParamTypes) > 0 {
- types = req.API.IntegrationRequest.ToParamTypes
- }
if err != nil {
- return nil, nil, err
+ return nil, err
}
- return types, values, nil
+ return values, nil
}
// MapParams params mapping to api.
func (dc *Client) MapParams(req *client.Request) (interface{}, error) {
r := req.API.Method.IntegrationRequest
- if len(r.ParamTypes) != len(r.MappingParams) {
- return nil, errors.New("Numbers of param types and
paramMappings are not the same")
- }
- var values []interface{}
+ values := newDubboTarget(r.MappingParams)
for _, mappingParam := range r.MappingParams {
source, _, err := client.ParseMapSource(mappingParam.Name)
if err != nil {
return nil, err
}
if mapper, ok := mappers[source]; ok {
- if err := mapper.Map(mappingParam, req, &values,
buildOption(mappingParam)); err != nil {
+ if err := mapper.Map(mappingParam, req, values,
buildOption(mappingParam)); err != nil {
return nil, err
}
}
@@ -198,14 +195,10 @@ func (dc *Client) MapParams(req *client.Request)
(interface{}, error) {
func buildOption(conf fc.MappingParam) client.RequestOption {
var opt client.RequestOption
- if conf.Opt.Open {
- matchOpt, ok := DefaultMapOption[conf.Opt.Name]
- if ok {
- matchOpt.SetUsable(conf.Opt.Usable)
- }
- opt = matchOpt
+ isGeneric, mapToType := getGenericMapTo(conf.MapTo)
+ if isGeneric {
+ opt = DefaultMapOption[mapToType]
}
-
return opt
}
diff --git a/pkg/client/dubbo/dubbo_test.go b/pkg/client/dubbo/dubbo_test.go
index b3eae1a..8dcf922 100644
--- a/pkg/client/dubbo/dubbo_test.go
+++ b/pkg/client/dubbo/dubbo_test.go
@@ -95,118 +95,113 @@ func TestMappingParams(t *testing.T) {
api := mock.GetMockAPI(config.MethodGet, "/mock/test")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
- Name: "queryStrings.id",
- MapTo: "0",
+ Name: "queryStrings.id",
+ MapTo: "0",
+ MapType: "string",
},
{
- Name: "queryStrings.age",
- MapTo: "1",
+ Name: "queryStrings.age",
+ MapTo: "1",
+ MapType: "int",
},
}
- api.IntegrationRequest.ParamTypes = []string{
- "string",
- "int",
- }
req := client.NewReq(context.TODO(), r, api)
params, err := dClient.MapParams(req)
assert.Nil(t, err)
- assert.Equal(t, params.([]interface{})[0], "12345")
- assert.Equal(t, params.([]interface{})[1], int32(19))
+ assert.Equal(t, params.(*dubboTarget).Values[0], "12345")
+ assert.Equal(t, params.(*dubboTarget).Values[1], int(19))
r, _ = http.NewRequest("GET", "/mock/test?id=12345&age=19",
bytes.NewReader([]byte("")))
api = mock.GetMockAPI(config.MethodGet, "/mock/test")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
- Name: "queryStrings.id",
- MapTo: "0",
+ Name: "queryStrings.id",
+ MapTo: "0",
+ MapType: "string",
},
{
- Name: "queryStrings.age",
- MapTo: "1",
+ Name: "queryStrings.age",
+ MapTo: "1",
+ MapType: "int",
},
{
- Name: "headers.Auth",
- MapTo: "2",
+ Name: "headers.Auth",
+ MapTo: "2",
+ MapType: "string",
},
}
- api.IntegrationRequest.ParamTypes = []string{
- "string",
- "int",
- "string",
- }
r.Header.Set("Auth", "1234567")
req = client.NewReq(context.TODO(), r, api)
params, err = dClient.MapParams(req)
assert.Nil(t, err)
- assert.Equal(t, params.([]interface{})[0], "12345")
- assert.Equal(t, params.([]interface{})[1], int32(19))
- assert.Equal(t, params.([]interface{})[2], "1234567")
+ assert.Equal(t, params.(*dubboTarget).Values[0], "12345")
+ assert.Equal(t, params.(*dubboTarget).Values[1], int(19))
+ assert.Equal(t, params.(*dubboTarget).Values[2], "1234567")
r, _ = http.NewRequest("POST", "/mock/test?id=12345&age=19",
bytes.NewReader([]byte(`{"sex": "male", "name":{"firstName": "Joe", "lastName":
"Biden"}}`)))
api = mock.GetMockAPI(config.MethodGet, "/mock/test")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
- Name: "queryStrings.id",
- MapTo: "0",
+ Name: "queryStrings.id",
+ MapTo: "0",
+ MapType: "string",
},
{
- Name: "queryStrings.age",
- MapTo: "1",
+ Name: "queryStrings.age",
+ MapTo: "1",
+ MapType: "int",
},
{
- Name: "headers.Auth",
- MapTo: "2",
+ Name: "headers.Auth",
+ MapTo: "2",
+ MapType: "string",
},
{
- Name: "requestBody.sex",
- MapTo: "3",
+ Name: "requestBody.sex",
+ MapTo: "3",
+ MapType: "string",
},
{
- Name: "requestBody.name.firstName",
- MapTo: "4",
+ Name: "requestBody.name.firstName",
+ MapTo: "4",
+ MapType: "java.lang.String",
},
}
- api.IntegrationRequest.ParamTypes = []string{
- "string",
- "int",
- "string",
- "string",
- "java.lang.String",
- }
r.Header.Set("Auth", "1234567")
req = client.NewReq(context.TODO(), r, api)
params, err = dClient.MapParams(req)
assert.Nil(t, err)
- assert.Equal(t, params.([]interface{})[0], "12345")
- assert.Equal(t, params.([]interface{})[1], int32(19))
- assert.Equal(t, params.([]interface{})[2], "1234567")
- assert.Equal(t, params.([]interface{})[3], "male")
- assert.Equal(t, params.([]interface{})[4], "Joe")
+ assert.Equal(t, params.(*dubboTarget).Values[0], "12345")
+ assert.Equal(t, params.(*dubboTarget).Values[1], int(19))
+ assert.Equal(t, params.(*dubboTarget).Values[2], "1234567")
+ assert.Equal(t, params.(*dubboTarget).Values[3], "male")
+ assert.Equal(t, params.(*dubboTarget).Values[4], "Joe")
}
func TestBuildOption(t *testing.T) {
mp := config.MappingParam{
- Name: "queryStrings.id",
- MapTo: "0",
- Opt: config.Opt{
- Name: optionKeyGroup,
- Open: true,
- Usable: false,
- },
+ Name: "queryStrings.id",
+ MapTo: "0",
+ MapType: "string",
}
option := buildOption(mp)
- assert.NotNil(t, option)
- assert.Equal(t, false, option.Usable())
+ assert.Nil(t, option)
mp = config.MappingParam{
- Name: "queryStrings.id",
- MapTo: "0",
- Opt: config.Opt{
- Name: "other",
- Open: true,
- Usable: false,
- },
+ Name: "queryStrings.id",
+ MapTo: "opt.whatsoever",
+ MapType: "",
}
option = buildOption(mp)
assert.Nil(t, option)
+
+ mp = config.MappingParam{
+ Name: "queryStrings.id",
+ MapTo: "opt.interface",
+ MapType: "",
+ }
+ option = buildOption(mp)
+ assert.NotNil(t, option)
+ _, ok := option.(*interfaceOpt)
+ assert.True(t, ok)
}
diff --git a/pkg/client/dubbo/mapper.go b/pkg/client/dubbo/mapper.go
index f51f731..f697ec2 100644
--- a/pkg/client/dubbo/mapper.go
+++ b/pkg/client/dubbo/mapper.go
@@ -24,6 +24,7 @@ import (
"net/url"
"reflect"
"strconv"
+ "strings"
"time"
)
@@ -46,11 +47,39 @@ var mappers = map[string]client.ParamMapper{
constant.RequestURI: uriMapper{},
}
+type dubboTarget struct {
+ Values []interface{} // the slice contains the parameters.
+ Types []string // the slice contains the parameters' types. It
should match the values one by one.
+}
+
+// pre-allocate proper memory according to the params' usability.
+func newDubboTarget(mps []config.MappingParam) *dubboTarget {
+ length := 0
+
+ for i := 0; i < len(mps); i++ {
+ isGeneric, v := getGenericMapTo(mps[i].MapTo)
+ if isGeneric && v != optionKeyValues {
+ continue
+ }
+ length++
+ }
+
+ if length > 0 {
+ val := make([]interface{}, length)
+ target := &dubboTarget{
+ Values: val,
+ Types: make([]string, length),
+ }
+ return target
+ }
+ return nil
+}
+
type queryStringsMapper struct{}
// nolint
func (qm queryStringsMapper) Map(mp config.MappingParam, c *client.Request,
target interface{}, option client.RequestOption) error {
- rv, err := validateTarget(target)
+ t, err := validateTarget(target)
if err != nil {
return err
}
@@ -71,7 +100,7 @@ func (qm queryStringsMapper) Map(mp config.MappingParam, c
*client.Request, targ
return errors.Errorf("Query parameter %s does not exist", key)
}
- return setTargetWithOpt(c, option, rv, pos, qValue,
c.API.IntegrationRequest.ParamTypes[pos])
+ return setTargetWithOpt(c, option, t, pos, qValue, mp.MapType)
}
type headerMapper struct{}
@@ -85,14 +114,14 @@ func (hm headerMapper) Map(mp config.MappingParam, c
*client.Request, target int
_, key, err := client.ParseMapSource(mp.Name)
pos, err := strconv.Atoi(mp.MapTo)
if err != nil {
- return errors.Errorf("Parameter mapping %v incorrect", mp)
+ return errors.Errorf("Parameter mapping %+v incorrect", mp)
}
header := c.IngressRequest.Header.Get(key[0])
if len(header) == 0 {
return errors.Errorf("Header %s not found", key[0])
}
- return setTargetWithOpt(c, option, rv, pos, header,
c.API.IntegrationRequest.ParamTypes[pos])
+ return setTargetWithOpt(c, option, rv, pos, header, mp.MapType)
}
type bodyMapper struct{}
@@ -110,7 +139,7 @@ func (bm bodyMapper) Map(mp config.MappingParam, c
*client.Request, target inter
}
pos, err := strconv.Atoi(mp.MapTo)
if err != nil {
- return errors.Errorf("Parameter mapping %v incorrect", mp)
+ return errors.Errorf("Parameter mapping %v incorrect,
parameters for Dubbo backend must be mapped to an int to represent position",
mp)
}
rawBody, err := ioutil.ReadAll(c.IngressRequest.Body)
@@ -124,7 +153,7 @@ func (bm bodyMapper) Map(mp config.MappingParam, c
*client.Request, target inter
json.Unmarshal(rawBody, &mapBody)
val, err := client.GetMapValue(mapBody, keys)
- if err := setTargetWithOpt(c, option, rv, pos, val,
c.API.IntegrationRequest.ParamTypes[pos]); err != nil {
+ if err := setTargetWithOpt(c, option, rv, pos, val, mp.MapType); err !=
nil {
return errors.Wrap(err, "set target fail")
}
@@ -150,85 +179,57 @@ func (um uriMapper) Map(mp config.MappingParam, c
*client.Request, target interf
}
uriValues := router.GetURIParams(&c.API, *c.IngressRequest.URL)
- return setTargetWithOpt(c, option, rv, pos, uriValues.Get(keys[0]),
c.API.IntegrationRequest.ParamTypes[pos])
+ return setTargetWithOpt(c, option, rv, pos, uriValues.Get(keys[0]),
mp.MapType)
}
// validateTarget verify if the incoming target for the Map function
// can be processed as expected.
-func validateTarget(target interface{}) (reflect.Value, error) {
- rv := reflect.ValueOf(target)
- if rv.Kind() != reflect.Ptr || rv.IsNil() {
- return rv, errors.New("Target params must be a non-nil pointer")
- }
- if _, ok := target.(*[]interface{}); !ok {
- return rv, errors.New("Target params for dubbo backend must be
*[]interface{}")
+func validateTarget(target interface{}) (*dubboTarget, error) {
+ val, ok := target.(*dubboTarget)
+ if !ok {
+ return nil, errors.New("Target params for dubbo backend must be
*dubbogoTarget")
}
- return rv, nil
+ return val, nil
}
-func setTargetWithOpt(req *client.Request, option client.RequestOption, rv
reflect.Value, pos int, value interface{}, targetType string) error {
+func setTargetWithOpt(req *client.Request, option client.RequestOption,
+ target *dubboTarget, pos int, value interface{}, targetType string)
error {
+ if option != nil {
+ return setGenericTarget(req, option, target, value, targetType)
+ }
value, err := mapTypes(targetType, value)
if err != nil {
return err
}
- newPos := pos
-
- if option != nil {
- option.Action(req, value)
-
- if option.VirtualPos() != 0 {
- newPos = option.VirtualPos()
- }
-
- if option.Usable() {
- setTarget(rv, newPos, value)
- }
-
- return nil
- }
-
- setTarget(rv, newPos, value)
-
+ setCommonTarget(target, pos, value, targetType)
return nil
}
-func setTarget(rv reflect.Value, pos int, value interface{}) {
- if rv.Kind() != reflect.Ptr && rv.Type().Name() != "" && rv.CanAddr() {
- rv = rv.Addr()
- } else {
- rv = rv.Elem()
- }
-
- tempValue := rv.Interface().([]interface{})
-
- // for dubbo values split, like RequestOption
- // When config mapTo -1, values is single object, set to 0 position,
values is array, will auto split len(values).
- //
- if pos == -1 {
- v, ok := value.([]interface{})
- if ok {
- npos := len(v) - 1
- if len(tempValue) <= npos {
- list := make([]interface{},
npos+1-len(tempValue))
- tempValue = append(tempValue, list...)
- }
- for i := range v {
- s := v[i]
- tempValue[i] = s
- }
- rv.Set(reflect.ValueOf(tempValue))
- return
- }
-
- pos = 0
+func setGenericTarget(req *client.Request, option client.RequestOption,
+ target *dubboTarget, value interface{}, targetType string) error {
+ var err error
+ switch option.(type) {
+ case *groupOpt, *versionOpt, *interfaceOpt, *applicationOpt, *methodOpt:
+ err = option.Action(req, value)
+ case *valuesOpt:
+ err = option.Action(target, [2]interface{}{value, targetType})
+ case *paramTypesOpt:
+ err = option.Action(target, value)
}
+ return err
+}
- if len(tempValue) <= pos {
- list := make([]interface{}, pos+1-len(tempValue))
- tempValue = append(tempValue, list...)
+func setCommonTarget(target *dubboTarget, pos int, value interface{},
targetType string) {
+ // if the mapTo position is greater than the numbers of usable
parameters,
+ // extend the values and types slices. It changes the address of the
the target.
+ if cap(target.Values) <= pos {
+ list := make([]interface{}, pos+1-len(target.Values))
+ typeList := make([]string, pos+1-len(target.Types))
+ target.Values = append(target.Values, list...)
+ target.Types = append(target.Types, typeList...)
}
- tempValue[pos] = value
- rv.Set(reflect.ValueOf(tempValue))
+ target.Values[pos] = value
+ target.Types[pos] = targetType
}
func mapTypes(jType string, originVal interface{}) (interface{}, error) {
@@ -239,17 +240,40 @@ func mapTypes(jType string, originVal interface{})
(interface{}, error) {
switch targetType {
case reflect.TypeOf(""):
return cast.ToStringE(originVal)
+ case reflect.TypeOf(int(0)):
+ return cast.ToIntE(originVal)
+ case reflect.TypeOf(int8(0)):
+ return cast.ToInt8E(originVal)
+ case reflect.TypeOf(int16(16)):
+ return cast.ToInt16E(originVal)
case reflect.TypeOf(int32(0)):
return cast.ToInt32E(originVal)
case reflect.TypeOf(int64(0)):
return cast.ToInt64E(originVal)
+ case reflect.TypeOf(float32(0)):
+ return cast.ToFloat32E(originVal)
case reflect.TypeOf(float64(0)):
return cast.ToFloat64E(originVal)
case reflect.TypeOf(true):
return cast.ToBoolE(originVal)
case reflect.TypeOf(time.Time{}):
- return cast.ToBoolE(originVal)
+ return cast.ToTimeE(originVal)
default:
return originVal, nil
}
}
+
+// getGenericMapTo will parse the mapTo field, if the mapTo value is
+// opt.xxx, the "opt." prefix will identify the param mapTo generic field,
+// supporting generic fields: interface, group, application, method, version,
+// values, types
+func getGenericMapTo(mapTo string) (isGeneric bool, genericField string) {
+ fields := strings.Split(mapTo, ".")
+ if len(fields) != 2 || fields[0] != "opt" {
+ return false, ""
+ }
+ if _, ok := DefaultMapOption[fields[1]]; !ok {
+ return false, ""
+ }
+ return true, fields[1]
+}
diff --git a/pkg/client/dubbo/mapper_test.go b/pkg/client/dubbo/mapper_test.go
index 8998fd3..166b6a2 100644
--- a/pkg/client/dubbo/mapper_test.go
+++ b/pkg/client/dubbo/mapper_test.go
@@ -39,61 +39,68 @@ func TestQueryStringsMapper(t *testing.T) {
api := mock.GetMockAPI(config.MethodGet, "/mock/test")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
- Name: "queryStrings.id",
- MapTo: "0",
+ Name: "queryStrings.id",
+ MapTo: "0",
+ MapType: "string",
},
{
- Name: "queryStrings.name",
- MapTo: "1",
+ Name: "queryStrings.name",
+ MapTo: "1",
+ MapType: "string",
},
{
- Name: "queryStrings.age",
- MapTo: "jk",
+ Name: "queryStrings.age",
+ MapTo: "jk",
+ MapType: "int",
},
}
- api.IntegrationRequest.ParamTypes = []string{
- "string",
- "string",
- "int",
- }
+
req := client.NewReq(context.TODO(), r, api)
- var params []interface{}
+ params := newDubboTarget(api.IntegrationRequest.MappingParams)
qs := queryStringsMapper{}
- err := qs.Map(api.IntegrationRequest.MappingParams[0], req, ¶ms,
nil)
+ // Giving valid mapping params
+ err := qs.Map(api.IntegrationRequest.MappingParams[0], req, params, nil)
+ // it should not return error
assert.Nil(t, err)
- assert.Equal(t, params[0], "12345")
- err = qs.Map(api.IntegrationRequest.MappingParams[1], req, ¶ms, nil)
+ // it should update the target value in target position from
corresponding query value in request.
+ assert.Equal(t, params.Values[0], "12345")
+ assert.Equal(t, params.Types[0], "string")
+ // Giving valid mapping params and same target
+ err = qs.Map(api.IntegrationRequest.MappingParams[1], req, params, nil)
+ // it should return error when request does not contain the source
parameter
assert.EqualError(t, err, "Query parameter [name] does not exist")
- err = qs.Map(api.IntegrationRequest.MappingParams[2], req, ¶ms, nil)
- assert.EqualError(t, err, "Parameter mapping {queryStrings.age jk {
false false}} incorrect")
+ // Giving invalid mapping params that is not a number and same target
+ err = qs.Map(api.IntegrationRequest.MappingParams[2], req, params, nil)
+ // it should return error that points out the mapping param
+ assert.EqualError(t, err, "Parameter mapping {queryStrings.age jk int}
incorrect")
r, _ = http.NewRequest("GET", "/mock/test?id=12345&age=19",
bytes.NewReader([]byte("")))
api = mock.GetMockAPI(config.MethodGet, "/mock/test")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
- Name: "queryStrings.id",
- MapTo: "1",
+ Name: "queryStrings.id",
+ MapTo: "1",
+ MapType: "string",
},
{
- Name: "queryStrings.age",
- MapTo: "0",
+ Name: "queryStrings.age",
+ MapTo: "0",
+ MapType: "int",
},
}
- api.IntegrationRequest.ParamTypes = []string{
- "string",
- "string",
- }
+
req = client.NewReq(context.TODO(), r, api)
- params = []interface{}{}
- err = qs.Map(api.IntegrationRequest.MappingParams[0], req, ¶ms, nil)
+ params = newDubboTarget(api.IntegrationRequest.MappingParams)
+ err = qs.Map(api.IntegrationRequest.MappingParams[0], req, params, nil)
assert.Nil(t, err)
- assert.Equal(t, params[1], "12345")
- assert.Nil(t, params[0])
- err = qs.Map(api.IntegrationRequest.MappingParams[1], req, ¶ms, nil)
+ assert.Equal(t, params.Values[1], "12345")
+ assert.Equal(t, params.Types[1], "string")
+ assert.Nil(t, params.Values[0])
+ err = qs.Map(api.IntegrationRequest.MappingParams[1], req, params, nil)
assert.Nil(t, err)
- assert.Equal(t, params[1], "12345")
- assert.Equal(t, params[0], "19")
+ assert.Equal(t, params.Types[0], "int")
+ assert.Equal(t, params.Values[0], 19)
}
func TestHeaderMapper(t *testing.T) {
@@ -102,22 +109,21 @@ func TestHeaderMapper(t *testing.T) {
api := mock.GetMockAPI(config.MethodGet, "/mock/test")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
- Name: "headers.Auth",
- MapTo: "0",
+ Name: "headers.Auth",
+ MapTo: "0",
+ MapType: "string",
},
}
- api.IntegrationRequest.ParamTypes = []string{
- "string",
- }
hm := headerMapper{}
- target := []interface{}{}
+ target := newDubboTarget(api.IntegrationRequest.MappingParams)
req := client.NewReq(context.TODO(), r, api)
- err := hm.Map(api.IntegrationRequest.MappingParams[0], req, &target,
nil)
+ err := hm.Map(api.IntegrationRequest.MappingParams[0], req, target, nil)
assert.Nil(t, err)
- assert.Equal(t, target[0], "1234567")
+ assert.Equal(t, target.Values[0], "1234567")
+ assert.Equal(t, target.Types[0], "string")
- err = hm.Map(config.MappingParam{Name: "headers.Test", MapTo: "0"},
req, &target, nil)
+ err = hm.Map(config.MappingParam{Name: "headers.Test", MapTo: "0"},
req, target, nil)
assert.EqualError(t, err, "Header Test not found")
}
@@ -127,89 +133,100 @@ func TestBodyMapper(t *testing.T) {
api := mock.GetMockAPI(config.MethodGet, "/mock/test")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
- Name: "requestBody.sex",
- MapTo: "0",
+ Name: "requestBody.sex",
+ MapTo: "0",
+ MapType: "string",
},
{
- Name: "requestBody.name.lastName",
- MapTo: "1",
+ Name: "requestBody.name.lastName",
+ MapTo: "1",
+ MapType: "string",
},
{
- Name: "requestBody.name",
- MapTo: "2",
+ Name: "requestBody.name",
+ MapTo: "2",
+ MapType: "object",
},
}
- api.IntegrationRequest.ParamTypes = []string{
- "string",
- "string",
- "object",
- }
bm := bodyMapper{}
- target := []interface{}{}
+ target := newDubboTarget(api.IntegrationRequest.MappingParams)
req := client.NewReq(context.TODO(), r, api)
- err := bm.Map(api.IntegrationRequest.MappingParams[0], req, &target,
nil)
+ err := bm.Map(api.IntegrationRequest.MappingParams[0], req, target, nil)
assert.Nil(t, err)
- assert.Equal(t, target[0], "male")
+ assert.Equal(t, target.Values[0], "male")
+ assert.Equal(t, target.Types[0], "string")
- err = bm.Map(api.IntegrationRequest.MappingParams[1], req, &target, nil)
+ err = bm.Map(api.IntegrationRequest.MappingParams[1], req, target, nil)
assert.Nil(t, err)
- assert.Equal(t, target[1], "Biden")
+ assert.Equal(t, target.Values[1], "Biden")
+ assert.Equal(t, target.Types[1], "string")
- err = bm.Map(api.IntegrationRequest.MappingParams[2], req, &target, nil)
+ err = bm.Map(api.IntegrationRequest.MappingParams[2], req, target, nil)
assert.Nil(t, err)
- assert.Equal(t, target[2],
map[string]interface{}(map[string]interface{}{"firstName": "Joe", "lastName":
"Biden"}))
+ assert.Equal(t, target.Types[2], "object")
+ assert.Equal(t, target.Values[2],
map[string]interface{}(map[string]interface{}{
+ "firstName": "Joe", "lastName": "Biden",
+ }))
}
func TestURIMapper(t *testing.T) {
- r, _ := http.NewRequest("POST", "/mock/12345/joe?age=19",
bytes.NewReader([]byte(`{"sex": "male", "name":{"firstName": "Joe", "lastName":
"Biden"}}`)))
+ r, _ := http.NewRequest("POST", "/mock/12345/joe?age=19",
bytes.NewReader([]byte(
+ `{"sex": "male", "name":{"firstName": "Joe", "lastName":
"Biden"}}`)))
r.Header.Set("Auth", "1234567")
api := mock.GetMockAPI(config.MethodGet, "/mock/:id/:name")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
- Name: "requestBody.sex",
- MapTo: "0",
+ Name: "requestBody.sex",
+ MapTo: "0",
+ MapType: "string",
},
{
- Name: "requestBody.name.lastName",
- MapTo: "1",
+ Name: "requestBody.name.lastName",
+ MapTo: "1",
+ MapType: "string",
},
{
- Name: "uri.name",
- MapTo: "2",
+ Name: "uri.name",
+ MapTo: "2",
+ MapType: "object",
},
{
- Name: "uri.id",
- MapTo: "3",
+ Name: "uri.id",
+ MapTo: "3",
+ MapType: "string",
},
}
- api.IntegrationRequest.ParamTypes = []string{
- "string",
- "string",
- "object",
- "string",
- }
+
um := uriMapper{}
- target := []interface{}{}
+ target := newDubboTarget(api.IntegrationRequest.MappingParams)
req := client.NewReq(context.TODO(), r, api)
- err := um.Map(api.IntegrationRequest.MappingParams[3], req, &target,
nil)
+ err := um.Map(api.IntegrationRequest.MappingParams[3], req, target, nil)
assert.Nil(t, err)
- err = um.Map(api.IntegrationRequest.MappingParams[2], req, &target, nil)
+ err = um.Map(api.IntegrationRequest.MappingParams[2], req, target, nil)
assert.Nil(t, err)
- assert.Equal(t, target[2], "joe")
- assert.Equal(t, target[3], "12345")
+ assert.Equal(t, target.Values[2], "joe")
+ assert.Equal(t, target.Types[2], "object")
+ assert.Equal(t, target.Values[3], "12345")
+ assert.Equal(t, target.Types[3], "string")
}
func TestValidateTarget(t *testing.T) {
- target := []interface{}{}
- val, err := validateTarget(&target)
+ target := newDubboTarget([]config.MappingParam{
+ {
+ Name: "requestBody.sex",
+ MapTo: "0",
+ MapType: "string",
+ },
+ })
+ val, err := validateTarget(target)
assert.Nil(t, err)
assert.NotNil(t, val)
- _, err = validateTarget(target)
- assert.EqualError(t, err, "Target params must be a non-nil pointer")
+ _, err = validateTarget(*target)
+ assert.EqualError(t, err, "Target params for dubbo backend must be
*dubbogoTarget")
target2 := ""
- _, err = validateTarget(&target2)
- assert.EqualError(t, err, "Target params for dubbo backend must be
*[]interface{}")
+ _, err = validateTarget(target2)
+ assert.EqualError(t, err, "Target params for dubbo backend must be
*dubbogoTarget")
}
func TestMapType(t *testing.T) {
@@ -224,12 +241,12 @@ func TestMapType(t *testing.T) {
val, err = mapTypes("int", "123")
assert.Nil(t, err)
- assert.Equal(t, val, int32(123))
+ assert.Equal(t, val, 123)
val, err = mapTypes("int", 123.6)
assert.Nil(t, err)
- assert.Equal(t, val, int32(123))
+ assert.Equal(t, val, 123)
_, err = mapTypes("int", "123a")
- assert.EqualError(t, err, "unable to cast \"123a\" of type string to
int32")
+ assert.EqualError(t, err, "unable to cast \"123a\" of type string to
int")
val, err = mapTypes("object", map[string]string{"abc": "123"})
assert.Nil(t, err)
@@ -241,3 +258,97 @@ func TestMapType(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, val, 123.6)
}
+
+func TestNewDubboTarget(t *testing.T) {
+ mps := []config.MappingParam{
+ {
+ Name: "string1",
+ MapTo: "0",
+ },
+ {
+ Name: "string2",
+ MapTo: "opt.values",
+ },
+ }
+ target := newDubboTarget(mps)
+ assert.NotNil(t, target)
+ assert.Equal(t, len(target.Values), 2)
+
+ mps = []config.MappingParam{
+ {
+ Name: "string1",
+ MapTo: "opt.interface",
+ },
+ }
+ target = newDubboTarget(mps)
+ assert.Nil(t, target)
+}
+
+func TestSetCommonTarget(t *testing.T) {
+ vals := make([]interface{}, 10)
+ types := make([]string, 10)
+ target := &dubboTarget{
+ Values: vals,
+ Types: types,
+ }
+ setCommonTarget(target, 1, 123, "int")
+ assert.Equal(t, target.Values[1], 123)
+ assert.Equal(t, target.Types[1], "int")
+ assert.Nil(t, target.Values[0])
+ assert.Equal(t, target.Types[0], "")
+ setCommonTarget(target, 10, "123", "string")
+ assert.Equal(t, target.Values[10], "123")
+ assert.Equal(t, target.Types[10], "string")
+}
+
+func TestSetGenericTarget(t *testing.T) {
+ api := mock.GetMockAPI(config.MethodGet, "/mock/test")
+ r, _ := http.NewRequest("GET", "/mock/test?id=12345&age=19",
bytes.NewReader([]byte("")))
+ req := client.NewReq(context.TODO(), r, api)
+
+ target := &dubboTarget{
+ Values: make([]interface{}, 3),
+ Types: make([]string, 3),
+ }
+
+ opt := DefaultMapOption[optionKeyValues]
+ err := setGenericTarget(req, opt, target, []interface{}{1, "abc",
struct{ Name string }{"joe"}}, "int, string, object")
+ assert.Nil(t, err)
+ assert.Equal(t, target.Values[0], 1)
+ assert.Equal(t, target.Values[1], "abc")
+ assert.Equal(t, target.Values[2], struct{ Name string }{"joe"})
+ assert.Equal(t, target.Types[0], "int")
+ assert.Equal(t, target.Types[1], "string")
+ assert.Equal(t, target.Types[2], "object")
+
+ opt = DefaultMapOption[optionKeyTypes]
+ err = setGenericTarget(req, opt, target, "int, object, object", "")
+ assert.Nil(t, err)
+ assert.Equal(t, target.Types[0], "int")
+ assert.Equal(t, target.Types[1], "object")
+ assert.Equal(t, target.Types[2], "object")
+
+ opt = DefaultMapOption[optionKeyInterface]
+ err = setGenericTarget(req, opt, target, "testingInterface", "")
+ assert.Nil(t, err)
+ assert.Equal(t, req.API.IntegrationRequest.Interface,
"testingInterface")
+
+ opt = DefaultMapOption[optionKeyApplication]
+ err = setGenericTarget(req, opt, target, "testingApplication", "")
+ assert.Nil(t, err)
+ assert.Equal(t, req.API.IntegrationRequest.ApplicationName,
"testingApplication")
+}
+
+func TestGetGenericMapTo(t *testing.T) {
+ isGeneric, gMapTo := getGenericMapTo("1")
+ assert.False(t, isGeneric)
+ assert.Equal(t, gMapTo, "")
+
+ isGeneric, gMapTo = getGenericMapTo("opt.interface")
+ assert.True(t, isGeneric)
+ assert.Equal(t, gMapTo, "interface")
+
+ isGeneric, gMapTo = getGenericMapTo("opt.whatever")
+ assert.False(t, isGeneric)
+ assert.Equal(t, gMapTo, "")
+}
diff --git a/pkg/client/dubbo/option.go b/pkg/client/dubbo/option.go
index 72fbdc1..a70a0cc 100644
--- a/pkg/client/dubbo/option.go
+++ b/pkg/client/dubbo/option.go
@@ -17,7 +17,18 @@
package dubbo
-import "github.com/apache/dubbo-go-pixiu/pkg/client"
+import (
+ "strings"
+)
+
+import (
+ "github.com/pkg/errors"
+)
+
+import (
+ "github.com/apache/dubbo-go-pixiu/pkg/client"
+ "github.com/apache/dubbo-go-pixiu/pkg/common/constant"
+)
// option keys
const (
@@ -41,106 +52,159 @@ var DefaultMapOption = client.MapOption{
optionKeyValues: &valuesOpt{},
}
-type paramTypesOpt struct {
- client.CommonOption
-}
+type groupOpt struct{}
// nolint
-func (opt *paramTypesOpt) Action(req *client.Request, val interface{}) {
- //v, ok := val.([]interface{})
- //if !ok {
- // return
- //}
- //
- //var pt []string
- //for i := range v {
- // ptv, ok := v[i].(string)
- // if ok {
- // pt = append(pt, ptv)
- // }
- //}
- //
- //req.API.IntegrationRequest.DubboBackendConfig.ParamTypes = pt
+func (opt *groupOpt) Action(target, val interface{}) error {
+ v, ok := val.(string)
+ if !ok {
+ return errors.New("Group value is not string")
+ }
+ r, ok := target.(*client.Request)
+ if !ok {
+ return errors.New("Target is not *client.Request in value
options")
+ }
+ r.API.IntegrationRequest.DubboBackendConfig.Group = v
+ return nil
}
-type groupOpt struct {
- client.CommonOption
-}
+type versionOpt struct{}
// nolint
-func (opt *groupOpt) Action(req *client.Request, val interface{}) {
+func (opt *versionOpt) Action(target, val interface{}) error {
v, ok := val.(string)
if !ok {
- return
+ return errors.New("Version value is not string")
}
-
- req.API.IntegrationRequest.DubboBackendConfig.Group = v
+ r, ok := target.(*client.Request)
+ if !ok {
+ return errors.New("Target is not *client.Request in value
options")
+ }
+ r.API.IntegrationRequest.DubboBackendConfig.Version = v
+ return nil
}
-type versionOpt struct {
- client.CommonOption
-}
+type methodOpt struct{}
// nolint
-func (opt *versionOpt) Action(req *client.Request, val interface{}) {
+func (opt *methodOpt) Action(target, val interface{}) error {
v, ok := val.(string)
if !ok {
- return
+ return errors.New("Method value is not string")
}
-
- req.API.IntegrationRequest.DubboBackendConfig.Version = v
+ r, ok := target.(*client.Request)
+ if !ok {
+ return errors.New("Target is not *client.Request in value
options")
+ }
+ r.API.IntegrationRequest.DubboBackendConfig.Method = v
+ return nil
}
-type methodOpt struct {
- client.CommonOption
-}
+type applicationOpt struct{}
// nolint
-func (opt *methodOpt) Action(req *client.Request, val interface{}) {
+func (opt *applicationOpt) Action(target, val interface{}) error {
v, ok := val.(string)
if !ok {
- return
+ return errors.New("Application value is not string")
}
-
- req.API.IntegrationRequest.DubboBackendConfig.Method = v
+ r, ok := target.(*client.Request)
+ if !ok {
+ return errors.New("Target is not *client.Request in value
options")
+ }
+ r.API.IntegrationRequest.DubboBackendConfig.ApplicationName = v
+ return nil
}
-type applicationOpt struct {
- client.CommonOption
-}
+type interfaceOpt struct{}
// nolint
-func (opt *applicationOpt) Action(req *client.Request, val interface{}) {
+func (opt *interfaceOpt) Action(target, val interface{}) error {
v, ok := val.(string)
if !ok {
- return
+ return errors.New("Interface value is not string")
}
-
- req.API.IntegrationRequest.DubboBackendConfig.ApplicationName = v
+ r, ok := target.(*client.Request)
+ if !ok {
+ return errors.New("Target is not *client.Request in value
options")
+ }
+ r.API.IntegrationRequest.DubboBackendConfig.Interface = v
+ return nil
}
-type interfaceOpt struct {
- client.CommonOption
-}
+type valuesOpt struct{}
-// nolint
-func (opt *interfaceOpt) Action(req *client.Request, val interface{}) {
- v, ok := val.(string)
+// Action of valuesOpt retrieve value from [2]interface{} then assign to
target, which the first element is the
+// parameter values to dubbo generic call. the second element is string, which
is the types
+// for the generic call, it could be empty or types sep from ','. If empty, it
should retrieve types from
+// another generic option - types.
+func (opt *valuesOpt) Action(target, val interface{}) error {
+ dubboTarget, ok := target.(*dubboTarget)
if !ok {
- return
+ return errors.New("Target is not dubboTarget in value options")
}
+ v, ok := val.([2]interface{})
+ if !ok {
+ return errors.New("The value must be [2]interface{}")
+ }
+ var toVals []interface{}
+ toTypes := []string{}
- req.API.IntegrationRequest.DubboBackendConfig.Interface = v
-}
-
-type valuesOpt struct {
- client.CommonOption
+ if t, tok := v[1].(string); tok && len(t) != 0 {
+ toTypes = strings.Split(t, ",")
+ }
+ if val, vok := v[0].([]interface{}); vok {
+ toVals = val
+ } else {
+ toVals = []interface{}{v[0]}
+ }
+ if !(len(toTypes) != 0 && len(toTypes) == len(toVals)) {
+ dubboTarget.Types = toTypes
+ dubboTarget.Values = toVals
+ return nil
+ }
+ for i := range toVals {
+ trimType := strings.TrimSpace(toTypes[i])
+ if _, ok = constant.JTypeMapper[trimType]; ok {
+ toTypes[i] = trimType
+ } else {
+ return errors.Errorf("Types invalid %s", trimType)
+ }
+ var err error
+ toVals[i], err = mapTypes(toTypes[i], toVals[i])
+ if err != nil {
+ return errors.WithStack(err)
+ }
+ }
+ dubboTarget.Types = toTypes
+ dubboTarget.Values = toVals
+ return nil
}
-// nolint
-func (opt *valuesOpt) Action(req *client.Request, val interface{}) {
-}
+type paramTypesOpt struct{}
-func (opt *valuesOpt) VirtualPos() int {
- return -1
+// Action for paramTypesOpt override the other param types mapping/config.
+// The val must be []string, and will then assign to the
target.(dubboTarget).Types
+func (opt *paramTypesOpt) Action(target, val interface{}) error {
+ v, ok := val.(string)
+ if !ok {
+ return errors.New("The val type must be string")
+ }
+ types := strings.Split(v, ",")
+ dubboTarget, ok := target.(*dubboTarget)
+ if !ok {
+ return errors.New("Target is not dubboTarget in target
parameter")
+ }
+ for i := range types {
+ trimType := strings.TrimSpace(types[i])
+ if len(trimType) == 0 {
+ continue
+ }
+ if _, ok = constant.JTypeMapper[trimType]; !ok {
+ return errors.Errorf("Types invalid %s", trimType)
+ }
+ types[i] = trimType
+ }
+ dubboTarget.Types = types
+ return nil
}
diff --git a/pkg/client/dubbo/option_test.go b/pkg/client/dubbo/option_test.go
new file mode 100644
index 0000000..e8762e5
--- /dev/null
+++ b/pkg/client/dubbo/option_test.go
@@ -0,0 +1,97 @@
+/*
+ * 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.
+ */
+
+package dubbo
+
+import (
+ "testing"
+)
+
+import (
+ "github.com/stretchr/testify/assert"
+)
+
+func TestValuesOpt(t *testing.T) {
+ opt := &valuesOpt{}
+ target := &dubboTarget{
+ Values: make([]interface{}, 3),
+ Types: make([]string, 3),
+ }
+ vals := []interface{}{
+ struct{ Name string }{"joe"},
+ "abc",
+ 123,
+ }
+ err := opt.Action(target, [2]interface{}{
+ vals,
+ "object, string, int",
+ })
+ assert.Nil(t, err)
+ assert.Equal(t, len(target.Values), 3)
+ assert.Equal(t, target.Values, vals)
+ assert.Equal(t, target.Types[0], "object")
+ assert.Equal(t, target.Types[1], "string")
+ assert.Equal(t, target.Types[2], "int")
+
+ err = opt.Action(target, []interface{}{
+ vals,
+ "object, string, int",
+ })
+ assert.NotNil(t, err)
+
+ target = &dubboTarget{
+ Values: make([]interface{}, 3),
+ Types: make([]string, 3),
+ }
+ vals = []interface{}{
+ struct{ Name string }{"joe"},
+ "abc",
+ 123,
+ }
+ err = opt.Action(target, [2]interface{}{
+ vals,
+ "",
+ })
+ assert.Nil(t, err)
+ assert.Equal(t, len(target.Values), 3)
+ assert.Equal(t, target.Values, vals)
+ assert.Equal(t, len(target.Types), 0)
+}
+
+func TestParamTypesOptAction(t *testing.T) {
+ opt := ¶mTypesOpt{}
+ target := &dubboTarget{
+ Values: make([]interface{}, 3),
+ Types: make([]string, 3),
+ }
+ err := opt.Action(target, "object,string")
+ assert.Nil(t, err)
+ assert.Equal(t, "object", target.Types[0])
+ assert.Equal(t, "string", target.Types[1])
+
+ err = opt.Action(target, "object,whatsoever")
+ assert.EqualError(t, err, "Types invalid whatsoever")
+
+ err = opt.Action("target", []string{})
+ assert.EqualError(t, err, "The val type must be string")
+ err = opt.Action(target, "object,")
+ assert.Nil(t, err)
+ assert.Equal(t, "object", target.Types[0])
+ err = opt.Action(target, "object")
+ assert.Nil(t, err)
+ assert.Equal(t, "object", target.Types[0])
+}
diff --git a/pkg/client/http/http_test.go b/pkg/client/http/http_test.go
index 9cfe719..c63f5c1 100644
--- a/pkg/client/http/http_test.go
+++ b/pkg/client/http/http_test.go
@@ -37,7 +37,8 @@ import (
func TestMapParams(t *testing.T) {
hClient := NewHTTPClient()
- r, _ := http.NewRequest("POST", "/mock/test?team=theBoys",
bytes.NewReader([]byte("{\"id\":\"12345\",\"age\":\"19\",\"testStruct\":{\"name\":\"mock\",\"test\":\"happy\",\"nickName\":\"trump\"}}")))
+ r, _ := http.NewRequest("POST", "/mock/test?team=theBoys",
bytes.NewReader([]byte(
+
"{\"id\":\"12345\",\"age\":\"19\",\"testStruct\":{\"name\":\"mock\",\"test\":\"happy\",\"nickName\":\"trump\"}}")))
r.Header.Set("Auth", "12345")
api := mock.GetMockAPI(config.MethodGet, "/mock/test")
req := client.NewReq(context.TODO(), r, api)
@@ -49,7 +50,8 @@ func TestMapParams(t *testing.T) {
assert.Equal(t, p.Header.Get("Auth"), "12345")
rawBody, err := ioutil.ReadAll(p.Body)
assert.Nil(t, err)
- assert.Equal(t, string(rawBody),
"{\"id\":\"12345\",\"age\":\"19\",\"testStruct\":{\"name\":\"mock\",\"test\":\"happy\",\"nickName\":\"trump\"}}")
+ assert.Equal(t, string(rawBody),
+
"{\"id\":\"12345\",\"age\":\"19\",\"testStruct\":{\"name\":\"mock\",\"test\":\"happy\",\"nickName\":\"trump\"}}")
api.IntegrationRequest.MappingParams = []config.MappingParam{
{
@@ -79,7 +81,8 @@ func TestMapParams(t *testing.T) {
}
api.IntegrationRequest.HTTPBackendConfig.Schema = "https"
api.IntegrationRequest.HTTPBackendConfig.Host = "localhost"
- r, _ = http.NewRequest("POST", "/mock/test?team=theBoys",
bytes.NewReader([]byte("{\"id\":\"12345\",\"age\":\"19\",\"testStruct\":{\"name\":\"mock\",\"test\":\"happy\",\"nickName\":\"trump\"}}")))
+ r, _ = http.NewRequest("POST", "/mock/test?team=theBoys",
bytes.NewReader([]byte(
+
"{\"id\":\"12345\",\"age\":\"19\",\"testStruct\":{\"name\":\"mock\",\"test\":\"happy\",\"nickName\":\"trump\"}}")))
r.Header.Set("Auth", "12345")
req = client.NewReq(context.TODO(), r, api)
val, err = hClient.MapParams(req)
@@ -90,9 +93,8 @@ func TestMapParams(t *testing.T) {
assert.Equal(t, p.Query.Get("team"), "theBoys")
rawBody, err = ioutil.ReadAll(p.Body)
assert.Nil(t, err)
- assert.Equal(t, string(rawBody),
"{\"age\":\"19\",\"nickName\":\"trump\",\"testStruct\":{\"name\":\"mock\",\"nickName\":\"trump\",\"test\":\"happy\"}}")
-
- hClient.Call(req)
+ assert.Equal(t, string(rawBody),
+
"{\"age\":\"19\",\"nickName\":\"trump\",\"testStruct\":{\"name\":\"mock\",\"nickName\":\"trump\",\"test\":\"happy\"}}")
}
func TestParseURL(t *testing.T) {
diff --git a/pkg/client/http/mapper.go b/pkg/client/http/mapper.go
index 59cae76..ab28eb1 100644
--- a/pkg/client/http/mapper.go
+++ b/pkg/client/http/mapper.go
@@ -145,12 +145,8 @@ func (um uriMapper) Map(mp config.MappingParam, c
*client.Request, rawTarget int
}
func validateTarget(target interface{}) (*requestParams, error) {
- rv := reflect.ValueOf(target)
- if rv.Kind() != reflect.Ptr || rv.IsNil() {
- return nil, errors.New("Target params must be a non-nil
pointer")
- }
val, ok := target.(*requestParams)
- if !ok {
+ if !ok || val == nil {
return nil, errors.New("Target params must be a requestParams
pointer")
}
return val, nil
@@ -174,11 +170,15 @@ func setTarget(target *requestParams, to string, key
string, val interface{}) er
target.Body = ioutil.NopCloser(bytes.NewReader(rawBody))
}()
if err != nil {
- return errors.New("Raw body parse failed")
+ return errors.New("Raw body read failed")
}
mapBody := map[string]interface{}{}
- json.Unmarshal(rawBody, &mapBody)
-
+ if len(rawBody) != 0 {
+ err = json.Unmarshal(rawBody, &mapBody)
+ if err != nil {
+ return errors.New("Raw body parse failed")
+ }
+ }
setMapWithPath(mapBody, key, val)
rawBody, err = json.Marshal(mapBody)
if err != nil {
diff --git a/pkg/client/http/mapper_test.go b/pkg/client/http/mapper_test.go
index ad50dd7..f08bb61 100644
--- a/pkg/client/http/mapper_test.go
+++ b/pkg/client/http/mapper_test.go
@@ -251,3 +251,25 @@ func TestSetTarget(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, string(rawBody),
"{\"otherStructure\":\"abcde\",\"testStruct\":{\"name\":\"mock\",\"test\":\"happy\"}}")
}
+
+func TestValidateTarget(t *testing.T) {
+ requestP := newRequestParams()
+ p, e := validateTarget(requestP)
+ assert.NotNil(t, p)
+ assert.Nil(t, e)
+
+ requestP = nil
+ p, e = validateTarget(requestP)
+ assert.Nil(t, p)
+ assert.NotNil(t, e)
+
+ requestP2 := []int{}
+ p, e = validateTarget(requestP2)
+ assert.Nil(t, p)
+ assert.NotNil(t, e)
+
+ requestP3 := struct{}{}
+ p, e = validateTarget(requestP3)
+ assert.Nil(t, p)
+ assert.NotNil(t, e)
+}
diff --git a/pkg/common/constant/jtypes.go b/pkg/common/constant/jtypes.go
index 463a96b..2184642 100644
--- a/pkg/common/constant/jtypes.go
+++ b/pkg/common/constant/jtypes.go
@@ -30,10 +30,10 @@ var JTypeMapper = map[string]reflect.Type{
"string": reflect.TypeOf(""),
"java.lang.String": reflect.TypeOf(""),
"char": reflect.TypeOf(""),
- "short": reflect.TypeOf(int32(0)),
- "int": reflect.TypeOf(int32(0)),
+ "short": reflect.TypeOf(int16(0)),
+ "int": reflect.TypeOf(int(0)),
"long": reflect.TypeOf(int64(0)),
- "float": reflect.TypeOf(float64(0)),
+ "float": reflect.TypeOf(float32(0)),
"double": reflect.TypeOf(float64(0)),
"boolean": reflect.TypeOf(true),
"java.util.Date": reflect.TypeOf(time.Time{}),
diff --git a/pkg/filter/replacepath/replace_path.go
b/pkg/filter/replacepath/replace_path.go
deleted file mode 100644
index 0ef88f7..0000000
--- a/pkg/filter/replacepath/replace_path.go
+++ /dev/null
@@ -1,79 +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.
- */
-
-package replacepath
-
-import (
- nh "net/http"
- "net/url"
-)
-
-import (
- "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/context"
- "github.com/dubbogo/dubbo-go-pixiu-filter/pkg/filter"
-)
-
-import (
- "github.com/apache/dubbo-go-pixiu/pkg/common/constant"
- "github.com/apache/dubbo-go-pixiu/pkg/context/http"
-)
-
-const (
- // ReplacedPathHeader is the default header to set the old path to.
- ReplacedPathHeader = "X-Replaced-Path"
- replacePathError = "replace path fail"
-)
-
-// replacePathFilter is a filter for host.
-type replacePathFilter struct {
- path string
-}
-
-// New create replace path filter.
-func New(path string) filter.Filter {
- return &replacePathFilter{path: path}
-}
-
-// // Do execute replacePathFilter filter logic.
-func (f replacePathFilter) Do() context.FilterFunc {
- return func(c context.Context) {
- f.doReplacePathFilter(c.(*http.HttpContext))
- }
-}
-
-func (f replacePathFilter) doReplacePathFilter(ctx *http.HttpContext) {
- req := ctx.Request
- if req.URL.RawPath == "" {
- req.Header.Add(ReplacedPathHeader, req.URL.Path)
- } else {
- req.Header.Add(ReplacedPathHeader, req.URL.RawPath)
- }
-
- req.URL.RawPath = f.path
- var err error
- req.URL.Path, err = url.PathUnescape(req.URL.RawPath)
- if err != nil {
- ctx.AddHeader(constant.HeaderKeyContextType,
constant.HeaderValueTextPlain)
- ctx.WriteWithStatus(nh.StatusInternalServerError,
[]byte(replacePathError))
- ctx.Abort()
- return
- }
-
- req.RequestURI = req.URL.RequestURI()
-
- ctx.Next()
-}
diff --git a/pkg/filter/replacepath/replace_place_test.go
b/pkg/filter/replacepath/replace_place_test.go
deleted file mode 100644
index 56df3b0..0000000
--- a/pkg/filter/replacepath/replace_place_test.go
+++ /dev/null
@@ -1,43 +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.
- */
-
-package replacepath
-
-import (
- "bytes"
- "net/http"
- "testing"
-)
-
-import (
- "github.com/stretchr/testify/assert"
-)
-
-import (
- "github.com/apache/dubbo-go-pixiu/pkg/context/mock"
- "github.com/apache/dubbo-go-pixiu/pkg/filter/recovery"
-)
-
-func TestReplacePath(t *testing.T) {
- path := "/user"
- request, err := http.NewRequest("POST",
"http://www.dubbogopixiu.com/mock/test?name=tc",
bytes.NewReader([]byte("{\"id\":\"12345\"}")))
- assert.NoError(t, err)
- c := mock.GetMockHTTPContext(request, New(path).Do(),
recovery.New().Do())
- c.Next()
- assert.Equal(t, path, c.Request.URL.Path)
- assert.Equal(t, path+"?name=tc", c.Request.RequestURI)
-}
diff --git a/pkg/pixiu/listener.go b/pkg/pixiu/listener.go
index 366f77a..552fddd 100644
--- a/pkg/pixiu/listener.go
+++ b/pkg/pixiu/listener.go
@@ -44,7 +44,6 @@ import (
ctx "github.com/apache/dubbo-go-pixiu/pkg/context"
h "github.com/apache/dubbo-go-pixiu/pkg/context/http"
"github.com/apache/dubbo-go-pixiu/pkg/filter/host"
- "github.com/apache/dubbo-go-pixiu/pkg/filter/replacepath"
"github.com/apache/dubbo-go-pixiu/pkg/logger"
"github.com/apache/dubbo-go-pixiu/pkg/model"
)
@@ -179,9 +178,6 @@ func httpFilter(ctx *h.HttpContext, request
fc.IntegrationRequest) {
if len(request.Host) != 0 {
ctx.AppendFilterFunc(host.New(request.Host).Do())
}
- if len(request.Path) != 0 {
- ctx.AppendFilterFunc(replacepath.New(request.Path).Do())
- }
}
func (s *DefaultHttpListener) routeRequest(ctx *h.HttpContext, req
*http.Request) (router.API, error) {
diff --git a/samples/admin/proxy/api_config.yaml
b/samples/admin/proxy/api_config.yaml
index cd81c1e..d6386c9 100644
--- a/samples/admin/proxy/api_config.yaml
+++ b/samples/admin/proxy/api_config.yaml
@@ -40,37 +40,19 @@ resources:
paramTypes: [ "string", "string", "string", "string", "string",
"string", "string" ]
mappingParams:
- name: requestBody.values
- mapTo: 0
+ mapTo: opt.values
- name: requestBody.types
- mapTo: 1
- opt:
- open: true
- name: types
+ mapTo: opt.types
- name: uri.application
- mapTo: 2
- opt:
- open: true
- name: application
+ mapTo: opt.application
- name: uri.interface
- mapTo: 3
- opt:
- open: true
- name: interface
+ mapTo: opt.interface
- name: queryStrings.method
- mapTo: 4
- opt:
- open: true
- name: method
+ mapTo: opt.method
- name: queryStrings.group
- mapTo: 5
- opt:
- open: true
- name: group
+ mapTo: opt.group
- name: queryStrings.version
- mapTo: 6
- opt:
- open: true
- name: version
+ mapTo: opt.version
clusterName: "test_dubbo"
- path: '/api/v1/test-dubbo/user'
type: restful
@@ -88,10 +70,10 @@ resources:
required: true
integrationRequest:
requestType: dubbo
- paramTypes: [ "java.lang.String" ]
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "java.lang.String"
applicationName: "UserProvider"
interface: "com.ic.user.UserProvider"
method: "GetUserByName"
@@ -103,14 +85,12 @@ resources:
timeout: 10s
inboundRequest:
requestType: http
- # requestBody:
- # - definitionName: "userCreate"
integrationRequest:
requestType: dubbo
- paramTypes: [ "object" ]
mappingParams:
- name: requestBody._all
mapTo: 0
+ mapType: "object"
applicationName: "UserProvider"
interface: "com.ic.user.UserProvider"
method: "CreateUser"
@@ -134,10 +114,10 @@ resources:
required: true
integrationRequest:
requestType: dubbo
- paramTypes: [ "string" ]
mappingParams:
- name: queryStrings.name
mapTo: 1
+ mapType: "string"
applicationName: "UserProvider"
interface: "com.ic.user.UserProvider"
method: "GetUserTimeout"
@@ -155,14 +135,16 @@ resources:
requestType: http
integrationRequest:
requestType: dubbo
- paramTypes: [ "string", "string", "int" ]
mappingParams:
- name: requestBody.name
mapTo: 0
+ mapType: "string"
- name: requestBody.id
mapTo: 1
+ mapType: "string"
- name: requestBody.age
mapTo: 2
+ mapType: "int"
applicationName: "UserProvider"
interface: "com.ic.user.UserProvider"
method: "CreateUser"
diff --git a/samples/dubbogo/multi/apiconfig/api_config.yaml
b/samples/dubbogo/multi/apiconfig/api_config.yaml
index 4ce16ef..34c937c 100644
--- a/samples/dubbogo/multi/apiconfig/api_config.yaml
+++ b/samples/dubbogo/multi/apiconfig/api_config.yaml
@@ -35,10 +35,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "StudentService"
interface: "com.dubbogo.pixiu.StudentService"
method: "GetStudentByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -52,12 +52,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "StudentService"
interface: "com.dubbogo.pixiu.StudentService"
method: "UpdateStudentByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -77,10 +78,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "TeacherService"
interface: "com.dubbogo.pixiu.TeacherService"
method: "GetTeacherByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -94,12 +95,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "TeacherService"
interface: "com.dubbogo.pixiu.TeacherService"
method: "UpdateTeacherByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
\ No newline at end of file
diff --git a/samples/dubbogo/simple/body/api_config.yaml
b/samples/dubbogo/simple/body/api_config.yaml
index 7ea3b59..a662e26 100644
--- a/samples/dubbogo/simple/body/api_config.yaml
+++ b/samples/dubbogo/simple/body/api_config.yaml
@@ -33,10 +33,10 @@ resources:
mappingParams:
- name: requestBody._all
mapTo: 0
+ mapType: "object"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "CreateUser"
- paramTypes: [ "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -50,10 +50,10 @@ resources:
mappingParams:
- name: requestBody._all
mapTo: 0
+ mapType: "object"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUser"
- paramTypes: [ "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -71,13 +71,14 @@ resources:
mappingParams:
- name: requestBody.name
mapTo: 0
+ mapType: "string"
- name: requestBody.user
mapTo: 1
+ mapType: "object"
# applicationName: "UserService"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -96,10 +97,10 @@ resources:
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
diff --git a/samples/dubbogo/simple/mix/api_config.yaml
b/samples/dubbogo/simple/mix/api_config.yaml
index 7434baa..9900188 100644
--- a/samples/dubbogo/simple/mix/api_config.yaml
+++ b/samples/dubbogo/simple/mix/api_config.yaml
@@ -33,12 +33,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: queryStrings.age
mapTo: 1
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "string", "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -52,12 +53,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -77,12 +79,13 @@ resources:
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
- name: requestBody._all
mapTo: 1
+ mapType: "object"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "UpdateUserByName"
- paramTypes: [ "string", "object" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
\ No newline at end of file
diff --git a/samples/dubbogo/simple/proxy/api_config.yaml
b/samples/dubbogo/simple/proxy/api_config.yaml
index de29ca6..a7332b1 100644
--- a/samples/dubbogo/simple/proxy/api_config.yaml
+++ b/samples/dubbogo/simple/proxy/api_config.yaml
@@ -32,41 +32,17 @@ resources:
requestType: dubbo
mappingParams:
- name: requestBody.values
- mapTo: 0
- opt:
- open: true
- usable: true
- name: values
+ mapTo: opt.values
- name: requestBody.types
- mapTo: 1
- opt:
- open: true
- name: types
+ mapTo: opt.types
- name: uri.application
- mapTo: 2
- opt:
- open: true
- name: application
+ mapTo: opt.application
- name: uri.interface
- mapTo: 3
- opt:
- open: true
- name: interface
+ mapTo: opt.interface
- name: queryStrings.method
- mapTo: 4
- opt:
- open: true
- name: method
+ mapTo: opt.method
- name: queryStrings.group
- mapTo: 5
- opt:
- open: true
- name: group
+ mapTo: opt.group
- name: queryStrings.version
- mapTo: 6
- opt:
- open: true
- name: version
- paramTypes: ["object", "object", "string", "string", "string",
"string", "string"]
- toParamTypes: ["string"]
+ mapTo: opt.version
clusterName: "test_dubbo"
\ No newline at end of file
diff --git a/samples/dubbogo/simple/query/api_config.yaml
b/samples/dubbogo/simple/query/api_config.yaml
index 9a7ade8..a1f16c9 100644
--- a/samples/dubbogo/simple/query/api_config.yaml
+++ b/samples/dubbogo/simple/query/api_config.yaml
@@ -33,10 +33,10 @@ resources:
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -54,12 +54,13 @@ resources:
mappingParams:
- name: queryStrings.name
mapTo: 0
+ mapType: "string"
- name: queryStrings.age
mapTo: 1
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "string","int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -77,10 +78,10 @@ resources:
mappingParams:
- name: queryStrings.code
mapTo: 0
+ mapType: "int"
applicationName: "UserService"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByCode"
- paramTypes: [ "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
\ No newline at end of file
diff --git a/samples/dubbogo/simple/uri/api_config.yaml
b/samples/dubbogo/simple/uri/api_config.yaml
index ebcf28b..f1effb9 100644
--- a/samples/dubbogo/simple/uri/api_config.yaml
+++ b/samples/dubbogo/simple/uri/api_config.yaml
@@ -36,10 +36,10 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByName"
- paramTypes: [ "string" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -60,10 +60,10 @@ resources:
mappingParams:
- name: uri.code
mapTo: 0
+ mapType: "int"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByCode"
- paramTypes: [ "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
@@ -86,12 +86,13 @@ resources:
mappingParams:
- name: uri.name
mapTo: 0
+ mapType: "string"
- name: uri.age
mapTo: 1
+ mapType: "int"
applicationName: "UserProvider"
interface: "com.dubbogo.pixiu.UserService"
method: "GetUserByNameAndAge"
- paramTypes: [ "string", "int" ]
group: "test"
version: 1.0.0
clusterName: "test_dubbo"
\ No newline at end of file