This is an automated email from the ASF dual-hosted git repository.

luky116 pushed a commit to branch feature/saga
in repository https://gitbox.apache.org/repos/asf/incubator-seata-go.git


The following commit(s) were added to refs/heads/feature/saga by this push:
     new 67340255 [to-reply] feature: support saga multi type config (#741)
67340255 is described below

commit 67340255284640a88e4b59133140c4c8c6988158
Author: FinnTew <nanomo...@gmail.com>
AuthorDate: Sat Feb 15 19:53:44 2025 +0800

    [to-reply] feature: support saga multi type config (#741)
    
    * added yaml format of statelang related test data
    
    * feature: implement multi type config parser
    
    * adjust statemachine_json_parser to suit config parser
    
    * bugfix: fix the problem of failure to parse "ServiceName"
    
    * adjust statemachine_parser to be compatible with yaml
    
    * add apache License, add some comments, and make some logical adjustments
    
    * update state_machine_new_designer.yaml
    
    * optimize and improve the unit test of config parser
    
    * refactor config parser
    
    * add apache License
    
    * update
---
 pkg/saga/statemachine/constant/constant.go         |  17 +
 .../engine/core/bussiness_processor.go             |  17 +
 .../engine/core/compensation_holder.go             |  17 +
 .../engine/core/default_statemachine_config.go     |  17 +
 pkg/saga/statemachine/engine/core/engine_utils.go  |  17 +
 pkg/saga/statemachine/engine/core/event.go         |  17 +
 pkg/saga/statemachine/engine/core/event_bus.go     |  17 +
 .../statemachine/engine/core/event_consumer.go     |  17 +
 .../statemachine/engine/core/event_publisher.go    |  17 +
 pkg/saga/statemachine/engine/core/instruction.go   |  17 +
 .../engine/core/loop_context_holder.go             |  17 +
 .../statemachine/engine/core/loop_task_utils.go    |  17 +
 .../statemachine/engine/core/parameter_utils.go    |  17 +
 .../statemachine/engine/core/process_context.go    |  17 +
 .../statemachine/engine/core/process_controller.go |  17 +
 .../core/process_ctrl_statemachine_engine.go       |  17 +
 .../statemachine/engine/core/process_router.go     |  17 +
 pkg/saga/statemachine/engine/core/process_state.go |  17 +
 pkg/saga/statemachine/engine/core/state_router.go  |  17 +
 .../engine/core/statemachine_config.go             |  17 +
 .../engine/core/statemachine_engine.go             |  17 +
 .../engine/core/statemachine_engine_test.go        |  17 +
 .../statemachine/engine/core/statemachine_store.go |  17 +
 .../statemachine/engine/core/status_decision.go    |  17 +
 pkg/saga/statemachine/engine/core/utils.go         |  17 +
 .../statemachine/engine/exception/exception.go     |  17 +
 pkg/saga/statemachine/engine/expr/expression.go    |  17 +
 .../statemachine/engine/invoker/func_invoker.go    |  17 +
 .../engine/invoker/func_invoker_test.go            |  17 +
 .../statemachine/engine/invoker/grpc_invoker.go    |  17 +
 .../engine/invoker/grpc_invoker_test.go            |  17 +
 pkg/saga/statemachine/engine/invoker/invoker.go    |  17 +
 pkg/saga/statemachine/engine/sequence/sequence.go  |  17 +
 pkg/saga/statemachine/engine/sequence/snowflake.go |  17 +
 .../statemachine/engine/sequence/snowflake_test.go |  17 +
 pkg/saga/statemachine/engine/sequence/uuid.go      |  17 +
 .../statemachine/engine/serializer/serializer.go   |  17 +
 .../engine/serializer/serializer_test.go           |  17 +
 .../handlers/service_task_state_handler.go         |  17 +
 .../process_ctrl/process/process_type.go           |  17 +
 .../statelang/parser/choice_state_json_parser.go   |  17 +
 .../parser/compensation_trigger_state_parser.go    |  17 +
 .../statelang/parser/end_state_parser.go           |  17 +
 .../statelang/parser/statemachine_config_parser.go | 136 ++++
 .../parser/statemachine_config_parser_test.go      | 881 +++++++++++++++++++++
 .../statelang/parser/statemachine_json_parser.go   |  35 +-
 .../parser/statemachine_json_parser_test.go        | 108 ++-
 .../statelang/parser/statemachine_parser.go        |  48 +-
 .../statelang/parser/sub_state_machine_parser.go   |  17 +
 .../statelang/parser/task_state_json_parser.go     |  19 +-
 pkg/saga/statemachine/statelang/state.go           |  17 +
 .../statemachine/statelang/state/choice_state.go   |  17 +
 .../statelang/state/compensation_trigger_state.go  |  17 +
 pkg/saga/statemachine/statelang/state/end_state.go |  17 +
 .../statelang/state/loop_start_state.go            |  17 +
 .../statelang/state/sub_state_machine.go           |  17 +
 .../statemachine/statelang/state/task_state.go     |  17 +
 pkg/saga/statemachine/statelang/state_instance.go  |  17 +
 pkg/saga/statemachine/statelang/statemachine.go    |  17 +
 .../statelang/statemachine_instance.go             |  17 +
 pkg/saga/statemachine/store/db/db.go               |  17 +
 pkg/saga/statemachine/store/db/db_test.go          |  17 +
 pkg/saga/statemachine/store/db/statelang.go        |  17 +
 pkg/saga/statemachine/store/db/statelang_test.go   |  17 +
 pkg/saga/statemachine/store/db/statelog.go         |  17 +
 pkg/saga/statemachine/store/db/statelog_test.go    |  17 +
 .../store/repository/state_machine_repository.go   |  17 +
 pkg/util/reflectx/unmarkshaler.go                  |  17 +
 .../statelang/simple_statelang_with_choice.yaml    |  26 +
 testdata/saga/statelang/simple_statemachine.yaml   |  90 +++
 .../saga/statelang/state_machine_new_designer.yaml | 286 +++++++
 71 files changed, 2630 insertions(+), 53 deletions(-)

diff --git a/pkg/saga/statemachine/constant/constant.go 
b/pkg/saga/statemachine/constant/constant.go
index a089e7d5..72af09e9 100644
--- a/pkg/saga/statemachine/constant/constant.go
+++ b/pkg/saga/statemachine/constant/constant.go
@@ -1,3 +1,20 @@
+/*
+ * 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 constant
 
 const (
diff --git a/pkg/saga/statemachine/engine/core/bussiness_processor.go 
b/pkg/saga/statemachine/engine/core/bussiness_processor.go
index 6b0a2bb4..38846dff 100644
--- a/pkg/saga/statemachine/engine/core/bussiness_processor.go
+++ b/pkg/saga/statemachine/engine/core/bussiness_processor.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/compensation_holder.go 
b/pkg/saga/statemachine/engine/core/compensation_holder.go
index 562cb020..c22fb1fe 100644
--- a/pkg/saga/statemachine/engine/core/compensation_holder.go
+++ b/pkg/saga/statemachine/engine/core/compensation_holder.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/default_statemachine_config.go 
b/pkg/saga/statemachine/engine/core/default_statemachine_config.go
index c7692696..fa2ef157 100644
--- a/pkg/saga/statemachine/engine/core/default_statemachine_config.go
+++ b/pkg/saga/statemachine/engine/core/default_statemachine_config.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/engine_utils.go 
b/pkg/saga/statemachine/engine/core/engine_utils.go
index e1dcd4de..63eb7990 100644
--- a/pkg/saga/statemachine/engine/core/engine_utils.go
+++ b/pkg/saga/statemachine/engine/core/engine_utils.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/event.go 
b/pkg/saga/statemachine/engine/core/event.go
index 4f7c18b2..871c0ce9 100644
--- a/pkg/saga/statemachine/engine/core/event.go
+++ b/pkg/saga/statemachine/engine/core/event.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 type Event interface {
diff --git a/pkg/saga/statemachine/engine/core/event_bus.go 
b/pkg/saga/statemachine/engine/core/event_bus.go
index 47d617d4..e793419f 100644
--- a/pkg/saga/statemachine/engine/core/event_bus.go
+++ b/pkg/saga/statemachine/engine/core/event_bus.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/event_consumer.go 
b/pkg/saga/statemachine/engine/core/event_consumer.go
index 1df21bdb..25f8762e 100644
--- a/pkg/saga/statemachine/engine/core/event_consumer.go
+++ b/pkg/saga/statemachine/engine/core/event_consumer.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/event_publisher.go 
b/pkg/saga/statemachine/engine/core/event_publisher.go
index 9ad86940..447dee30 100644
--- a/pkg/saga/statemachine/engine/core/event_publisher.go
+++ b/pkg/saga/statemachine/engine/core/event_publisher.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import "context"
diff --git a/pkg/saga/statemachine/engine/core/instruction.go 
b/pkg/saga/statemachine/engine/core/instruction.go
index ed81fc9c..4b8f9d3c 100644
--- a/pkg/saga/statemachine/engine/core/instruction.go
+++ b/pkg/saga/statemachine/engine/core/instruction.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/loop_context_holder.go 
b/pkg/saga/statemachine/engine/core/loop_context_holder.go
index b1f69fe8..242e455b 100644
--- a/pkg/saga/statemachine/engine/core/loop_context_holder.go
+++ b/pkg/saga/statemachine/engine/core/loop_context_holder.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/loop_task_utils.go 
b/pkg/saga/statemachine/engine/core/loop_task_utils.go
index d56ac7f0..18a3bec4 100644
--- a/pkg/saga/statemachine/engine/core/loop_task_utils.go
+++ b/pkg/saga/statemachine/engine/core/loop_task_utils.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/parameter_utils.go 
b/pkg/saga/statemachine/engine/core/parameter_utils.go
index 680167cf..56336b7d 100644
--- a/pkg/saga/statemachine/engine/core/parameter_utils.go
+++ b/pkg/saga/statemachine/engine/core/parameter_utils.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/process_context.go 
b/pkg/saga/statemachine/engine/core/process_context.go
index 9da5c3e8..163ea640 100644
--- a/pkg/saga/statemachine/engine/core/process_context.go
+++ b/pkg/saga/statemachine/engine/core/process_context.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/process_controller.go 
b/pkg/saga/statemachine/engine/core/process_controller.go
index 2f45aebd..4c987db5 100644
--- a/pkg/saga/statemachine/engine/core/process_controller.go
+++ b/pkg/saga/statemachine/engine/core/process_controller.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git 
a/pkg/saga/statemachine/engine/core/process_ctrl_statemachine_engine.go 
b/pkg/saga/statemachine/engine/core/process_ctrl_statemachine_engine.go
index 426ec65d..1b59123d 100644
--- a/pkg/saga/statemachine/engine/core/process_ctrl_statemachine_engine.go
+++ b/pkg/saga/statemachine/engine/core/process_ctrl_statemachine_engine.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/process_router.go 
b/pkg/saga/statemachine/engine/core/process_router.go
index 5d7e5998..1875cb16 100644
--- a/pkg/saga/statemachine/engine/core/process_router.go
+++ b/pkg/saga/statemachine/engine/core/process_router.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/process_state.go 
b/pkg/saga/statemachine/engine/core/process_state.go
index 3dc06920..66dee8ff 100644
--- a/pkg/saga/statemachine/engine/core/process_state.go
+++ b/pkg/saga/statemachine/engine/core/process_state.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/state_router.go 
b/pkg/saga/statemachine/engine/core/state_router.go
index 185984e4..73dd02e2 100644
--- a/pkg/saga/statemachine/engine/core/state_router.go
+++ b/pkg/saga/statemachine/engine/core/state_router.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/statemachine_config.go 
b/pkg/saga/statemachine/engine/core/statemachine_config.go
index 9c77b73a..e3f9da29 100644
--- a/pkg/saga/statemachine/engine/core/statemachine_config.go
+++ b/pkg/saga/statemachine/engine/core/statemachine_config.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/statemachine_engine.go 
b/pkg/saga/statemachine/engine/core/statemachine_engine.go
index c18d91c1..75cdb1a6 100644
--- a/pkg/saga/statemachine/engine/core/statemachine_engine.go
+++ b/pkg/saga/statemachine/engine/core/statemachine_engine.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/statemachine_engine_test.go 
b/pkg/saga/statemachine/engine/core/statemachine_engine_test.go
index e87eb9ca..8af2cdfc 100644
--- a/pkg/saga/statemachine/engine/core/statemachine_engine_test.go
+++ b/pkg/saga/statemachine/engine/core/statemachine_engine_test.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/statemachine_store.go 
b/pkg/saga/statemachine/engine/core/statemachine_store.go
index 7a763335..f47065dd 100644
--- a/pkg/saga/statemachine/engine/core/statemachine_store.go
+++ b/pkg/saga/statemachine/engine/core/statemachine_store.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/status_decision.go 
b/pkg/saga/statemachine/engine/core/status_decision.go
index e95a6316..6fd596ff 100644
--- a/pkg/saga/statemachine/engine/core/status_decision.go
+++ b/pkg/saga/statemachine/engine/core/status_decision.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/core/utils.go 
b/pkg/saga/statemachine/engine/core/utils.go
index 8300c0eb..49f03e00 100644
--- a/pkg/saga/statemachine/engine/core/utils.go
+++ b/pkg/saga/statemachine/engine/core/utils.go
@@ -1,3 +1,20 @@
+/*
+ * 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 core
 
 import (
diff --git a/pkg/saga/statemachine/engine/exception/exception.go 
b/pkg/saga/statemachine/engine/exception/exception.go
index f5c58239..ea7c0780 100644
--- a/pkg/saga/statemachine/engine/exception/exception.go
+++ b/pkg/saga/statemachine/engine/exception/exception.go
@@ -1,3 +1,20 @@
+/*
+ * 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 exception
 
 import "github.com/seata/seata-go/pkg/util/errors"
diff --git a/pkg/saga/statemachine/engine/expr/expression.go 
b/pkg/saga/statemachine/engine/expr/expression.go
index 767c49da..00441d1f 100644
--- a/pkg/saga/statemachine/engine/expr/expression.go
+++ b/pkg/saga/statemachine/engine/expr/expression.go
@@ -1,3 +1,20 @@
+/*
+ * 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 expr
 
 import (
diff --git a/pkg/saga/statemachine/engine/invoker/func_invoker.go 
b/pkg/saga/statemachine/engine/invoker/func_invoker.go
index 085decb8..3131c52e 100644
--- a/pkg/saga/statemachine/engine/invoker/func_invoker.go
+++ b/pkg/saga/statemachine/engine/invoker/func_invoker.go
@@ -1,3 +1,20 @@
+/*
+ * 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 invoker
 
 import (
diff --git a/pkg/saga/statemachine/engine/invoker/func_invoker_test.go 
b/pkg/saga/statemachine/engine/invoker/func_invoker_test.go
index e800fdc1..9a97427b 100644
--- a/pkg/saga/statemachine/engine/invoker/func_invoker_test.go
+++ b/pkg/saga/statemachine/engine/invoker/func_invoker_test.go
@@ -1,3 +1,20 @@
+/*
+ * 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 invoker
 
 import (
diff --git a/pkg/saga/statemachine/engine/invoker/grpc_invoker.go 
b/pkg/saga/statemachine/engine/invoker/grpc_invoker.go
index e83e798b..afdc7ef3 100644
--- a/pkg/saga/statemachine/engine/invoker/grpc_invoker.go
+++ b/pkg/saga/statemachine/engine/invoker/grpc_invoker.go
@@ -1,3 +1,20 @@
+/*
+ * 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 invoker
 
 import (
diff --git a/pkg/saga/statemachine/engine/invoker/grpc_invoker_test.go 
b/pkg/saga/statemachine/engine/invoker/grpc_invoker_test.go
index 09d6745f..4beb0d18 100644
--- a/pkg/saga/statemachine/engine/invoker/grpc_invoker_test.go
+++ b/pkg/saga/statemachine/engine/invoker/grpc_invoker_test.go
@@ -1,3 +1,20 @@
+/*
+ * 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 invoker
 
 import (
diff --git a/pkg/saga/statemachine/engine/invoker/invoker.go 
b/pkg/saga/statemachine/engine/invoker/invoker.go
index e1dd5dce..e0cb85f4 100644
--- a/pkg/saga/statemachine/engine/invoker/invoker.go
+++ b/pkg/saga/statemachine/engine/invoker/invoker.go
@@ -1,3 +1,20 @@
+/*
+ * 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 invoker
 
 import (
diff --git a/pkg/saga/statemachine/engine/sequence/sequence.go 
b/pkg/saga/statemachine/engine/sequence/sequence.go
index 1a7fdae7..57cb19c0 100644
--- a/pkg/saga/statemachine/engine/sequence/sequence.go
+++ b/pkg/saga/statemachine/engine/sequence/sequence.go
@@ -1,3 +1,20 @@
+/*
+ * 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 sequence
 
 type SeqGenerator interface {
diff --git a/pkg/saga/statemachine/engine/sequence/snowflake.go 
b/pkg/saga/statemachine/engine/sequence/snowflake.go
index f5622b06..6f64edb4 100644
--- a/pkg/saga/statemachine/engine/sequence/snowflake.go
+++ b/pkg/saga/statemachine/engine/sequence/snowflake.go
@@ -1,3 +1,20 @@
+/*
+ * 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 sequence
 
 import (
diff --git a/pkg/saga/statemachine/engine/sequence/snowflake_test.go 
b/pkg/saga/statemachine/engine/sequence/snowflake_test.go
index 451f478d..9c6a96a2 100644
--- a/pkg/saga/statemachine/engine/sequence/snowflake_test.go
+++ b/pkg/saga/statemachine/engine/sequence/snowflake_test.go
@@ -1,3 +1,20 @@
+/*
+ * 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 sequence
 
 import (
diff --git a/pkg/saga/statemachine/engine/sequence/uuid.go 
b/pkg/saga/statemachine/engine/sequence/uuid.go
index f3060dcf..6dfb0c81 100644
--- a/pkg/saga/statemachine/engine/sequence/uuid.go
+++ b/pkg/saga/statemachine/engine/sequence/uuid.go
@@ -1,3 +1,20 @@
+/*
+ * 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 sequence
 
 import "github.com/google/uuid"
diff --git a/pkg/saga/statemachine/engine/serializer/serializer.go 
b/pkg/saga/statemachine/engine/serializer/serializer.go
index 4d668ef5..3a3ddf0a 100644
--- a/pkg/saga/statemachine/engine/serializer/serializer.go
+++ b/pkg/saga/statemachine/engine/serializer/serializer.go
@@ -1,3 +1,20 @@
+/*
+ * 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 serializer
 
 import (
diff --git a/pkg/saga/statemachine/engine/serializer/serializer_test.go 
b/pkg/saga/statemachine/engine/serializer/serializer_test.go
index 9dba88a0..eb163368 100644
--- a/pkg/saga/statemachine/engine/serializer/serializer_test.go
+++ b/pkg/saga/statemachine/engine/serializer/serializer_test.go
@@ -1,3 +1,20 @@
+/*
+ * 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 serializer
 
 import (
diff --git 
a/pkg/saga/statemachine/process_ctrl/handlers/service_task_state_handler.go 
b/pkg/saga/statemachine/process_ctrl/handlers/service_task_state_handler.go
index 28d60d0a..f2a7aff2 100644
--- a/pkg/saga/statemachine/process_ctrl/handlers/service_task_state_handler.go
+++ b/pkg/saga/statemachine/process_ctrl/handlers/service_task_state_handler.go
@@ -1,3 +1,20 @@
+/*
+ * 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 handlers
 
 import (
diff --git a/pkg/saga/statemachine/process_ctrl/process/process_type.go 
b/pkg/saga/statemachine/process_ctrl/process/process_type.go
index b1a8e030..c67c806c 100644
--- a/pkg/saga/statemachine/process_ctrl/process/process_type.go
+++ b/pkg/saga/statemachine/process_ctrl/process/process_type.go
@@ -1,3 +1,20 @@
+/*
+ * 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 process
 
 type ProcessType string
diff --git a/pkg/saga/statemachine/statelang/parser/choice_state_json_parser.go 
b/pkg/saga/statemachine/statelang/parser/choice_state_json_parser.go
index 9b4d51cd..09108548 100644
--- a/pkg/saga/statemachine/statelang/parser/choice_state_json_parser.go
+++ b/pkg/saga/statemachine/statelang/parser/choice_state_json_parser.go
@@ -1,3 +1,20 @@
+/*
+ * 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 parser
 
 import (
diff --git 
a/pkg/saga/statemachine/statelang/parser/compensation_trigger_state_parser.go 
b/pkg/saga/statemachine/statelang/parser/compensation_trigger_state_parser.go
index d41a6d29..3131da90 100644
--- 
a/pkg/saga/statemachine/statelang/parser/compensation_trigger_state_parser.go
+++ 
b/pkg/saga/statemachine/statelang/parser/compensation_trigger_state_parser.go
@@ -1,3 +1,20 @@
+/*
+ * 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 parser
 
 import (
diff --git a/pkg/saga/statemachine/statelang/parser/end_state_parser.go 
b/pkg/saga/statemachine/statelang/parser/end_state_parser.go
index 823ee8df..8baa03ad 100644
--- a/pkg/saga/statemachine/statelang/parser/end_state_parser.go
+++ b/pkg/saga/statemachine/statelang/parser/end_state_parser.go
@@ -1,3 +1,20 @@
+/*
+ * 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 parser
 
 import (
diff --git 
a/pkg/saga/statemachine/statelang/parser/statemachine_config_parser.go 
b/pkg/saga/statemachine/statelang/parser/statemachine_config_parser.go
new file mode 100644
index 00000000..63276e2e
--- /dev/null
+++ b/pkg/saga/statemachine/statelang/parser/statemachine_config_parser.go
@@ -0,0 +1,136 @@
+/*
+ * 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 parser
+
+import (
+       "bytes"
+       "encoding/json"
+       "fmt"
+       "gopkg.in/yaml.v3"
+       "io"
+       "os"
+)
+
+// ConfigParser is a general configuration parser interface, used to agree on 
the implementation of different types of parsers
+type ConfigParser interface {
+       Parse(configContent []byte) (*StateMachineObject, error)
+}
+
+type JSONConfigParser struct{}
+
+func NewJSONConfigParser() *JSONConfigParser {
+       return &JSONConfigParser{}
+}
+
+func (p *JSONConfigParser) Parse(configContent []byte) (*StateMachineObject, 
error) {
+       if configContent == nil || len(configContent) == 0 {
+               return nil, fmt.Errorf("empty JSON config content")
+       }
+
+       var stateMachineObject StateMachineObject
+       if err := json.Unmarshal(configContent, &stateMachineObject); err != 
nil {
+               return nil, fmt.Errorf("failed to parse JSON config content: 
%w", err)
+       }
+
+       return &stateMachineObject, nil
+}
+
+type YAMLConfigParser struct{}
+
+func NewYAMLConfigParser() *YAMLConfigParser {
+       return &YAMLConfigParser{}
+}
+
+func (p *YAMLConfigParser) Parse(configContent []byte) (*StateMachineObject, 
error) {
+       if configContent == nil || len(configContent) == 0 {
+               return nil, fmt.Errorf("empty YAML config content")
+       }
+
+       var stateMachineObject StateMachineObject
+       if err := yaml.Unmarshal(configContent, &stateMachineObject); err != 
nil {
+               return nil, fmt.Errorf("failed to parse YAML config content: 
%w", err)
+       }
+
+       return &stateMachineObject, nil
+}
+
+type StateMachineConfigParser struct{}
+
+func NewStateMachineConfigParser() *StateMachineConfigParser {
+       return &StateMachineConfigParser{}
+}
+
+func (p *StateMachineConfigParser) CheckConfigFile(filePath string) error {
+       _, err := os.Stat(filePath)
+       if os.IsNotExist(err) {
+               return fmt.Errorf("config file %s does not exist: %w", 
filePath, err)
+       }
+       if err != nil {
+               return fmt.Errorf("failed to access config file %s: %w", 
filePath, err)
+       }
+       return nil
+}
+
+func (p *StateMachineConfigParser) ReadConfigFile(configFilePath string) 
([]byte, error) {
+       file, _ := os.Open(configFilePath)
+       defer func(file *os.File) {
+               _ = file.Close()
+       }(file)
+
+       var buf bytes.Buffer
+       _, err := io.Copy(&buf, file)
+       if err != nil {
+               return nil, fmt.Errorf("failed to read config file %s: %w", 
configFilePath, err)
+       }
+
+       return buf.Bytes(), nil
+}
+
+func (p *StateMachineConfigParser) getParser(content []byte) (ConfigParser, 
error) {
+       var obj interface{}
+       if err := json.Unmarshal(content, &obj); err == nil {
+               return NewJSONConfigParser(), nil
+       }
+       if err := yaml.Unmarshal(content, &obj); err == nil {
+               return NewYAMLConfigParser(), nil
+       }
+
+       return nil, fmt.Errorf("unsupported config file format")
+}
+
+func (p *StateMachineConfigParser) Parse(content []byte) (*StateMachineObject, 
error) {
+       parser, err := p.getParser(content)
+       if err != nil {
+               return nil, err
+       }
+
+       return parser.Parse(content)
+}
+
+type StateMachineObject struct {
+       Name                        string                 `json:"Name" 
yaml:"Name"`
+       Comment                     string                 `json:"Comment" 
yaml:"Comment"`
+       Version                     string                 `json:"Version" 
yaml:"Version"`
+       StartState                  string                 `json:"StartState" 
yaml:"StartState"`
+       RecoverStrategy             string                 
`json:"RecoverStrategy" yaml:"RecoverStrategy"`
+       Persist                     bool                   `json:"IsPersist" 
yaml:"IsPersist"`
+       RetryPersistModeUpdate      bool                   
`json:"IsRetryPersistModeUpdate" yaml:"IsRetryPersistModeUpdate"`
+       CompensatePersistModeUpdate bool                   
`json:"IsCompensatePersistModeUpdate" yaml:"IsCompensatePersistModeUpdate"`
+       Type                        string                 `json:"Type" 
yaml:"Type"`
+       States                      map[string]interface{} `json:"States" 
yaml:"States"`
+}
diff --git 
a/pkg/saga/statemachine/statelang/parser/statemachine_config_parser_test.go 
b/pkg/saga/statemachine/statelang/parser/statemachine_config_parser_test.go
new file mode 100644
index 00000000..d901296b
--- /dev/null
+++ b/pkg/saga/statemachine/statelang/parser/statemachine_config_parser_test.go
@@ -0,0 +1,881 @@
+/*
+ * 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 parser
+
+import (
+       "github.com/stretchr/testify/assert"
+       "testing"
+)
+
+func TestStateMachineConfigParser_Parse(t *testing.T) {
+       parser := NewStateMachineConfigParser()
+
+       tests := []struct {
+               name                       string
+               configFilePath             string
+               expectedStateMachineObject *StateMachineObject
+       }{
+               {
+                       name:                       "JSON Simple 1",
+                       configFilePath:             
"../../../../../testdata/saga/statelang/simple_statelang_with_choice.json",
+                       expectedStateMachineObject: 
GetStateMachineObject1("json"),
+               },
+               {
+                       name:                       "JSON Simple 2",
+                       configFilePath:             
"../../../../../testdata/saga/statelang/simple_statemachine.json",
+                       expectedStateMachineObject: 
GetStateMachineObject2("json"),
+               },
+               {
+                       name:                       "JSON Simple 3",
+                       configFilePath:             
"../../../../../testdata/saga/statelang/state_machine_new_designer.json",
+                       expectedStateMachineObject: 
GetStateMachineObject3("json"),
+               },
+               {
+                       name:                       "YAML Simple 1",
+                       configFilePath:             
"../../../../../testdata/saga/statelang/simple_statelang_with_choice.yaml",
+                       expectedStateMachineObject: 
GetStateMachineObject1("yaml"),
+               },
+               {
+                       name:                       "YAML Simple 2",
+                       configFilePath:             
"../../../../../testdata/saga/statelang/simple_statemachine.yaml",
+                       expectedStateMachineObject: 
GetStateMachineObject2("yaml"),
+               },
+               {
+                       name:                       "YAML Simple 3",
+                       configFilePath:             
"../../../../../testdata/saga/statelang/state_machine_new_designer.yaml",
+                       expectedStateMachineObject: 
GetStateMachineObject3("yaml"),
+               },
+       }
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       content, err := parser.ReadConfigFile(tt.configFilePath)
+                       if err != nil {
+                               t.Error("parse fail: " + err.Error())
+                       }
+                       object, err := parser.Parse(content)
+                       if err != nil {
+                               t.Error("parse fail: " + err.Error())
+                       }
+                       assert.Equal(t, tt.expectedStateMachineObject, object)
+               })
+       }
+}
+
+func GetStateMachineObject1(format string) *StateMachineObject {
+       switch format {
+       case "json":
+       case "yaml":
+       }
+
+       return &StateMachineObject{
+               Name:       "simpleChoiceTestStateMachine",
+               Comment:    "带条件分支的测试状态机定义",
+               StartState: "FirstState",
+               Version:    "0.0.1",
+               States: map[string]interface{}{
+                       "FirstState": map[string]interface{}{
+                               "Type":          "ServiceTask",
+                               "ServiceName":   "demoService",
+                               "ServiceMethod": "foo",
+                               "Next":          "ChoiceState",
+                       },
+                       "ChoiceState": map[string]interface{}{
+                               "Type": "Choice",
+                               "Choices": []interface{}{
+                                       map[string]interface{}{
+                                               "Expression": "[a] == 1",
+                                               "Next":       "SecondState",
+                                       },
+                                       map[string]interface{}{
+                                               "Expression": "[a] == 2",
+                                               "Next":       "ThirdState",
+                                       },
+                               },
+                               "Default": "SecondState",
+                       },
+                       "SecondState": map[string]interface{}{
+                               "Type":          "ServiceTask",
+                               "ServiceName":   "demoService",
+                               "ServiceMethod": "bar",
+                       },
+                       "ThirdState": map[string]interface{}{
+                               "Type":          "ServiceTask",
+                               "ServiceName":   "demoService",
+                               "ServiceMethod": "foo",
+                       },
+               },
+       }
+}
+
+func GetStateMachineObject2(format string) *StateMachineObject {
+       var retryMap map[string]interface{}
+
+       switch format {
+       case "json":
+               retryMap = map[string]interface{}{
+                       "Exceptions": []interface{}{
+                               "java.lang.Exception",
+                       },
+                       "IntervalSeconds": float64(2),
+                       "MaxAttempts":     float64(3),
+                       "BackoffRate":     1.5,
+               }
+       case "yaml":
+               retryMap = map[string]interface{}{
+                       "Exceptions": []interface{}{
+                               "java.lang.Exception",
+                       },
+                       "IntervalSeconds": 2,
+                       "MaxAttempts":     3,
+                       "BackoffRate":     1.5,
+               }
+       }
+
+       return &StateMachineObject{
+               Name:       "simpleTestStateMachine",
+               Comment:    "测试状态机定义",
+               StartState: "FirstState",
+               Version:    "0.0.1",
+               States: map[string]interface{}{
+                       "FirstState": map[string]interface{}{
+                               "Type":          "ServiceTask",
+                               "ServiceName":   "is.seata.saga.DemoService",
+                               "ServiceMethod": "foo",
+                               "IsPersist":     false,
+                               "Next":          "ScriptState",
+                       },
+                       "ScriptState": map[string]interface{}{
+                               "Type":          "ScriptTask",
+                               "ScriptType":    "groovy",
+                               "ScriptContent": "return 'hello ' + inputA",
+                               "Input": []interface{}{
+                                       map[string]interface{}{
+                                               "inputA": "$.data1",
+                                       },
+                               },
+                               "Output": map[string]interface{}{
+                                       "scriptStateResult": "$.#root",
+                               },
+                               "Next": "ChoiceState",
+                       },
+                       "ChoiceState": map[string]interface{}{
+                               "Type": "Choice",
+                               "Choices": []interface{}{
+                                       map[string]interface{}{
+                                               "Expression": "foo == 1",
+                                               "Next":       "FirstMatchState",
+                                       },
+                                       map[string]interface{}{
+                                               "Expression": "foo == 2",
+                                               "Next":       
"SecondMatchState",
+                                       },
+                               },
+                               "Default": "FailState",
+                       },
+                       "FirstMatchState": map[string]interface{}{
+                               "Type":            "ServiceTask",
+                               "ServiceName":     "is.seata.saga.DemoService",
+                               "ServiceMethod":   "bar",
+                               "CompensateState": "CompensateFirst",
+                               "Status": map[string]interface{}{
+                                       "return.code == 'S'":              "SU",
+                                       "return.code == 'F'":              "FA",
+                                       "$exception{java.lang.Throwable}": "UN",
+                               },
+                               "Input": []interface{}{
+                                       map[string]interface{}{
+                                               "inputA1": "$.data1",
+                                               "inputA2": 
map[string]interface{}{
+                                                       "a": "$.data2.a",
+                                               },
+                                       },
+                                       map[string]interface{}{
+                                               "inputB": "$.header",
+                                       },
+                               },
+                               "Output": map[string]interface{}{
+                                       "firstMatchStateResult": "$.#root",
+                               },
+                               "Retry": []interface{}{
+                                       retryMap,
+                               },
+                               "Catch": []interface{}{
+                                       map[string]interface{}{
+                                               "Exceptions": []interface{}{
+                                                       "java.lang.Exception",
+                                               },
+                                               "Next": "CompensationTrigger",
+                                       },
+                               },
+                               "Next": "SuccessState",
+                       },
+                       "CompensateFirst": map[string]interface{}{
+                               "Type":              "ServiceTask",
+                               "ServiceName":       
"is.seata.saga.DemoService",
+                               "ServiceMethod":     "compensateBar",
+                               "IsForCompensation": true,
+                               "IsForUpdate":       true,
+                               "Input": []interface{}{
+                                       map[string]interface{}{
+                                               "input": "$.data",
+                                       },
+                               },
+                               "Output": map[string]interface{}{
+                                       "firstMatchStateResult": "$.#root",
+                               },
+                               "Status": map[string]interface{}{
+                                       "return.code == 'S'":              "SU",
+                                       "return.code == 'F'":              "FA",
+                                       "$exception{java.lang.Throwable}": "UN",
+                               },
+                       },
+                       "CompensationTrigger": map[string]interface{}{
+                               "Type": "CompensationTrigger",
+                               "Next": "CompensateEndState",
+                       },
+                       "CompensateEndState": map[string]interface{}{
+                               "Type":      "Fail",
+                               "ErrorCode": "StateCompensated",
+                               "Message":   "State Compensated!",
+                       },
+                       "SecondMatchState": map[string]interface{}{
+                               "Type":             "SubStateMachine",
+                               "StateMachineName": "simpleTestSubStateMachine",
+                               "Input": []interface{}{
+                                       map[string]interface{}{
+                                               "input": "$.data",
+                                       },
+                                       map[string]interface{}{
+                                               "header": "$.header",
+                                       },
+                               },
+                               "Output": map[string]interface{}{
+                                       "firstMatchStateResult": "$.#root",
+                               },
+                               "Next": "SuccessState",
+                       },
+                       "FailState": map[string]interface{}{
+                               "Type":      "Fail",
+                               "ErrorCode": "DefaultStateError",
+                               "Message":   "No Matches!",
+                       },
+                       "SuccessState": map[string]interface{}{
+                               "Type": "Succeed",
+                       },
+               },
+       }
+}
+
+func GetStateMachineObject3(format string) *StateMachineObject {
+       var (
+               boundsMap1 map[string]interface{}
+               boundsMap2 map[string]interface{}
+               boundsMap3 map[string]interface{}
+               boundsMap4 map[string]interface{}
+               boundsMap5 map[string]interface{}
+               boundsMap6 map[string]interface{}
+               boundsMap7 map[string]interface{}
+               boundsMap8 map[string]interface{}
+               boundsMap9 map[string]interface{}
+
+               waypoints1 []interface{}
+               waypoints2 []interface{}
+               waypoints3 []interface{}
+               waypoints4 []interface{}
+               waypoints5 []interface{}
+               waypoints6 []interface{}
+               waypoints7 []interface{}
+       )
+
+       switch format {
+       case "json":
+               boundsMap1 = map[string]interface{}{
+                       "x":      float64(300),
+                       "y":      float64(178),
+                       "width":  float64(100),
+                       "height": float64(80),
+               }
+               boundsMap2 = map[string]interface{}{
+                       "x":      float64(455),
+                       "y":      float64(193),
+                       "width":  float64(50),
+                       "height": float64(50),
+               }
+               boundsMap3 = map[string]interface{}{
+                       "x":      float64(300),
+                       "y":      float64(310),
+                       "width":  float64(100),
+                       "height": float64(80),
+               }
+               boundsMap4 = map[string]interface{}{
+                       "x":      float64(550),
+                       "y":      float64(178),
+                       "width":  float64(100),
+                       "height": float64(80),
+               }
+               boundsMap5 = map[string]interface{}{
+                       "x":      float64(550),
+                       "y":      float64(310),
+                       "width":  float64(100),
+                       "height": float64(80),
+               }
+               boundsMap6 = map[string]interface{}{
+                       "x":      float64(632),
+                       "y":      float64(372),
+                       "width":  float64(36),
+                       "height": float64(36),
+               }
+               boundsMap7 = map[string]interface{}{
+                       "x":      float64(722),
+                       "y":      float64(200),
+                       "width":  float64(36),
+                       "height": float64(36),
+               }
+               boundsMap8 = map[string]interface{}{
+                       "x":      float64(722),
+                       "y":      float64(372),
+                       "width":  float64(36),
+                       "height": float64(36),
+               }
+               boundsMap9 = map[string]interface{}{
+                       "x":      float64(812),
+                       "y":      float64(372),
+                       "width":  float64(36),
+                       "height": float64(36),
+               }
+
+               waypoints1 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(400),
+                                       "y": float64(218),
+                               },
+                               "x": float64(400),
+                               "y": float64(218),
+                       },
+                       map[string]interface{}{"x": float64(435), "y": 
float64(218)},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(455),
+                                       "y": float64(218),
+                               },
+                               "x": float64(455),
+                               "y": float64(218),
+                       },
+               }
+               waypoints2 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(505),
+                                       "y": float64(218),
+                               },
+                               "x": float64(505),
+                               "y": float64(218),
+                       },
+                       map[string]interface{}{"x": float64(530), "y": 
float64(218)},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(550),
+                                       "y": float64(218),
+                               },
+                               "x": float64(550),
+                               "y": float64(218),
+                       },
+               }
+               waypoints3 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(480),
+                                       "y": float64(243),
+                               },
+                               "x": float64(480),
+                               "y": float64(243),
+                       },
+                       map[string]interface{}{"x": float64(600), "y": 
float64(290)},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(600),
+                                       "y": float64(310),
+                               },
+                               "x": float64(600),
+                               "y": float64(310),
+                       },
+               }
+               waypoints4 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(650),
+                                       "y": float64(218),
+                               },
+                               "x": float64(650),
+                               "y": float64(218),
+                       },
+                       map[string]interface{}{"x": float64(702), "y": 
float64(218)},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(722),
+                                       "y": float64(218),
+                               },
+                               "x": float64(722),
+                               "y": float64(218),
+                       },
+               }
+               waypoints5 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(668),
+                                       "y": float64(390),
+                               },
+                               "x": float64(668),
+                               "y": float64(390),
+                       },
+                       map[string]interface{}{"x": float64(702), "y": 
float64(390)},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(722),
+                                       "y": float64(390),
+                               },
+                               "x": float64(722),
+                               "y": float64(390),
+                       },
+               }
+               waypoints6 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(600),
+                                       "y": float64(310),
+                               },
+                               "x": float64(600),
+                               "y": float64(310),
+                       },
+                       map[string]interface{}{"x": float64(740), "y": 
float64(256)},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(740),
+                                       "y": float64(236),
+                               },
+                               "x": float64(740),
+                               "y": float64(236),
+                       },
+               }
+               waypoints7 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(758),
+                                       "y": float64(390),
+                               },
+                               "x": float64(758),
+                               "y": float64(390),
+                       },
+                       map[string]interface{}{"x": float64(792), "y": 
float64(390)},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": float64(812),
+                                       "y": float64(390),
+                               },
+                               "x": float64(812),
+                               "y": float64(390),
+                       },
+               }
+
+       case "yaml":
+               boundsMap1 = map[string]interface{}{
+                       "x":      300,
+                       "y":      178,
+                       "width":  100,
+                       "height": 80,
+               }
+               boundsMap2 = map[string]interface{}{
+                       "x":      455,
+                       "y":      193,
+                       "width":  50,
+                       "height": 50,
+               }
+               boundsMap3 = map[string]interface{}{
+                       "x":      300,
+                       "y":      310,
+                       "width":  100,
+                       "height": 80,
+               }
+               boundsMap4 = map[string]interface{}{
+                       "x":      550,
+                       "y":      178,
+                       "width":  100,
+                       "height": 80,
+               }
+               boundsMap5 = map[string]interface{}{
+                       "x":      550,
+                       "y":      310,
+                       "width":  100,
+                       "height": 80,
+               }
+               boundsMap6 = map[string]interface{}{
+                       "x":      632,
+                       "y":      372,
+                       "width":  36,
+                       "height": 36,
+               }
+               boundsMap7 = map[string]interface{}{
+                       "x":      722,
+                       "y":      200,
+                       "width":  36,
+                       "height": 36,
+               }
+               boundsMap8 = map[string]interface{}{
+                       "x":      722,
+                       "y":      372,
+                       "width":  36,
+                       "height": 36,
+               }
+               boundsMap9 = map[string]interface{}{
+                       "x":      812,
+                       "y":      372,
+                       "width":  36,
+                       "height": 36,
+               }
+
+               waypoints1 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 400,
+                                       "y": 218,
+                               },
+                               "x": 400,
+                               "y": 218,
+                       },
+                       map[string]interface{}{"x": 435, "y": 218},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 455,
+                                       "y": 218,
+                               },
+                               "x": 455,
+                               "y": 218,
+                       },
+               }
+               waypoints2 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 505,
+                                       "y": 218,
+                               },
+                               "x": 505,
+                               "y": 218,
+                       },
+                       map[string]interface{}{"x": 530, "y": 218},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 550,
+                                       "y": 218,
+                               },
+                               "x": 550,
+                               "y": 218,
+                       },
+               }
+               waypoints3 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 480,
+                                       "y": 243,
+                               },
+                               "x": 480,
+                               "y": 243,
+                       },
+                       map[string]interface{}{"x": 600, "y": 290},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 600,
+                                       "y": 310,
+                               },
+                               "x": 600,
+                               "y": 310,
+                       },
+               }
+               waypoints4 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 650,
+                                       "y": 218,
+                               },
+                               "x": 650,
+                               "y": 218,
+                       },
+                       map[string]interface{}{"x": 702, "y": 218},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 722,
+                                       "y": 218,
+                               },
+                               "x": 722,
+                               "y": 218,
+                       },
+               }
+               waypoints5 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 668,
+                                       "y": 390,
+                               },
+                               "x": 668,
+                               "y": 390,
+                       },
+                       map[string]interface{}{"x": 702, "y": 390},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 722,
+                                       "y": 390,
+                               },
+                               "x": 722,
+                               "y": 390,
+                       },
+               }
+               waypoints6 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 600,
+                                       "y": 310,
+                               },
+                               "x": 600,
+                               "y": 310,
+                       },
+                       map[string]interface{}{"x": 740, "y": 256},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 740,
+                                       "y": 236,
+                               },
+                               "x": 740,
+                               "y": 236,
+                       },
+               }
+               waypoints7 = []interface{}{
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 758,
+                                       "y": 390,
+                               },
+                               "x": 758,
+                               "y": 390,
+                       },
+                       map[string]interface{}{"x": 792, "y": 390},
+                       map[string]interface{}{
+                               "original": map[string]interface{}{
+                                       "x": 812,
+                                       "y": 390,
+                               },
+                               "x": 812,
+                               "y": 390,
+                       },
+               }
+       }
+
+       return &StateMachineObject{
+               Name:                        "StateMachineNewDesigner",
+               Comment:                     "This state machine is modeled by 
designer tools.",
+               Version:                     "0.0.1",
+               StartState:                  "ServiceTask-a9h2o51",
+               RecoverStrategy:             "",
+               Persist:                     false,
+               RetryPersistModeUpdate:      false,
+               CompensatePersistModeUpdate: false,
+               Type:                        "",
+               States: map[string]interface{}{
+                       "ServiceTask-a9h2o51": map[string]interface{}{
+                               "style": map[string]interface{}{
+                                       "bounds": boundsMap1,
+                               },
+                               "Name":              "ServiceTask-a9h2o51",
+                               "IsForCompensation": false,
+                               "Input":             
[]interface{}{map[string]interface{}{}},
+                               "Output":            map[string]interface{}{},
+                               "Status":            map[string]interface{}{},
+                               "Retry":             []interface{}{},
+                               "ServiceName":       "",
+                               "ServiceMethod":     "",
+                               "Type":              "ServiceTask",
+                               "Next":              "Choice-4ajl8nt",
+                               "edge": map[string]interface{}{
+                                       "Choice-4ajl8nt": 
map[string]interface{}{
+                                               "style": map[string]interface{}{
+                                                       "waypoints": waypoints1,
+                                                       "source":    
"ServiceTask-a9h2o51",
+                                                       "target":    
"Choice-4ajl8nt",
+                                               },
+                                               "Type": "Transition",
+                                       },
+                               },
+                               "CompensateState": "CompensateFirstState",
+                       },
+                       "Choice-4ajl8nt": map[string]interface{}{
+                               "style": map[string]interface{}{
+                                       "bounds": boundsMap2,
+                               },
+                               "Name": "Choice-4ajl8nt",
+                               "Type": "Choice",
+                               "Choices": []interface{}{
+                                       map[string]interface{}{
+                                               "Expression": "",
+                                               "Next":       
"SubStateMachine-cauj9uy",
+                                       },
+                                       map[string]interface{}{
+                                               "Expression": "",
+                                               "Next":       
"ServiceTask-vdij28l",
+                                       },
+                               },
+                               "Default": "SubStateMachine-cauj9uy",
+                               "edge": map[string]interface{}{
+                                       "SubStateMachine-cauj9uy": 
map[string]interface{}{
+                                               "style": map[string]interface{}{
+                                                       "waypoints": waypoints2,
+                                                       "source":    
"Choice-4ajl8nt",
+                                                       "target":    
"SubStateMachine-cauj9uy",
+                                               },
+                                               "Type": "ChoiceEntry",
+                                       },
+                                       "ServiceTask-vdij28l": 
map[string]interface{}{
+                                               "style": map[string]interface{}{
+                                                       "waypoints": waypoints3,
+                                                       "source":    
"Choice-4ajl8nt",
+                                                       "target":    
"ServiceTask-vdij28l",
+                                               },
+                                               "Type": "ChoiceEntry",
+                                       },
+                               },
+                       },
+                       "CompensateFirstState": map[string]interface{}{
+                               "style": map[string]interface{}{
+                                       "bounds": boundsMap3,
+                               },
+                               "Name":              "CompensateFirstState",
+                               "IsForCompensation": true,
+                               "Input":             
[]interface{}{map[string]interface{}{}},
+                               "Output":            map[string]interface{}{},
+                               "Status":            map[string]interface{}{},
+                               "Retry":             []interface{}{},
+                               "ServiceName":       "",
+                               "ServiceMethod":     "",
+                               "Type":              "ServiceTask",
+                       },
+                       "SubStateMachine-cauj9uy": map[string]interface{}{
+                               "style": map[string]interface{}{
+                                       "bounds": boundsMap4,
+                               },
+                               "Name":              "SubStateMachine-cauj9uy",
+                               "IsForCompensation": false,
+                               "Input":             
[]interface{}{map[string]interface{}{}},
+                               "Output":            map[string]interface{}{},
+                               "Status":            map[string]interface{}{},
+                               "Retry":             []interface{}{},
+                               "StateMachineName":  "",
+                               "Type":              "SubStateMachine",
+                               "Next":              "Succeed-5x3z98u",
+                               "edge": map[string]interface{}{
+                                       "Succeed-5x3z98u": 
map[string]interface{}{
+                                               "style": map[string]interface{}{
+                                                       "waypoints": waypoints4,
+                                                       "source":    
"SubStateMachine-cauj9uy",
+                                                       "target":    
"Succeed-5x3z98u",
+                                               },
+                                               "Type": "Transition",
+                                       },
+                               },
+                       },
+                       "ServiceTask-vdij28l": map[string]interface{}{
+                               "style": map[string]interface{}{
+                                       "bounds": boundsMap5,
+                               },
+                               "Name":              "ServiceTask-vdij28l",
+                               "IsForCompensation": false,
+                               "Input":             
[]interface{}{map[string]interface{}{}},
+                               "Output":            map[string]interface{}{},
+                               "Status":            map[string]interface{}{},
+                               "Retry":             []interface{}{},
+                               "ServiceName":       "",
+                               "ServiceMethod":     "",
+                               "Catch": []interface{}{
+                                       map[string]interface{}{
+                                               "Exceptions": []interface{}{},
+                                               "Next":       
"CompensationTrigger-uldp2ou",
+                                       },
+                               },
+                               "Type": "ServiceTask",
+                               "catch": map[string]interface{}{
+                                       "style": map[string]interface{}{
+                                               "bounds": boundsMap6,
+                                       },
+                                       "edge": map[string]interface{}{
+                                               "CompensationTrigger-uldp2ou": 
map[string]interface{}{
+                                                       "style": 
map[string]interface{}{
+                                                               "waypoints": 
waypoints5,
+                                                               "source":    
"ServiceTask-vdij28l",
+                                                               "target":    
"CompensationTrigger-uldp2ou",
+                                                       },
+                                                       "Type": 
"ExceptionMatch",
+                                               },
+                                       },
+                               },
+                               "Next": "Succeed-5x3z98u",
+                               "edge": map[string]interface{}{
+                                       "Succeed-5x3z98u": 
map[string]interface{}{
+                                               "style": map[string]interface{}{
+                                                       "waypoints": waypoints6,
+                                                       "source":    
"ServiceTask-vdij28l",
+                                                       "target":    
"Succeed-5x3z98u",
+                                               },
+                                               "Type": "Transition",
+                                       },
+                               },
+                       },
+                       "Succeed-5x3z98u": map[string]interface{}{
+                               "style": map[string]interface{}{
+                                       "bounds": boundsMap7,
+                               },
+                               "Name": "Succeed-5x3z98u",
+                               "Type": "Succeed",
+                       },
+                       "CompensationTrigger-uldp2ou": map[string]interface{}{
+                               "style": map[string]interface{}{
+                                       "bounds": boundsMap8,
+                               },
+                               "Name": "CompensationTrigger-uldp2ou",
+                               "Type": "CompensationTrigger",
+                               "Next": "Fail-9roxcv5",
+                               "edge": map[string]interface{}{
+                                       "Fail-9roxcv5": map[string]interface{}{
+                                               "style": map[string]interface{}{
+                                                       "waypoints": waypoints7,
+                                                       "source":    
"CompensationTrigger-uldp2ou",
+                                                       "target":    
"Fail-9roxcv5",
+                                               },
+                                               "Type": "Transition",
+                                       },
+                               },
+                       },
+                       "Fail-9roxcv5": map[string]interface{}{
+                               "style": map[string]interface{}{
+                                       "bounds": boundsMap9,
+                               },
+                               "Name":      "Fail-9roxcv5",
+                               "ErrorCode": "",
+                               "Message":   "",
+                               "Type":      "Fail",
+                       },
+               },
+       }
+}
diff --git a/pkg/saga/statemachine/statelang/parser/statemachine_json_parser.go 
b/pkg/saga/statemachine/statelang/parser/statemachine_json_parser.go
index 4bcfdcbc..c3003ddf 100644
--- a/pkg/saga/statemachine/statelang/parser/statemachine_json_parser.go
+++ b/pkg/saga/statemachine/statelang/parser/statemachine_json_parser.go
@@ -1,7 +1,23 @@
+/*
+ * 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 parser
 
 import (
-       "encoding/json"
        "github.com/pkg/errors"
        "github.com/seata/seata-go/pkg/saga/statemachine/constant"
        "github.com/seata/seata-go/pkg/saga/statemachine/statelang"
@@ -23,9 +39,7 @@ func (stateMachineParser JSONStateMachineParser) GetType() 
string {
 }
 
 func (stateMachineParser JSONStateMachineParser) Parse(content string) 
(statelang.StateMachine, error) {
-       var stateMachineJsonObject StateMachineJsonObject
-
-       err := json.Unmarshal([]byte(content), &stateMachineJsonObject)
+       stateMachineJsonObject, err := 
NewStateMachineConfigParser().Parse([]byte(content))
        if err != nil {
                return nil, err
        }
@@ -115,16 +129,3 @@ func (stateMachineParser JSONStateMachineParser) 
isTaskState(stateType string) b
        }
        return false
 }
-
-type StateMachineJsonObject struct {
-       Name                        string                 `json:"Name"`
-       Comment                     string                 `json:"Comment"`
-       Version                     string                 `json:"Version"`
-       StartState                  string                 `json:"StartState"`
-       RecoverStrategy             string                 
`json:"RecoverStrategy"`
-       Persist                     bool                   `json:"IsPersist"`
-       RetryPersistModeUpdate      bool                   
`json:"IsRetryPersistModeUpdate"`
-       CompensatePersistModeUpdate bool                   
`json:"IsCompensatePersistModeUpdate"`
-       Type                        string                 `json:"Type"`
-       States                      map[string]interface{} `json:"States"`
-}
diff --git 
a/pkg/saga/statemachine/statelang/parser/statemachine_json_parser_test.go 
b/pkg/saga/statemachine/statelang/parser/statemachine_json_parser_test.go
index 0028309a..2cc82808 100644
--- a/pkg/saga/statemachine/statelang/parser/statemachine_json_parser_test.go
+++ b/pkg/saga/statemachine/statelang/parser/statemachine_json_parser_test.go
@@ -1,45 +1,103 @@
+/*
+ * 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 parser
 
 import (
-       "os"
        "testing"
 )
 
 func TestParseChoice(t *testing.T) {
-       filePath := 
"../../../../../testdata/saga/statelang/simple_statelang_with_choice.json"
-       fileContent, err := os.ReadFile(filePath)
-       if err != nil {
-               t.Error("parse fail: " + err.Error())
-               return
+       parser := NewJSONStateMachineParser()
+
+       tests := []struct {
+               name           string
+               configFilePath string
+       }{
+               {
+                       name:           "JSON Simple: StateLang With Choice",
+                       configFilePath: 
"../../../../../testdata/saga/statelang/simple_statelang_with_choice.json",
+               },
+               {
+                       name:           "YAML Simple: StateLang With Choice",
+                       configFilePath: 
"../../../../../testdata/saga/statelang/simple_statelang_with_choice.yaml",
+               },
        }
-       _, err = NewJSONStateMachineParser().Parse(string(fileContent))
-       if err != nil {
-               t.Error("parse fail: " + err.Error())
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       _, err := parser.Parse(tt.configFilePath)
+                       if err != nil {
+                               t.Error("parse fail: " + err.Error())
+                       }
+               })
        }
 }
 
 func TestParseServiceTaskForSimpleStateMachine(t *testing.T) {
-       filePath := 
"../../../../../testdata/saga/statelang/simple_statemachine.json"
-       fileContent, err := os.ReadFile(filePath)
-       if err != nil {
-               t.Error("parse fail: " + err.Error())
-               return
+       parser := NewJSONStateMachineParser()
+
+       tests := []struct {
+               name           string
+               configFilePath string
+       }{
+               {
+                       name:           "JSON Simple: StateMachine",
+                       configFilePath: 
"../../../../../testdata/saga/statelang/simple_statemachine.json",
+               },
+               {
+                       name:           "YAML Simple: StateMachine",
+                       configFilePath: 
"../../../../../testdata/saga/statelang/simple_statemachine.yaml",
+               },
        }
-       _, err = NewJSONStateMachineParser().Parse(string(fileContent))
-       if err != nil {
-               t.Error("parse fail: " + err.Error())
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       _, err := parser.Parse(tt.configFilePath)
+                       if err != nil {
+                               t.Error("parse fail: " + err.Error())
+                       }
+               })
        }
 }
 
 func TestParseServiceTaskForNewDesigner(t *testing.T) {
-       filePath := 
"../../../../../testdata/saga/statelang/state_machine_new_designer.json"
-       fileContent, err := os.ReadFile(filePath)
-       if err != nil {
-               t.Error("parse fail: " + err.Error())
-               return
+       parser := NewJSONStateMachineParser()
+
+       tests := []struct {
+               name           string
+               configFilePath string
+       }{
+               {
+                       name:           "JSON Simple: StateMachine New 
Designer",
+                       configFilePath: 
"../../../../../testdata/saga/statelang/state_machine_new_designer.json",
+               },
+               {
+                       name:           "YAML Simple: StateMachine New 
Designer",
+                       configFilePath: 
"../../../../../testdata/saga/statelang/state_machine_new_designer.yaml",
+               },
        }
-       _, err = NewJSONStateMachineParser().Parse(string(fileContent))
-       if err != nil {
-               t.Error("parse fail: " + err.Error())
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       _, err := parser.Parse(tt.configFilePath)
+                       if err != nil {
+                               t.Error("parse fail: " + err.Error())
+                       }
+               })
        }
 }
diff --git a/pkg/saga/statemachine/statelang/parser/statemachine_parser.go 
b/pkg/saga/statemachine/statelang/parser/statemachine_parser.go
index 690ad278..883d28e2 100644
--- a/pkg/saga/statemachine/statelang/parser/statemachine_parser.go
+++ b/pkg/saga/statemachine/statelang/parser/statemachine_parser.go
@@ -1,3 +1,20 @@
+/*
+ * 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 parser
 
 import (
@@ -148,18 +165,23 @@ func (b BaseStateParser) GetIntOrDefault(stateName 
string, stateMap map[string]i
                return defaultValue, nil
        }
 
-       // just use float64 to convert, json reader will read all number as 
float64
-       valueAsFloat64, ok := value.(float64)
-       if !ok {
+       // use float64 conversion when the configuration file is json, and use 
int conversion when the configuration file is yaml
+       valueAsFloat64, okToFloat64 := value.(float64)
+       valueAsInt, okToInt := value.(int)
+       if !okToFloat64 && !okToInt {
                return defaultValue, errors.New("State [" + stateName + "] " + 
key + " illegal, required int")
        }
 
-       floatStr := strconv.FormatFloat(valueAsFloat64, 'f', -1, 64)
-       if strings.Contains(floatStr, ".") {
-               return defaultValue, errors.New("State [" + stateName + "] " + 
key + " illegal, required int")
+       if okToFloat64 {
+               floatStr := strconv.FormatFloat(valueAsFloat64, 'f', -1, 64)
+               if strings.Contains(floatStr, ".") {
+                       return defaultValue, errors.New("State [" + stateName + 
"] " + key + " illegal, required int")
+               }
+
+               return int(valueAsFloat64), nil
        }
 
-       return int(valueAsFloat64), nil
+       return valueAsInt, nil
 }
 
 func (b BaseStateParser) GetFloat64OrDefault(stateName string, stateMap 
map[string]interface{}, key string, defaultValue float64) (float64, error) {
@@ -169,11 +191,17 @@ func (b BaseStateParser) GetFloat64OrDefault(stateName 
string, stateMap map[stri
                return defaultValue, nil
        }
 
-       valueAsFloat64, ok := value.(float64)
-       if !ok {
+       // use float64 conversion when the configuration file is json, and use 
int conversion when the configuration file is yaml
+       valueAsFloat64, okToFloat64 := value.(float64)
+       valueAsInt, okToInt := value.(int)
+       if !okToFloat64 && !okToInt {
                return defaultValue, errors.New("State [" + stateName + "] " + 
key + " illegal, required float64")
        }
-       return valueAsFloat64, nil
+
+       if okToFloat64 {
+               return valueAsFloat64, nil
+       }
+       return float64(valueAsInt), nil
 }
 
 type StateParserFactory interface {
diff --git a/pkg/saga/statemachine/statelang/parser/sub_state_machine_parser.go 
b/pkg/saga/statemachine/statelang/parser/sub_state_machine_parser.go
index 4de6e5de..5938e5e4 100644
--- a/pkg/saga/statemachine/statelang/parser/sub_state_machine_parser.go
+++ b/pkg/saga/statemachine/statelang/parser/sub_state_machine_parser.go
@@ -1,3 +1,20 @@
+/*
+ * 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 parser
 
 import (
diff --git a/pkg/saga/statemachine/statelang/parser/task_state_json_parser.go 
b/pkg/saga/statemachine/statelang/parser/task_state_json_parser.go
index 8dcfff5c..3c9bff09 100644
--- a/pkg/saga/statemachine/statelang/parser/task_state_json_parser.go
+++ b/pkg/saga/statemachine/statelang/parser/task_state_json_parser.go
@@ -1,3 +1,20 @@
+/*
+ * 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 parser
 
 import (
@@ -242,7 +259,7 @@ func (s ServiceTaskStateParser) Parse(stateName string, 
stateMap map[string]inte
                return nil, err
        }
 
-       serviceName, err := s.GetString(stateName, stateMap, "serviceName")
+       serviceName, err := s.GetString(stateName, stateMap, "ServiceName")
        if err != nil {
                return nil, err
        }
diff --git a/pkg/saga/statemachine/statelang/state.go 
b/pkg/saga/statemachine/statelang/state.go
index 29ac6727..f53449cf 100644
--- a/pkg/saga/statemachine/statelang/state.go
+++ b/pkg/saga/statemachine/statelang/state.go
@@ -1,3 +1,20 @@
+/*
+ * 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 statelang
 
 type State interface {
diff --git a/pkg/saga/statemachine/statelang/state/choice_state.go 
b/pkg/saga/statemachine/statelang/state/choice_state.go
index c3f48276..2226404b 100644
--- a/pkg/saga/statemachine/statelang/state/choice_state.go
+++ b/pkg/saga/statemachine/statelang/state/choice_state.go
@@ -1,3 +1,20 @@
+/*
+ * 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 state
 
 import "github.com/seata/seata-go/pkg/saga/statemachine/statelang"
diff --git 
a/pkg/saga/statemachine/statelang/state/compensation_trigger_state.go 
b/pkg/saga/statemachine/statelang/state/compensation_trigger_state.go
index cac71420..922b380f 100644
--- a/pkg/saga/statemachine/statelang/state/compensation_trigger_state.go
+++ b/pkg/saga/statemachine/statelang/state/compensation_trigger_state.go
@@ -1,3 +1,20 @@
+/*
+ * 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 state
 
 import (
diff --git a/pkg/saga/statemachine/statelang/state/end_state.go 
b/pkg/saga/statemachine/statelang/state/end_state.go
index 099e2e07..3e1c2033 100644
--- a/pkg/saga/statemachine/statelang/state/end_state.go
+++ b/pkg/saga/statemachine/statelang/state/end_state.go
@@ -1,3 +1,20 @@
+/*
+ * 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 state
 
 import (
diff --git a/pkg/saga/statemachine/statelang/state/loop_start_state.go 
b/pkg/saga/statemachine/statelang/state/loop_start_state.go
index e059431d..91d604a6 100644
--- a/pkg/saga/statemachine/statelang/state/loop_start_state.go
+++ b/pkg/saga/statemachine/statelang/state/loop_start_state.go
@@ -1,3 +1,20 @@
+/*
+ * 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 state
 
 import (
diff --git a/pkg/saga/statemachine/statelang/state/sub_state_machine.go 
b/pkg/saga/statemachine/statelang/state/sub_state_machine.go
index 78683a0a..e18fc0ee 100644
--- a/pkg/saga/statemachine/statelang/state/sub_state_machine.go
+++ b/pkg/saga/statemachine/statelang/state/sub_state_machine.go
@@ -1,3 +1,20 @@
+/*
+ * 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 state
 
 import (
diff --git a/pkg/saga/statemachine/statelang/state/task_state.go 
b/pkg/saga/statemachine/statelang/state/task_state.go
index bc9880ac..a258a28d 100644
--- a/pkg/saga/statemachine/statelang/state/task_state.go
+++ b/pkg/saga/statemachine/statelang/state/task_state.go
@@ -1,3 +1,20 @@
+/*
+ * 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 state
 
 import (
diff --git a/pkg/saga/statemachine/statelang/state_instance.go 
b/pkg/saga/statemachine/statelang/state_instance.go
index e77da058..5248d033 100644
--- a/pkg/saga/statemachine/statelang/state_instance.go
+++ b/pkg/saga/statemachine/statelang/state_instance.go
@@ -1,3 +1,20 @@
+/*
+ * 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 statelang
 
 import "time"
diff --git a/pkg/saga/statemachine/statelang/statemachine.go 
b/pkg/saga/statemachine/statelang/statemachine.go
index 8b13f8d0..0e7dfff8 100644
--- a/pkg/saga/statemachine/statelang/statemachine.go
+++ b/pkg/saga/statemachine/statelang/statemachine.go
@@ -1,3 +1,20 @@
+/*
+ * 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 statelang
 
 import (
diff --git a/pkg/saga/statemachine/statelang/statemachine_instance.go 
b/pkg/saga/statemachine/statelang/statemachine_instance.go
index 9da71ee2..b794e101 100644
--- a/pkg/saga/statemachine/statelang/statemachine_instance.go
+++ b/pkg/saga/statemachine/statelang/statemachine_instance.go
@@ -1,3 +1,20 @@
+/*
+ * 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 statelang
 
 import (
diff --git a/pkg/saga/statemachine/store/db/db.go 
b/pkg/saga/statemachine/store/db/db.go
index 39d62e97..aba2c668 100644
--- a/pkg/saga/statemachine/store/db/db.go
+++ b/pkg/saga/statemachine/store/db/db.go
@@ -1,3 +1,20 @@
+/*
+ * 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 db
 
 import (
diff --git a/pkg/saga/statemachine/store/db/db_test.go 
b/pkg/saga/statemachine/store/db/db_test.go
index a5e3edc1..e80f704b 100644
--- a/pkg/saga/statemachine/store/db/db_test.go
+++ b/pkg/saga/statemachine/store/db/db_test.go
@@ -1,3 +1,20 @@
+/*
+ * 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 db
 
 import (
diff --git a/pkg/saga/statemachine/store/db/statelang.go 
b/pkg/saga/statemachine/store/db/statelang.go
index e49bf96a..f0c25e33 100644
--- a/pkg/saga/statemachine/store/db/statelang.go
+++ b/pkg/saga/statemachine/store/db/statelang.go
@@ -1,3 +1,20 @@
+/*
+ * 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 db
 
 import (
diff --git a/pkg/saga/statemachine/store/db/statelang_test.go 
b/pkg/saga/statemachine/store/db/statelang_test.go
index 87f868d8..4b870c11 100644
--- a/pkg/saga/statemachine/store/db/statelang_test.go
+++ b/pkg/saga/statemachine/store/db/statelang_test.go
@@ -1,3 +1,20 @@
+/*
+ * 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 db
 
 import (
diff --git a/pkg/saga/statemachine/store/db/statelog.go 
b/pkg/saga/statemachine/store/db/statelog.go
index 23c3b551..ba60c61f 100644
--- a/pkg/saga/statemachine/store/db/statelog.go
+++ b/pkg/saga/statemachine/store/db/statelog.go
@@ -1,3 +1,20 @@
+/*
+ * 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 db
 
 import (
diff --git a/pkg/saga/statemachine/store/db/statelog_test.go 
b/pkg/saga/statemachine/store/db/statelog_test.go
index 43767476..fb15b8cb 100644
--- a/pkg/saga/statemachine/store/db/statelog_test.go
+++ b/pkg/saga/statemachine/store/db/statelog_test.go
@@ -1,3 +1,20 @@
+/*
+ * 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 db
 
 import (
diff --git a/pkg/saga/statemachine/store/repository/state_machine_repository.go 
b/pkg/saga/statemachine/store/repository/state_machine_repository.go
index 8a62cc49..ea37171b 100644
--- a/pkg/saga/statemachine/store/repository/state_machine_repository.go
+++ b/pkg/saga/statemachine/store/repository/state_machine_repository.go
@@ -1,3 +1,20 @@
+/*
+ * 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 repository
 
 import (
diff --git a/pkg/util/reflectx/unmarkshaler.go 
b/pkg/util/reflectx/unmarkshaler.go
index 73acb276..a507a3a8 100644
--- a/pkg/util/reflectx/unmarkshaler.go
+++ b/pkg/util/reflectx/unmarkshaler.go
@@ -1,3 +1,20 @@
+/*
+ * 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 reflectx
 
 import (
diff --git a/testdata/saga/statelang/simple_statelang_with_choice.yaml 
b/testdata/saga/statelang/simple_statelang_with_choice.yaml
new file mode 100644
index 00000000..32fa403f
--- /dev/null
+++ b/testdata/saga/statelang/simple_statelang_with_choice.yaml
@@ -0,0 +1,26 @@
+Name: simpleChoiceTestStateMachine
+Comment: 带条件分支的测试状态机定义
+StartState: FirstState
+Version: 0.0.1
+States:
+  FirstState:
+    Type: ServiceTask
+    ServiceName: demoService
+    ServiceMethod: foo
+    Next: ChoiceState
+  ChoiceState:
+    Type: Choice
+    Choices:
+      - Expression: "[a] == 1"
+        Next: SecondState
+      - Expression: "[a] == 2"
+        Next: ThirdState
+    Default: SecondState
+  SecondState:
+    Type: ServiceTask
+    ServiceName: demoService
+    ServiceMethod: bar
+  ThirdState:
+    Type: ServiceTask
+    ServiceName: demoService
+    ServiceMethod: foo
\ No newline at end of file
diff --git a/testdata/saga/statelang/simple_statemachine.yaml 
b/testdata/saga/statelang/simple_statemachine.yaml
new file mode 100644
index 00000000..a5da6c03
--- /dev/null
+++ b/testdata/saga/statelang/simple_statemachine.yaml
@@ -0,0 +1,90 @@
+Name: simpleTestStateMachine
+Comment: 测试状态机定义
+StartState: FirstState
+Version: 0.0.1
+States:
+  FirstState:
+    Type: ServiceTask
+    ServiceName: is.seata.saga.DemoService
+    ServiceMethod: foo
+    IsPersist: false
+    Next: ScriptState
+  ScriptState:
+    Type: ScriptTask
+    ScriptType: groovy
+    ScriptContent: return 'hello ' + inputA
+    Input:
+      - inputA: $.data1
+    Output:
+      scriptStateResult: '$.#root'
+    Next: ChoiceState
+  ChoiceState:
+    Type: Choice
+    Choices:
+      - Expression: foo == 1
+        Next: FirstMatchState
+      - Expression: foo == 2
+        Next: SecondMatchState
+    Default: FailState
+  FirstMatchState:
+    Type: ServiceTask
+    ServiceName: is.seata.saga.DemoService
+    ServiceMethod: bar
+    CompensateState: CompensateFirst
+    Status:
+      return.code == 'S': SU
+      return.code == 'F': FA
+      '$exception{java.lang.Throwable}': UN
+    Input:
+      - inputA1: $.data1
+        inputA2:
+          a: $.data2.a
+      - inputB: $.header
+    Output:
+      firstMatchStateResult: '$.#root'
+    Retry:
+      - Exceptions: [java.lang.Exception]
+        IntervalSeconds: 2
+        MaxAttempts: 3
+        BackoffRate: 1.5
+    Catch:
+      - Exceptions:
+          - java.lang.Exception
+        Next: CompensationTrigger
+    Next: SuccessState
+  CompensateFirst:
+    Type: ServiceTask
+    ServiceName: is.seata.saga.DemoService
+    ServiceMethod: compensateBar
+    IsForCompensation: true
+    IsForUpdate: true
+    Input:
+      - input: $.data
+    Output:
+      firstMatchStateResult: '$.#root'
+    Status:
+      return.code == 'S': SU
+      return.code == 'F': FA
+      '$exception{java.lang.Throwable}': UN
+  CompensationTrigger:
+    Type: CompensationTrigger
+    Next: CompensateEndState
+  CompensateEndState:
+    Type: Fail
+    ErrorCode: StateCompensated
+    Message: State Compensated!
+  SecondMatchState:
+    Type: SubStateMachine
+    StateMachineName: simpleTestSubStateMachine
+    Input:
+      - input: $.data
+      - header: $.header
+    Output:
+      firstMatchStateResult: '$.#root'
+    Next: SuccessState
+  FailState:
+    Type: Fail
+    ErrorCode: DefaultStateError
+    Message: No Matches!
+  SuccessState:
+    Type: Succeed
diff --git a/testdata/saga/statelang/state_machine_new_designer.yaml 
b/testdata/saga/statelang/state_machine_new_designer.yaml
new file mode 100644
index 00000000..d646ab01
--- /dev/null
+++ b/testdata/saga/statelang/state_machine_new_designer.yaml
@@ -0,0 +1,286 @@
+Name: StateMachineNewDesigner
+Comment: This state machine is modeled by designer tools.
+Version: 0.0.1
+style:
+  bounds:
+    x: 200
+    y: 200
+    width: 36
+    height: 36
+States:
+  ServiceTask-a9h2o51:
+    style:
+      bounds:
+        x: 300
+        y: 178
+        width: 100
+        height: 80
+    Name: ServiceTask-a9h2o51
+    IsForCompensation: false
+    Input:
+      - {}
+    Output: {}
+    Status: {}
+    Retry: []
+    ServiceName: ""
+    ServiceMethod: ""
+    Type: ServiceTask
+    Next: Choice-4ajl8nt
+    edge:
+      Choice-4ajl8nt:
+        style:
+          waypoints:
+            - original:
+                x: 400
+                y: 218
+              x: 400
+              y: 218
+            - x: 435
+              y: 218
+            - original:
+                x: 455
+                y: 218
+              x: 455
+              y: 218
+          source: ServiceTask-a9h2o51
+          target: Choice-4ajl8nt
+        Type: Transition
+    CompensateState: CompensateFirstState
+  Choice-4ajl8nt:
+    style:
+      bounds:
+        x: 455
+        y: 193
+        width: 50
+        height: 50
+    Name: Choice-4ajl8nt
+    Type: Choice
+    Choices:
+      - Expression: ""
+        Next: SubStateMachine-cauj9uy
+      - Expression: ""
+        Next: ServiceTask-vdij28l
+    Default: SubStateMachine-cauj9uy
+    edge:
+      SubStateMachine-cauj9uy:
+        style:
+          waypoints:
+            - original:
+                x: 505
+                y: 218
+              x: 505
+              y: 218
+            - x: 530
+              y: 218
+            - original:
+                x: 550
+                y: 218
+              x: 550
+              y: 218
+          source: Choice-4ajl8nt
+          target: SubStateMachine-cauj9uy
+        Type: ChoiceEntry
+      ServiceTask-vdij28l:
+        style:
+          waypoints:
+            - original:
+                x: 480
+                y: 243
+              x: 480
+              y: 243
+            - x: 600
+              y: 290
+            - original:
+                x: 600
+                y: 310
+              x: 600
+              y: 310
+          source: Choice-4ajl8nt
+          target: ServiceTask-vdij28l
+        Type: ChoiceEntry
+  CompensateFirstState:
+    style:
+      bounds:
+        x: 300
+        y: 310
+        width: 100
+        height: 80
+    Name: CompensateFirstState
+    IsForCompensation: true
+    Input:
+      - {}
+    Output: {}
+    Status: {}
+    Retry: []
+    ServiceName: ""
+    ServiceMethod: ""
+    Type: ServiceTask
+  SubStateMachine-cauj9uy:
+    style:
+      bounds:
+        x: 550
+        y: 178
+        width: 100
+        height: 80
+    Name: SubStateMachine-cauj9uy
+    IsForCompensation: false
+    Input:
+      - {}
+    Output: {}
+    Status: {}
+    Retry: []
+    StateMachineName: ""
+    Type: SubStateMachine
+    Next: Succeed-5x3z98u
+    edge:
+      Succeed-5x3z98u:
+        style:
+          waypoints:
+            - original:
+                x: 650
+                y: 218
+              x: 650
+              y: 218
+            - x: 702
+              y: 218
+            - original:
+                x: 722
+                y: 218
+              x: 722
+              y: 218
+          source: SubStateMachine-cauj9uy
+          target: Succeed-5x3z98u
+        Type: Transition
+  ServiceTask-vdij28l:
+    style:
+      bounds:
+        x: 550
+        y: 310
+        width: 100
+        height: 80
+    Name: ServiceTask-vdij28l
+    IsForCompensation: false
+    Input:
+      - {}
+    Output: {}
+    Status: {}
+    Retry: []
+    ServiceName: ""
+    ServiceMethod: ""
+    Catch:
+      - Exceptions: []
+        Next: CompensationTrigger-uldp2ou
+    Type: ServiceTask
+    catch:
+      style:
+        bounds:
+          x: 632
+          y: 372
+          width: 36
+          height: 36
+      edge:
+        CompensationTrigger-uldp2ou:
+          style:
+            waypoints:
+              - original:
+                  x: 668
+                  y: 390
+                x: 668
+                y: 390
+              - x: 702
+                y: 390
+              - original:
+                  x: 722
+                  y: 390
+                x: 722
+                y: 390
+            source: ServiceTask-vdij28l
+            target: CompensationTrigger-uldp2ou
+          Type: ExceptionMatch
+    Next: Succeed-5x3z98u
+    edge:
+      Succeed-5x3z98u:
+        style:
+          waypoints:
+            - original:
+                x: 600
+                y: 310
+              x: 600
+              y: 310
+            - x: 740
+              y: 256
+            - original:
+                x: 740
+                y: 236
+              x: 740
+              y: 236
+          source: ServiceTask-vdij28l
+          target: Succeed-5x3z98u
+        Type: Transition
+  Succeed-5x3z98u:
+    style:
+      bounds:
+        x: 722
+        y: 200
+        width: 36
+        height: 36
+    Name: Succeed-5x3z98u
+    Type: Succeed
+  CompensationTrigger-uldp2ou:
+    style:
+      bounds:
+        x: 722
+        y: 372
+        width: 36
+        height: 36
+    Name: CompensationTrigger-uldp2ou
+    Type: CompensationTrigger
+    Next: Fail-9roxcv5
+    edge:
+      Fail-9roxcv5:
+        style:
+          waypoints:
+            - original:
+                x: 758
+                y: 390
+              x: 758
+              y: 390
+            - x: 792
+              y: 390
+            - original:
+                x: 812
+                y: 390
+              x: 812
+              y: 390
+          source: CompensationTrigger-uldp2ou
+          target: Fail-9roxcv5
+        Type: Transition
+  Fail-9roxcv5:
+    style:
+      bounds:
+        x: 812
+        y: 372
+        width: 36
+        height: 36
+    Name: Fail-9roxcv5
+    ErrorCode: ""
+    Message: ""
+    Type: Fail
+StartState: ServiceTask-a9h2o51
+edge:
+  style:
+    waypoints:
+      - original:
+          x: 236
+          y: 218
+        x: 236
+        y: 218
+      - x: 280
+        y: 218
+      - original:
+          x: 300
+          y: 218
+        x: 300
+        y: 218
+    target: ServiceTask-a9h2o51
+  Type: Transition
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@seata.apache.org
For additional commands, e-mail: notifications-h...@seata.apache.org

Reply via email to