Update to protocol v3 (#12)

* Update to protocol v3

* revert log4j2.xml

* missing license header
diff --git a/mock-collector/pom.xml b/mock-collector/pom.xml
index 2c42fbe..5fb84ba 100644
--- a/mock-collector/pom.xml
+++ b/mock-collector/pom.xml
@@ -34,7 +34,7 @@
     <url>http://maven.apache.org</url>
 
     <properties>
-        <protocol.version>b512211334db26a9c1031ce7bacfa2bef99b1d89</protocol.version>
+        <protocol.version>16fafd53d427b42e80a6fa8fc6dee28569053ebe</protocol.version>
         <protocol.workingDirectory>${project.basedir}/target/protocol</protocol.workingDirectory>
         <protocol.repos>https://github.com/apache/skywalking-data-collect-protocol.git</protocol.repos>
         <protobuf-maven-plugin.version>0.6.1</protobuf-maven-plugin.version>
@@ -50,39 +50,40 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>com.google.protobuf</groupId>
-            <artifactId>protobuf-java-util</artifactId>
-            <version>${protobuf-java-util.version}</version>
-        </dependency>
-        <dependency>
             <groupId>io.grpc</groupId>
-            <artifactId>grpc-netty</artifactId>
+            <artifactId>grpc-core</artifactId>
             <version>${grpc.version}</version>
             <exclusions>
                 <exclusion>
-                    <groupId>io.netty</groupId>
-                    <artifactId>netty-codec-http2</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>io.netty</groupId>
-                    <artifactId>netty-handler-proxy</artifactId>
+                    <groupId>com.google.android</groupId>
+                    <artifactId>annotations</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
         <dependency>
             <groupId>io.grpc</groupId>
+            <artifactId>grpc-netty</artifactId>
+            <version>${grpc.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>io.grpc</groupId>
             <artifactId>grpc-protobuf</artifactId>
             <version>${grpc.version}</version>
         </dependency>
         <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java-util</artifactId>
+            <version>${protobuf-java-util.version}</version>
+        </dependency>
+        <dependency>
             <groupId>io.grpc</groupId>
             <artifactId>grpc-stub</artifactId>
             <version>${grpc.version}</version>
         </dependency>
         <dependency>
             <groupId>io.netty</groupId>
-            <artifactId>netty-codec-http2</artifactId>
-            <version>${netty.version}</version>
+            <artifactId>netty-tcnative-boringssl-static</artifactId>
+            <version>${netty-tcnative-boringssl-static.version}</version>
         </dependency>
         <dependency>
             <groupId>org.eclipse.jetty</groupId>
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/Main.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/Main.java
index efc1428..3c5f226 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/Main.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/Main.java
@@ -19,40 +19,33 @@
 
 import io.grpc.netty.NettyServerBuilder;
 import io.netty.channel.local.LocalAddress;
-import java.io.IOException;
 import java.net.InetSocketAddress;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
-import org.apache.skywalking.plugin.test.mockcollector.mock.MockInstancePingService;
+import org.apache.skywalking.plugin.test.mockcollector.mock.MockCLRMetricReportService;
 import org.apache.skywalking.plugin.test.mockcollector.mock.MockJVMMetricReportService;
-import org.apache.skywalking.plugin.test.mockcollector.mock.MockRegisterService;
+import org.apache.skywalking.plugin.test.mockcollector.mock.MockManagementService;
 import org.apache.skywalking.plugin.test.mockcollector.mock.MockTraceSegmentService;
-import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockEndpointRegisterServletHandler;
-import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockInstanceRegisterServletHandler;
-import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockServiceInstancePingServletHandler;
-import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockServiceRegisterServletHandler;
+import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockManagementServiceKeepAliveHandler;
+import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockManagementServiceReportPropertiesHandler;
 import org.apache.skywalking.plugin.test.mockcollector.mock.rest.MockTraceSegmentCollectServletHandler;
 import org.apache.skywalking.plugin.test.mockcollector.service.ClearReceiveDataService;
 import org.apache.skywalking.plugin.test.mockcollector.service.DataValidateService;
 import org.apache.skywalking.plugin.test.mockcollector.service.GrpcAddressHttpService;
+import org.apache.skywalking.plugin.test.mockcollector.service.HealthCheckService;
 import org.apache.skywalking.plugin.test.mockcollector.service.ReceiveDataService;
+import org.apache.skywalking.plugin.test.mockcollector.service.StatusService;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
 
 public class Main {
     public static void main(String[] args) throws Exception {
+        // Mock GRPC Collector
         NettyServerBuilder.forAddress(LocalAddress.ANY)
                           .forPort(19876)
                           .maxConcurrentCallsPerConnection(12)
-                          .maxMessageSize(16777216)
-                          .addService(new MockRegisterService())
-                          .addService(new MockInstancePingService())
-                          .addService(new MockTraceSegmentService())
+                          .addService(new MockCLRMetricReportService())
                           .addService(new MockJVMMetricReportService())
+                          .addService(new MockManagementService())
+                          .addService(new MockTraceSegmentService())
                           .build()
                           .start();
 
@@ -60,44 +53,27 @@
         String contextPath = "/";
         ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
         servletContextHandler.setContextPath(contextPath);
-        servletContextHandler.addServlet(new ServletHolder(new HttpServlet() {
-            @Override
-            protected void doGet(HttpServletRequest req,
-                                 HttpServletResponse resp) throws ServletException, IOException {
-                resp.setStatus(200);
-                resp.getWriter().write("Success");
-                resp.getWriter().flush();
-            }
-        }), "/healthCheck");
-        servletContextHandler.addServlet(new ServletHolder(new HttpServlet() {
-            @Override
-            protected void doGet(HttpServletRequest req,
-                                 HttpServletResponse resp) throws ServletException, IOException {
-                if (ValidateData.INSTANCE.getRegistryItem().getServices().isEmpty()) {
-                    resp.setStatus(500);
-                    return;
-                }
-                resp.setStatus(200);
-                resp.getWriter().write("Success");
-                resp.getWriter().flush();
-            }
-        }), "/status");
+
+        // Collector service
+        servletContextHandler.addServlet(HealthCheckService.class, HealthCheckService.SERVLET_PATH);
+        servletContextHandler.addServlet(StatusService.class, StatusService.SERVLET_PATH);
         servletContextHandler.addServlet(GrpcAddressHttpService.class, GrpcAddressHttpService.SERVLET_PATH);
         servletContextHandler.addServlet(DataValidateService.class, DataValidateService.SERVLET_PATH);
         servletContextHandler.addServlet(ReceiveDataService.class, ReceiveDataService.SERVLET_PATH);
         servletContextHandler.addServlet(ClearReceiveDataService.class, ClearReceiveDataService.SERVLET_PATH);
 
+        // Mock Rest API collector
         servletContextHandler.addServlet(
-            MockInstanceRegisterServletHandler.class, MockInstanceRegisterServletHandler.SERVLET_PATH);
+            MockManagementServiceKeepAliveHandler.class,
+            MockManagementServiceKeepAliveHandler.SERVLET_PATH
+        );
         servletContextHandler.addServlet(
-            MockServiceInstancePingServletHandler.class, MockServiceInstancePingServletHandler.SERVLET_PATH);
+            MockManagementServiceReportPropertiesHandler.class,
+            MockManagementServiceReportPropertiesHandler.SERVLET_PATH
+        );
         servletContextHandler.addServlet(
-            MockServiceRegisterServletHandler.class, MockServiceRegisterServletHandler.SERVLET_PATH);
-        servletContextHandler.addServlet(
-            MockTraceSegmentCollectServletHandler.class, MockTraceSegmentCollectServletHandler.SERVLET_PATH);
-        servletContextHandler.addServlet(
-            MockEndpointRegisterServletHandler.class,
-            MockEndpointRegisterServletHandler.SERVLET_PATH
+            MockTraceSegmentCollectServletHandler.class,
+            MockTraceSegmentCollectServletHandler.SERVLET_PATH
         );
 
         jettyServer.setHandler(servletContextHandler);
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/RegistryItem.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/RegistryItem.java
deleted file mode 100644
index be76657..0000000
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/RegistryItem.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.mockcollector.entity;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class RegistryItem {
-    /**
-     * serviceName, serviceId
-     */
-    private final Map<String, Integer> services;
-    /**
-     * serviceName, operationName
-     */
-    private final Map<String, Set<String>> operationNames;
-    /**
-     * serviceName, instanceId
-     */
-    private final Map<String, List<Integer>> instanceMapping;
-    /**
-     * serviceName, count
-     */
-    private final Map<String, Integer> heartBeats;
-
-    public RegistryItem() {
-        services = new ConcurrentHashMap<>();
-        operationNames = new ConcurrentHashMap<>();
-        instanceMapping = new ConcurrentHashMap<>();
-        heartBeats = new ConcurrentHashMap<>();
-    }
-
-    public void registryService(Service service) {
-        services.putIfAbsent(service.serviceName, service.serviceId);
-    }
-
-    public void registryOperationName(OperationName operationName) {
-        String serviceName = findServiceName(operationName.serviceId);
-        Set<String> operationNameList = operationNames.get(serviceName);
-        if (operationNameList == null) {
-            operationNameList = new HashSet<>();
-            operationNames.put(serviceName, operationNameList);
-        }
-        operationNameList.add(operationName.operationName);
-    }
-
-    public void registryInstance(Instance instance) {
-        String serviceName = findServiceName(instance.serviceId);
-        List<Integer> instances = instanceMapping.get(serviceName);
-        if (instances == null) {
-            instances = new ArrayList<>();
-            instanceMapping.put(serviceName, instances);
-        }
-
-        if (!instances.contains(instance)) {
-            instances.add(instance.instanceId);
-        }
-    }
-
-    public String findServiceName(int id) {
-        for (Map.Entry<String, Integer> entry : services.entrySet()) {
-            if (entry.getValue() == id) {
-                return entry.getKey();
-            }
-        }
-        throw new RuntimeException("Cannot found the name of serviceId [" + id + "].");
-    }
-
-    public void registryHeartBeat(HeartBeat heartBeat) {
-        for (Map.Entry<String, List<Integer>> entry : instanceMapping.entrySet()) {
-            if (entry.getValue().contains(heartBeat.instanceID)) {
-                Integer count = heartBeats.get(entry.getKey());
-                if (count != null) {
-                    heartBeats.put(entry.getKey(), 0);
-                    heartBeats.put(entry.getKey(), count++);
-                }
-            }
-        }
-    }
-
-    public static class OperationName {
-        int serviceId;
-        String operationName;
-
-        public OperationName(int serviceId, String operationName) {
-            this.serviceId = serviceId;
-            this.operationName = operationName;
-        }
-    }
-
-    public static class Service {
-        String serviceName;
-        int serviceId;
-
-        public Service(String serviceName, int serviceId) {
-            this.serviceName = serviceName;
-            this.serviceId = serviceId;
-        }
-    }
-
-    public static class Instance {
-        int serviceId;
-        int instanceId;
-
-        public Instance(int serviceId, int instanceId) {
-            this.serviceId = serviceId;
-            this.instanceId = instanceId;
-        }
-    }
-
-    public static class HeartBeat {
-        private int instanceID;
-
-        public HeartBeat(int instanceID) {
-            this.instanceID = instanceID;
-        }
-    }
-
-    public Map<String, Integer> getServices() {
-        return services;
-    }
-
-    public Map<String, Set<String>> getOperationNames() {
-        return operationNames;
-    }
-
-    public Map<String, List<Integer>> getInstanceMapping() {
-        return instanceMapping;
-    }
-
-    public Map<String, Integer> getHeartBeats() {
-        return heartBeats;
-    }
-}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/RegistryItemSerializer.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/RegistryItemSerializer.java
deleted file mode 100644
index 9affc07..0000000
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/RegistryItemSerializer.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.mockcollector.entity;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-import java.lang.reflect.Type;
-
-public class RegistryItemSerializer implements JsonSerializer<RegistryItem> {
-    @Override
-    public JsonElement serialize(RegistryItem src, Type typeOfSrc, JsonSerializationContext context) {
-        JsonObject jsonObject = new JsonObject();
-        JsonArray serviceArrays = new JsonArray();
-        src.getServices().forEach((serviceName, serviceId) -> {
-            JsonObject serviceJson = new JsonObject();
-            serviceJson.addProperty(serviceName, serviceId);
-            serviceArrays.add(serviceJson);
-        });
-        jsonObject.add("services", serviceArrays);
-
-        JsonArray instanceArrays = new JsonArray();
-        src.getInstanceMapping().forEach((serviceName, instanceIds) -> {
-            JsonObject instanceJson = new JsonObject();
-            instanceJson.addProperty(serviceName, instanceIds.size());
-            instanceArrays.add(instanceJson);
-        });
-        jsonObject.add("instances", instanceArrays);
-
-        JsonArray operationNameArrays = new JsonArray();
-        src.getOperationNames().forEach((serviceName, operationNames) -> {
-            JsonObject instanceJson = new JsonObject();
-            instanceJson.add(serviceName, new Gson().toJsonTree(operationNames));
-            operationNameArrays.add(instanceJson);
-        });
-        jsonObject.add("operationNames", operationNameArrays);
-
-        JsonArray heartBeatArrays = new JsonArray();
-        src.getHeartBeats().forEach((serviceName, count) -> {
-            JsonObject instanceJson = new JsonObject();
-            instanceJson.addProperty(serviceName, count);
-            heartBeatArrays.add(instanceJson);
-        });
-        jsonObject.add("heartbeat", heartBeatArrays);
-        return jsonObject;
-    }
-}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Segment.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Segment.java
index a86fd2e..5ed2a70 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Segment.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Segment.java
@@ -17,37 +17,18 @@
 
 package org.apache.skywalking.plugin.test.mockcollector.entity;
 
-import java.util.ArrayList;
 import java.util.List;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
+import lombok.Getter;
 import lombok.ToString;
-import org.apache.skywalking.apm.network.language.agent.UniqueId;
 
 @ToString
 @Builder
 @AllArgsConstructor
+@Getter
 public class Segment {
     private String segmentId;
     private List<Span> spans;
-
-    public static class SegmentBuilder {
-
-        public SegmentBuilder addSpan(Span.SpanBuilder spanBuilder) {
-            if (spans == null) {
-                this.spans = new ArrayList<>();
-            }
-
-            spans.add(spanBuilder.build());
-            return this;
-        }
-
-        public SegmentBuilder segmentId(UniqueId segmentUniqueId) {
-            segmentId = String.join(
-                ".", Long.toString(segmentUniqueId.getIdParts(0)), Long.toString(segmentUniqueId.getIdParts(1)), Long
-                    .toString(segmentUniqueId.getIdParts(2)));
-            return this;
-        }
-    }
-
 }
+
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/SegmentItems.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/SegmentItems.java
index d54df13..8f2e526 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/SegmentItems.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/SegmentItems.java
@@ -27,8 +27,7 @@
         this.segmentItems = new HashMap<>();
     }
 
-    public SegmentItems addSegmentItem(int serviceId, Segment segment) {
-        String serviceName = ValidateData.INSTANCE.getRegistryItem().findServiceName(serviceId);
+    public SegmentItems addSegmentItem(String serviceName, Segment segment) {
         SegmentItem segmentItem = segmentItems.get(serviceName);
         if (segmentItem == null) {
             segmentItem = new SegmentItem(serviceName);
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Span.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Span.java
index dceabee..d58107c 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Span.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Span.java
@@ -40,9 +40,8 @@
 import lombok.Builder;
 import lombok.Getter;
 import lombok.ToString;
-import org.apache.skywalking.apm.network.common.KeyStringValuePair;
-import org.apache.skywalking.apm.network.language.agent.UniqueId;
-import org.apache.skywalking.apm.network.language.agent.v2.SegmentReference;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentReference;
 
 @Builder
 @ToString
@@ -61,6 +60,7 @@
     private String spanType;
     private String peer;
     private int peerId;
+    private boolean skipAnalysis;
     private List<KeyValuePair> tags = new ArrayList<>();
     private List<LogEvent> logs = new ArrayList<>();
     private List<SegmentRef> refs = new ArrayList<>();
@@ -107,60 +107,36 @@
 
     }
 
+    @Getter
+    @AllArgsConstructor
     public static class KeyValuePair {
-        @Getter
         private String key;
-        @Getter
         private String value;
-
-        public KeyValuePair(String key, String value) {
-            this.key = key;
-            this.value = value;
-        }
     }
 
     @ToString
+    @Getter
     public static class SegmentRef {
-        @Getter
-        private int parentEndpointId;
-        @Getter
         private String parentEndpoint;
-        @Getter
-        private int networkAddressId;
-        @Getter
-        private int entryEndpointId;
-        @Getter
-        private String refType;
-        @Getter
-        private int parentSpanId;
-        @Getter
-        private String parentTraceSegmentId;
-        @Getter
-        private int parentServiceInstanceId;
-        @Getter
         private String networkAddress;
-        @Getter
-        private String entryEndpoint;
-        @Getter
-        private int entryServiceInstanceId;
+        private String refType;
+        private int parentSpanId;
+        private String parentTraceSegmentId;
+        private String parentServiceInstance;
+        private String parentService;
+        private String traceId;
 
         public SegmentRef(SegmentReference ref) {
-            UniqueId segmentUniqueId = ref.getParentTraceSegmentId();
-            this.parentTraceSegmentId = String.join(
-                ".", Long.toString(segmentUniqueId.getIdParts(0)), Long.toString(segmentUniqueId
-                                                                                     .getIdParts(1)),
-                Long.toString(segmentUniqueId.getIdParts(2))
-            );
+            this.parentTraceSegmentId = ref.getParentTraceSegmentId();
             this.refType = ref.getRefType().toString();
             this.parentSpanId = ref.getParentSpanId();
-            this.entryEndpointId = ref.getEntryEndpointId();
-            this.networkAddressId = ref.getNetworkAddressId();
-            this.parentServiceInstanceId = ref.getParentServiceInstanceId();
-            this.parentEndpointId = ref.getParentEndpointId();
             this.parentEndpoint = ref.getParentEndpoint();
-            this.networkAddress = ref.getNetworkAddress();
-            this.entryEndpoint = ref.getEntryEndpoint();
-            this.entryServiceInstanceId = ref.getEntryServiceInstanceId();
+            this.parentService = ref.getParentService();
+            this.parentServiceInstance = ref.getParentServiceInstance();
+            this.parentTraceSegmentId = ref.getParentTraceSegmentId();
+            this.networkAddress = ref.getNetworkAddressUsedAtPeer();
+            this.parentSpanId = ref.getParentSpanId();
+            this.traceId = ref.getTraceId();
         }
 
     }
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/ValidateData.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/ValidateData.java
index 28b78b7..6993891 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/ValidateData.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/ValidateData.java
@@ -19,25 +19,24 @@
 
 public class ValidateData {
     public static ValidateData INSTANCE = new ValidateData();
-    private RegistryItem registryItem;
     private SegmentItems segmentItem;
 
-    public ValidateData() {
-        registryItem = new RegistryItem();
-        segmentItem = new SegmentItems();
-    }
+    private boolean registered = false;
 
-    public RegistryItem getRegistryItem() {
-        return registryItem;
+    private  ValidateData() {
+        segmentItem = new SegmentItems();
     }
 
     public SegmentItems getSegmentItem() {
         return segmentItem;
     }
 
+    public boolean isRegistered() {
+        return registered;
+    }
+
     public static void clearData() {
-        System.out.println("Clear Data");
+        INSTANCE.registered = false;
         INSTANCE.segmentItem = new SegmentItems();
-        INSTANCE.registryItem.getOperationNames().clear();
     }
 }
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/ValidateDataSerializer.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/ValidateDataSerializer.java
index d6fabf5..ee98785 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/ValidateDataSerializer.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/ValidateDataSerializer.java
@@ -28,12 +28,10 @@
 public class ValidateDataSerializer implements JsonSerializer<ValidateData> {
     @Override
     public JsonElement serialize(ValidateData src, Type typeOfSrc, JsonSerializationContext context) {
-        Gson gson = new GsonBuilder().registerTypeAdapter(RegistryItem.class, new RegistryItemSerializer())
-                                     .registerTypeAdapter(SegmentItems.class, new SegmentItemsSerializer())
+        Gson gson = new GsonBuilder().registerTypeAdapter(SegmentItems.class, new SegmentItemsSerializer())
                                      .create();
 
         JsonObject jsonObject = new JsonObject();
-        jsonObject.add("registryItems", gson.toJsonTree(src.getRegistryItem()));
         jsonObject.add("segmentItems", gson.toJsonTree(src.getSegmentItem()));
         return jsonObject;
     }
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockCLRMetricReportService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockCLRMetricReportService.java
index 0a16d7f..502adeb 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockCLRMetricReportService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockCLRMetricReportService.java
@@ -18,9 +18,9 @@
 package org.apache.skywalking.plugin.test.mockcollector.mock;
 
 import io.grpc.stub.StreamObserver;
-import org.apache.skywalking.apm.network.common.Commands;
-import org.apache.skywalking.apm.network.language.agent.v2.CLRMetricCollection;
-import org.apache.skywalking.apm.network.language.agent.v2.CLRMetricReportServiceGrpc;
+import org.apache.skywalking.apm.network.common.v3.Commands;
+import org.apache.skywalking.apm.network.language.agent.v3.CLRMetricCollection;
+import org.apache.skywalking.apm.network.language.agent.v3.CLRMetricReportServiceGrpc;
 
 /**
  * Author Daming Email zteny@foxmail.com
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockInstancePingService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockInstancePingService.java
deleted file mode 100644
index 82956c0..0000000
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockInstancePingService.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.mockcollector.mock;
-
-import io.grpc.stub.StreamObserver;
-import org.apache.skywalking.apm.network.common.Commands;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstancePingGrpc;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstancePingPkg;
-import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
-
-public class MockInstancePingService extends ServiceInstancePingGrpc.ServiceInstancePingImplBase {
-
-    @Override
-    public void doPing(ServiceInstancePingPkg request, StreamObserver<Commands> responseObserver) {
-        ValidateData.INSTANCE.getRegistryItem()
-                             .registryHeartBeat(new RegistryItem.HeartBeat(request.getServiceInstanceId()));
-        responseObserver.onNext(Commands.getDefaultInstance());
-        responseObserver.onCompleted();
-    }
-}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockJVMMetricReportService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockJVMMetricReportService.java
index c7c3b09..762b694 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockJVMMetricReportService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockJVMMetricReportService.java
@@ -18,9 +18,9 @@
 package org.apache.skywalking.plugin.test.mockcollector.mock;
 
 import io.grpc.stub.StreamObserver;
-import org.apache.skywalking.apm.network.common.Commands;
-import org.apache.skywalking.apm.network.language.agent.v2.JVMMetricCollection;
-import org.apache.skywalking.apm.network.language.agent.v2.JVMMetricReportServiceGrpc;
+import org.apache.skywalking.apm.network.common.v3.Commands;
+import org.apache.skywalking.apm.network.language.agent.v3.JVMMetricCollection;
+import org.apache.skywalking.apm.network.language.agent.v3.JVMMetricReportServiceGrpc;
 
 /**
  * Author Daming Email zteny@foxmail.com
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockManagementService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockManagementService.java
new file mode 100644
index 0000000..bb26184
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockManagementService.java
@@ -0,0 +1,42 @@
+/*
+ * 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 org.apache.skywalking.plugin.test.mockcollector.mock;
+
+import io.grpc.stub.StreamObserver;
+import org.apache.skywalking.apm.network.common.v3.Commands;
+import org.apache.skywalking.apm.network.management.v3.InstancePingPkg;
+import org.apache.skywalking.apm.network.management.v3.InstanceProperties;
+import org.apache.skywalking.apm.network.management.v3.ManagementServiceGrpc;
+
+public class MockManagementService extends ManagementServiceGrpc.ManagementServiceImplBase {
+
+    @Override
+    public void reportInstanceProperties(InstanceProperties request, StreamObserver<Commands> responseObserver) {
+
+        responseObserver.onNext(Commands.newBuilder().build());
+        responseObserver.onCompleted();
+    }
+
+    @Override
+    public void keepAlive(InstancePingPkg request, StreamObserver<Commands> responseObserver) {
+        responseObserver.onNext(Commands.newBuilder().build());
+        responseObserver.onCompleted();
+    }
+
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockRegisterService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockRegisterService.java
deleted file mode 100644
index 58bfbde..0000000
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockRegisterService.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.mockcollector.mock;
-
-import io.grpc.stub.StreamObserver;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.skywalking.apm.network.common.KeyIntValuePair;
-import org.apache.skywalking.apm.network.register.v2.Endpoint;
-import org.apache.skywalking.apm.network.register.v2.EndpointMapping;
-import org.apache.skywalking.apm.network.register.v2.Endpoints;
-import org.apache.skywalking.apm.network.register.v2.NetAddressMapping;
-import org.apache.skywalking.apm.network.register.v2.NetAddresses;
-import org.apache.skywalking.apm.network.register.v2.RegisterGrpc;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstance;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstanceRegisterMapping;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstances;
-import org.apache.skywalking.apm.network.register.v2.ServiceRegisterMapping;
-import org.apache.skywalking.apm.network.register.v2.Services;
-import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
-
-@Slf4j
-public class MockRegisterService extends RegisterGrpc.RegisterImplBase {
-
-    @Override
-    public void doEndpointRegister(Endpoints request, StreamObserver<EndpointMapping> responseObserver) {
-        for (Endpoint endpoint : request.getEndpointsList()) {
-            ValidateData.INSTANCE.getRegistryItem()
-                                 .registryOperationName(new RegistryItem.OperationName(endpoint.getServiceId(), endpoint
-                                     .getEndpointName()));
-        }
-        responseObserver.onNext(EndpointMapping.getDefaultInstance());
-        responseObserver.onCompleted();
-    }
-
-    @Override
-    public void doNetworkAddressRegister(NetAddresses request, StreamObserver<NetAddressMapping> responseObserver) {
-        responseObserver.onNext(NetAddressMapping.getDefaultInstance());
-        responseObserver.onCompleted();
-    }
-
-    @Override
-    public void doServiceInstanceRegister(ServiceInstances request,
-                                          StreamObserver<ServiceInstanceRegisterMapping> responseObserver) {
-        if (request.getInstancesCount() <= 0) {
-            responseObserver.onNext(ServiceInstanceRegisterMapping.getDefaultInstance());
-            responseObserver.onCompleted();
-            return;
-        }
-
-        for (ServiceInstance serviceInstance : request.getInstancesList()) {
-            int instanceId = Sequences.INSTANCE_SEQUENCE.incrementAndGet();
-            ValidateData.INSTANCE.getRegistryItem()
-                                 .registryInstance(
-                                     new RegistryItem.Instance(serviceInstance.getServiceId(), instanceId));
-
-            responseObserver.onNext(ServiceInstanceRegisterMapping.newBuilder()
-                                                                  .addServiceInstances(KeyIntValuePair.newBuilder()
-                                                                                                      .setKey(
-                                                                                                          serviceInstance
-                                                                                                              .getInstanceUUID())
-                                                                                                      .setValue(
-                                                                                                          instanceId)
-                                                                                                      .build())
-                                                                  .build());
-            responseObserver.onCompleted();
-        }
-    }
-
-    @Override
-    public void doServiceRegister(Services request, StreamObserver<ServiceRegisterMapping> responseObserver) {
-        log.debug("receive service register.");
-        if (request.getServicesCount() <= 0) {
-            log.warn("The service count is empty. return the default service register mapping");
-            responseObserver.onNext(ServiceRegisterMapping.getDefaultInstance());
-            responseObserver.onCompleted();
-            return;
-        }
-
-        for (org.apache.skywalking.apm.network.register.v2.Service service : request.getServicesList()) {
-            String serviceName = service.getServiceName();
-            ServiceRegisterMapping.Builder builder = ServiceRegisterMapping.newBuilder();
-
-            if (serviceName.startsWith("localhost") || serviceName.startsWith("127.0.0.1")
-                || serviceName.contains(":") || serviceName.contains("/")) {
-                responseObserver.onNext(builder.build());
-                responseObserver.onCompleted();
-                return;
-            }
-
-            Integer serviceId = Sequences.SERVICE_MAPPING.get(serviceName);
-            if (serviceId == null) {
-                serviceId = Sequences.ENDPOINT_SEQUENCE.incrementAndGet();
-                Sequences.SERVICE_MAPPING.put(serviceName, serviceId);
-                ValidateData.INSTANCE.getRegistryItem()
-                                     .registryService(new RegistryItem.Service(serviceName, serviceId));
-            }
-
-            builder.addServices(KeyIntValuePair.newBuilder().setKey(serviceName).setValue(serviceId).build());
-            responseObserver.onNext(builder.build());
-            responseObserver.onCompleted();
-        }
-    }
-}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockTraceSegmentService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockTraceSegmentService.java
index 5ea663e..409964f 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockTraceSegmentService.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/MockTraceSegmentService.java
@@ -17,80 +17,32 @@
 
 package org.apache.skywalking.plugin.test.mockcollector.mock;
 
-import com.google.protobuf.InvalidProtocolBufferException;
 import io.grpc.stub.StreamObserver;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.skywalking.apm.network.common.Commands;
-import org.apache.skywalking.apm.network.common.KeyStringValuePair;
-import org.apache.skywalking.apm.network.language.agent.UpstreamSegment;
-import org.apache.skywalking.apm.network.language.agent.v2.Log;
-import org.apache.skywalking.apm.network.language.agent.v2.SegmentObject;
-import org.apache.skywalking.apm.network.language.agent.v2.SegmentReference;
-import org.apache.skywalking.apm.network.language.agent.v2.SpanObjectV2;
-import org.apache.skywalking.apm.network.language.agent.v2.TraceSegmentReportServiceGrpc;
-import org.apache.skywalking.plugin.test.mockcollector.entity.Segment;
-import org.apache.skywalking.plugin.test.mockcollector.entity.Span;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.apm.network.common.v3.Commands;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
+import org.apache.skywalking.apm.network.language.agent.v3.TraceSegmentReportServiceGrpc;
+import org.apache.skywalking.plugin.test.mockcollector.util.TraceSegmentHandler;
 
 @Slf4j
 public class MockTraceSegmentService extends TraceSegmentReportServiceGrpc.TraceSegmentReportServiceImplBase {
 
     @Override
-    public StreamObserver<UpstreamSegment> collect(StreamObserver<Commands> responseObserver) {
-        return new StreamObserver<UpstreamSegment>() {
+    public StreamObserver<SegmentObject> collect(StreamObserver<Commands> responseObserver) {
+        return new StreamObserver<SegmentObject>() {
             @Override
-            public void onNext(UpstreamSegment value) {
-                try {
-                    SegmentObject traceSegmentObject = SegmentObject.parseFrom(value.getSegment());
-                    Segment.SegmentBuilder segmentBuilder = Segment.builder()
-                                                                   .segmentId(traceSegmentObject.getTraceSegmentId());
-                    log.debug(
-                        "Receive segment: ServiceID[{}], TraceSegmentId[{}]", traceSegmentObject.getServiceId(),
-                        traceSegmentObject
-                            .getTraceSegmentId()
-                    );
-
-                    for (SpanObjectV2 spanObject : traceSegmentObject.getSpansList()) {
-                        Span.SpanBuilder spanBuilder = Span.builder()
-                                                           .operationName(spanObject.getOperationName())
-                                                           .parentSpanId(spanObject.getParentSpanId())
-                                                           .spanId(spanObject.getSpanId())
-                                                           .componentId(spanObject.getComponentId())
-                                                           .componentName(spanObject.getComponent())
-                                                           .spanLayer(spanObject.getSpanLayer().toString())
-                                                           .endTime(spanObject.getEndTime())
-                                                           .isError(spanObject.getIsError())
-                                                           .startTime(spanObject.getStartTime())
-                                                           .spanType(spanObject.getSpanType().toString())
-                                                           .peer(spanObject.getPeer())
-                                                           .peerId(spanObject.getPeerId())
-                                                           .operationId(spanObject.getOperationNameId());
-
-                        for (Log logMessage : spanObject.getLogsList()) {
-                            spanBuilder.logEvent(logMessage.getDataList());
-                        }
-
-                        for (KeyStringValuePair tags : spanObject.getTagsList()) {
-                            spanBuilder.tags(tags.getKey(), tags.getValue());
-                        }
-
-                        for (SegmentReference ref : spanObject.getRefsList()) {
-                            spanBuilder.ref(new Span.SegmentRef(ref));
-                        }
-
-                        segmentBuilder.addSpan(spanBuilder);
-                    }
-
-                    ValidateData.INSTANCE.getSegmentItem()
-                                         .addSegmentItem(traceSegmentObject.getServiceId(), segmentBuilder.build());
-                } catch (InvalidProtocolBufferException e) {
-                    e.printStackTrace();
+            public void onNext(SegmentObject segmentObject) {
+                if (segmentObject.getSpansList().size() == 0) {
+                    return;
                 }
+
+                TraceSegmentHandler.parseSegment(segmentObject);
             }
 
             @Override
-            public void onError(Throwable t) {
-
+            public void onError(Throwable throwable) {
+                log.error(throwable.getMessage(), throwable);
+                responseObserver.onCompleted();
             }
 
             @Override
@@ -100,4 +52,5 @@
             }
         };
     }
+
 }
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/Sequences.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/Sequences.java
deleted file mode 100644
index 84859c0..0000000
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/Sequences.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.mockcollector.mock;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class Sequences {
-
-    public static final AtomicInteger INSTANCE_SEQUENCE = new AtomicInteger();
-
-    public static final AtomicInteger ENDPOINT_SEQUENCE = new AtomicInteger(1);
-
-    public static final ConcurrentHashMap<String, Integer> SERVICE_MAPPING = new ConcurrentHashMap<String, Integer>();
-}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockEndpointRegisterServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockEndpointRegisterServletHandler.java
deleted file mode 100644
index b8915d8..0000000
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockEndpointRegisterServletHandler.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import java.io.IOException;
-import javax.servlet.http.HttpServletRequest;
-import org.apache.skywalking.apm.network.register.v2.Endpoint;
-import org.apache.skywalking.apm.network.register.v2.Endpoints;
-import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
-import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
-
-public class MockEndpointRegisterServletHandler extends JettyJsonHandler {
-    public static final String SERVLET_PATH = "/v2/endpoint/register";
-
-    @Override
-    protected JsonElement doGet(final HttpServletRequest req) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    protected JsonElement doPost(final HttpServletRequest req) throws IOException {
-        Endpoints.Builder builder = Endpoints.newBuilder();
-        ProtoBufJsonUtils.fromJSON(getJsonBody(req), builder);
-
-        for (Endpoint endpoint : builder.build().getEndpointsList()) {
-            ValidateData.INSTANCE.getRegistryItem()
-                                 .registryOperationName(new RegistryItem.OperationName(endpoint.getServiceId(), endpoint
-                                     .getEndpointName()));
-        }
-
-        return new JsonArray();
-    }
-}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockInstanceRegisterServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockInstanceRegisterServletHandler.java
deleted file mode 100644
index 66eb822..0000000
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockInstanceRegisterServletHandler.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import java.io.IOException;
-import javax.servlet.http.HttpServletRequest;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstance;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstances;
-import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
-import org.apache.skywalking.plugin.test.mockcollector.mock.Sequences;
-import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
-
-public class MockInstanceRegisterServletHandler extends JettyJsonHandler {
-    private static final String KEY = "key";
-    private static final String VALUE = "value";
-
-    public static final String SERVLET_PATH = "/v2/instance/register";
-
-    @Override
-    protected JsonElement doGet(final HttpServletRequest req) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    protected JsonElement doPost(final HttpServletRequest req) throws IOException {
-        JsonArray response = new JsonArray();
-        ServiceInstances.Builder builder = ServiceInstances.newBuilder();
-        ProtoBufJsonUtils.fromJSON(getJsonBody(req), builder);
-
-        for (ServiceInstance serviceInstance : builder.build().getInstancesList()) {
-            int instanceId = Sequences.INSTANCE_SEQUENCE.incrementAndGet();
-            ValidateData.INSTANCE.getRegistryItem()
-                                 .registryInstance(
-                                     new RegistryItem.Instance(serviceInstance.getServiceId(), instanceId));
-
-            JsonObject register = new JsonObject();
-            register.addProperty(KEY, serviceInstance.getInstanceUUID());
-            register.addProperty(VALUE, instanceId);
-
-            response.add(register);
-        }
-        return response;
-    }
-}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceInstancePingServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockManagementServiceKeepAliveHandler.java
similarity index 61%
copy from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceInstancePingServletHandler.java
copy to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockManagementServiceKeepAliveHandler.java
index be1f216..8e54691 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceInstancePingServletHandler.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockManagementServiceKeepAliveHandler.java
@@ -18,17 +18,16 @@
 
 package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
 
-import com.google.gson.JsonArray;
+import com.google.gson.Gson;
 import com.google.gson.JsonElement;
 import java.io.IOException;
 import javax.servlet.http.HttpServletRequest;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstancePingPkg;
-import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.apm.network.common.v3.Commands;
 import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
 
-public class MockServiceInstancePingServletHandler extends JettyJsonHandler {
-    public static final String SERVLET_PATH = "/v2/instance/heartbeat";
+public class MockManagementServiceKeepAliveHandler extends JettyJsonHandler {
+    public static final String SERVLET_PATH = "/v3/management/keepAlive";
+    private final Gson gson = new Gson();
 
     @Override
     protected JsonElement doGet(final HttpServletRequest req) {
@@ -37,13 +36,6 @@
 
     @Override
     protected JsonElement doPost(final HttpServletRequest req) throws IOException {
-
-        ServiceInstancePingPkg.Builder builder = ServiceInstancePingPkg.newBuilder();
-        ProtoBufJsonUtils.fromJSON(getJsonBody(req), builder);
-        ServiceInstancePingPkg instancePingPkg = builder.build();
-
-        ValidateData.INSTANCE.getRegistryItem()
-                             .registryHeartBeat(new RegistryItem.HeartBeat(instancePingPkg.getServiceInstanceId()));
-        return new JsonArray();
+        return gson.fromJson(ProtoBufJsonUtils.toJSON(Commands.newBuilder().build()), JsonElement.class);
     }
 }
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceInstancePingServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockManagementServiceReportPropertiesHandler.java
similarity index 61%
rename from mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceInstancePingServletHandler.java
rename to mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockManagementServiceReportPropertiesHandler.java
index be1f216..6411422 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceInstancePingServletHandler.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockManagementServiceReportPropertiesHandler.java
@@ -18,17 +18,16 @@
 
 package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
 
-import com.google.gson.JsonArray;
+import com.google.gson.Gson;
 import com.google.gson.JsonElement;
 import java.io.IOException;
 import javax.servlet.http.HttpServletRequest;
-import org.apache.skywalking.apm.network.register.v2.ServiceInstancePingPkg;
-import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.apm.network.common.v3.Commands;
 import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
 
-public class MockServiceInstancePingServletHandler extends JettyJsonHandler {
-    public static final String SERVLET_PATH = "/v2/instance/heartbeat";
+public class MockManagementServiceReportPropertiesHandler extends JettyJsonHandler {
+    public static final String SERVLET_PATH = "/v3/management/reportProperties";
+    private final Gson gson = new Gson();
 
     @Override
     protected JsonElement doGet(final HttpServletRequest req) {
@@ -37,13 +36,6 @@
 
     @Override
     protected JsonElement doPost(final HttpServletRequest req) throws IOException {
-
-        ServiceInstancePingPkg.Builder builder = ServiceInstancePingPkg.newBuilder();
-        ProtoBufJsonUtils.fromJSON(getJsonBody(req), builder);
-        ServiceInstancePingPkg instancePingPkg = builder.build();
-
-        ValidateData.INSTANCE.getRegistryItem()
-                             .registryHeartBeat(new RegistryItem.HeartBeat(instancePingPkg.getServiceInstanceId()));
-        return new JsonArray();
+        return gson.fromJson(ProtoBufJsonUtils.toJSON(Commands.newBuilder().build()), JsonElement.class);
     }
 }
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceRegisterServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceRegisterServletHandler.java
deleted file mode 100644
index afd3020..0000000
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockServiceRegisterServletHandler.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.skywalking.plugin.test.mockcollector.mock.rest;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import java.io.IOException;
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import org.apache.skywalking.apm.network.register.v2.Service;
-import org.apache.skywalking.apm.network.register.v2.Services;
-import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
-import org.apache.skywalking.plugin.test.mockcollector.mock.Sequences;
-import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
-
-public class MockServiceRegisterServletHandler extends JettyJsonHandler {
-    public static final String SERVLET_PATH = "/v2/service/register";
-    private static final String KEY = "key";
-    private static final String VALUE = "value";
-
-    @Override
-    protected JsonElement doGet(final HttpServletRequest req) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    protected JsonElement doPost(final HttpServletRequest req) throws IOException {
-        JsonArray response = new JsonArray();
-
-        Services.Builder servicesBuilder = Services.newBuilder();
-        ProtoBufJsonUtils.fromJSON(getJsonBody(req), servicesBuilder);
-        List<Service> serviceList = servicesBuilder.build().getServicesList();
-
-        for (Service service : serviceList) {
-            String serviceName = service.getServiceName();
-            if (serviceName.startsWith("localhost") || serviceName.startsWith("127.0.0.1")
-                || serviceName.contains(":") || serviceName.contains("/")) {
-                return response;
-            }
-
-            Integer serviceId = Sequences.SERVICE_MAPPING.get(serviceName);
-            if (serviceId == null) {
-                serviceId = Sequences.ENDPOINT_SEQUENCE.incrementAndGet();
-                Sequences.SERVICE_MAPPING.put(serviceName, serviceId);
-                ValidateData.INSTANCE.getRegistryItem()
-                                     .registryService(new RegistryItem.Service(serviceName, serviceId));
-            }
-            JsonObject mapping = new JsonObject();
-            mapping.addProperty(KEY, serviceName);
-            mapping.addProperty(VALUE, serviceId);
-            response.add(mapping);
-        }
-        return response;
-    }
-}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockTraceSegmentCollectServletHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockTraceSegmentCollectServletHandler.java
index 532fc16..876b586 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockTraceSegmentCollectServletHandler.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/mock/rest/MockTraceSegmentCollectServletHandler.java
@@ -22,20 +22,12 @@
 import com.google.gson.JsonElement;
 import java.io.IOException;
 import javax.servlet.http.HttpServletRequest;
-import org.apache.skywalking.apm.network.common.KeyStringValuePair;
-import org.apache.skywalking.apm.network.language.agent.UpstreamSegment;
-import org.apache.skywalking.apm.network.language.agent.v2.Log;
-import org.apache.skywalking.apm.network.language.agent.v2.SegmentObject;
-import org.apache.skywalking.apm.network.language.agent.v2.SegmentReference;
-import org.apache.skywalking.apm.network.language.agent.v2.SpanObjectV2;
-import org.apache.skywalking.plugin.test.mockcollector.entity.RegistryItem;
-import org.apache.skywalking.plugin.test.mockcollector.entity.Segment;
-import org.apache.skywalking.plugin.test.mockcollector.entity.Span;
-import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
 import org.apache.skywalking.plugin.test.mockcollector.util.ProtoBufJsonUtils;
+import org.apache.skywalking.plugin.test.mockcollector.util.TraceSegmentHandler;
 
 public class MockTraceSegmentCollectServletHandler extends JettyJsonHandler {
-    public static final String SERVLET_PATH = "/v2/segments";
+    public static final String SERVLET_PATH = "/v3/segments";
 
     @Override
     protected JsonElement doGet(final HttpServletRequest req) {
@@ -46,49 +38,10 @@
     protected JsonElement doPost(final HttpServletRequest req) throws IOException {
         String json = CharStreams.toString(req.getReader());
 
-        SegmentObject.Builder _builder = SegmentObject.newBuilder();
-        ProtoBufJsonUtils.fromJSON(json, _builder);
+        SegmentObject.Builder upstreamSegmentBuilder = SegmentObject.newBuilder();
+        ProtoBufJsonUtils.fromJSON(json, upstreamSegmentBuilder);
 
-        UpstreamSegment.Builder upstreamSegmentBuilder = UpstreamSegment.newBuilder();
-        UpstreamSegment value = upstreamSegmentBuilder.setSegment(_builder.build().toByteString()).build();
-
-        SegmentObject traceSegmentObject = SegmentObject.parseFrom(value.getSegment());
-        Segment.SegmentBuilder segmentBuilder = Segment.builder()
-                                                       .segmentId(traceSegmentObject.getTraceSegmentId());
-
-        for (SpanObjectV2 spanObject : traceSegmentObject.getSpansList()) {
-            Span.SpanBuilder spanBuilder = Span.builder()
-                                               .operationName(spanObject.getOperationName())
-                                               .parentSpanId(spanObject.getParentSpanId())
-                                               .spanId(spanObject.getSpanId())
-                                               .componentId(spanObject.getComponentId())
-                                               .componentName(spanObject.getComponent())
-                                               .spanLayer(spanObject.getSpanLayer().toString())
-                                               .endTime(spanObject.getEndTime())
-                                               .isError(spanObject.getIsError())
-                                               .startTime(spanObject.getStartTime())
-                                               .spanType(spanObject.getSpanType().toString())
-                                               .peer(spanObject.getPeer())
-                                               .peerId(spanObject.getPeerId())
-                                               .operationId(spanObject.getOperationNameId());
-
-            for (Log logMessage : spanObject.getLogsList()) {
-                spanBuilder.logEvent(logMessage.getDataList());
-            }
-
-            for (KeyStringValuePair tags : spanObject.getTagsList()) {
-                spanBuilder.tags(tags.getKey(), tags.getValue());
-            }
-
-            for (SegmentReference ref : spanObject.getRefsList()) {
-                spanBuilder.ref(new Span.SegmentRef(ref));
-            }
-
-            segmentBuilder.addSpan(spanBuilder);
-        }
-
-        ValidateData.INSTANCE.getSegmentItem()
-                             .addSegmentItem(traceSegmentObject.getServiceId(), segmentBuilder.build());
+        TraceSegmentHandler.parseSegment(upstreamSegmentBuilder.build());
         return null;
     }
 }
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/HealthCheckService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/HealthCheckService.java
new file mode 100644
index 0000000..d2f9c31
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/HealthCheckService.java
@@ -0,0 +1,36 @@
+/*
+ * 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 org.apache.skywalking.plugin.test.mockcollector.service;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class HealthCheckService extends HttpServlet {
+    public static final String SERVLET_PATH = "/healthCheck";
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        resp.setStatus(200);
+        resp.getWriter().write("Success");
+        resp.getWriter().flush();
+    }
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/StatusService.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/StatusService.java
new file mode 100644
index 0000000..b31f988
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/service/StatusService.java
@@ -0,0 +1,42 @@
+/*
+ * 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 org.apache.skywalking.plugin.test.mockcollector.service;
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+
+public class StatusService extends HttpServlet {
+    public static final String SERVLET_PATH = "/status";
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        if (ValidateData.INSTANCE.isRegistered()) {
+            resp.setStatus(200);
+            resp.getWriter().write("Success");
+            resp.getWriter().flush();
+        } else {
+            resp.setStatus(500);
+            resp.getWriter().flush();
+        }
+    }
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/Const.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/Const.java
new file mode 100644
index 0000000..9e699cf
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/Const.java
@@ -0,0 +1,40 @@
+/*
+ * 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 org.apache.skywalking.plugin.test.mockcollector.util;
+
+public class Const {
+    public static final int NONE = 0;
+    public static final String ID_SPLIT = "_";
+    public static final String ID_PARSER_SPLIT = "\\_";
+    public static final String LINE = "-";
+    public static final String SPACE = " ";
+    public static final String KEY_VALUE_SPLIT = ",";
+    public static final String ARRAY_SPLIT = "|";
+    public static final String ARRAY_PARSER_SPLIT = "\\|";
+    public static final String USER_SERVICE_NAME = "User";
+    public static final String USER_INSTANCE_NAME = "User";
+    public static final String USER_ENDPOINT_NAME = "User";
+    public static final int INEXISTENCE_ENDPOINT_ID = -1;
+    public static final String USER_CODE = "User";
+    public static final String SEGMENT_SPAN_SPLIT = "S";
+    public static final String UNKNOWN = "Unknown";
+    public static final String EMPTY_STRING = "";
+    public static final String EMPTY_JSON_OBJECT_STRING = "{}";
+    public static final String DOMAIN_OPERATION_NAME = "{domain}";
+}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/TraceSegmentHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/TraceSegmentHandler.java
new file mode 100644
index 0000000..2ac304f
--- /dev/null
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/TraceSegmentHandler.java
@@ -0,0 +1,69 @@
+/*
+ * 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 org.apache.skywalking.plugin.test.mockcollector.util;
+
+import com.google.common.collect.Lists;
+import java.util.List;
+import org.apache.skywalking.apm.network.common.v3.KeyStringValuePair;
+import org.apache.skywalking.apm.network.language.agent.v3.Log;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentObject;
+import org.apache.skywalking.apm.network.language.agent.v3.SegmentReference;
+import org.apache.skywalking.apm.network.language.agent.v3.SpanObject;
+import org.apache.skywalking.plugin.test.mockcollector.entity.Segment;
+import org.apache.skywalking.plugin.test.mockcollector.entity.Span;
+import org.apache.skywalking.plugin.test.mockcollector.entity.ValidateData;
+
+public class TraceSegmentHandler {
+
+    public static void parseSegment(SegmentObject segmentObject) {
+        Segment.SegmentBuilder builder = Segment.builder();
+
+        List<Span> spans = Lists.newArrayList();
+        for (SpanObject spanObject : segmentObject.getSpansList()) {
+            Span.SpanBuilder spanBuilder = Span.builder();
+            spanBuilder.operationName(spanObject.getOperationName())
+                       .parentSpanId(spanObject.getParentSpanId())
+                       .spanId(spanObject.getSpanId())
+                       .spanLayer(spanObject.getSpanLayer().name())
+                       .startTime(spanObject.getStartTime())
+                       .endTime(spanObject.getEndTime())
+                       .componentId(spanObject.getComponentId())
+                       .componentName(spanObject.getComponent())
+                       .isError(spanObject.getIsError())
+                       .spanType(spanObject.getSpanType().name())
+                       .peer(spanObject.getPeer());
+
+            for (Log log : spanObject.getLogsList()) {
+                spanBuilder.logEvent(log.getDataList());
+            }
+            for (KeyStringValuePair tags : spanObject.getTagsList()) {
+                spanBuilder.tags(tags.getKey(), tags.getValue());
+            }
+            for (SegmentReference ref : spanObject.getRefsList()) {
+                spanBuilder.ref(new Span.SegmentRef(ref));
+            }
+            spans.add(spanBuilder.build());
+        }
+        builder.segmentId(segmentObject.getTraceSegmentId()).spans(spans);
+
+        ValidateData.INSTANCE.getSegmentItem()
+                             .addSegmentItem(segmentObject.getService(), builder.build());
+    }
+
+}
diff --git a/pom.xml b/pom.xml
index 295e8c3..cf0e178 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,9 +51,9 @@
         <snakeyaml.version>1.24</snakeyaml.version>
         <slf4j.version>1.7.25</slf4j.version>
         <log4j.version>2.9.0</log4j.version>
-        <netty.version>4.1.12.Final</netty.version>
+        <netty.version>4.1.42.Final</netty.version>
         <jetty.version>9.4.2.v20170220</jetty.version>
-
+        <netty-tcnative-boringssl-static.version>2.0.26.Final</netty-tcnative-boringssl-static.version>
     </properties>
 
     <dependencyManagement>
diff --git a/validator/README.md b/validator/README.md
index f092d7f..df2a8b1 100644
--- a/validator/README.md
+++ b/validator/README.md
@@ -1,5 +1,5 @@
-# agent-integration-testtool
-The agent-integration-testtool project is used that to validate the different of Skywalking Java Agent generate 
+# agent-integration-test tool
+The agent-integration-test tool project is used that to validate the different of Skywalking Java Agent generate 
 data item between you expect and the actual generate.
 
 ## Assert Exceptions
@@ -7,23 +7,6 @@
 ### Data file
 * [IllegalDataFileException](./docs/exception/IllegalDataFileException.md)
 
-### Registry Item
-#### Service
-* [RegistryInstanceOfServiceNotFoundException](./docs/exception/RegistryInstanceOfServiceNotFoundException.md)
-* [RegistryServiceNotFoundException](docs/exception/RegistryServiceNotFoundException.md)
-* [RegistryServiceSizeNotEqualsException](docs/exception/RegistryServiceSizeNotEqualsException.md)
-
-#### Instance
-* [RegistryInstanceOfServiceNotFoundException](./docs/exception/RegistryInstanceOfServiceNotFoundException.md)
-* [RegistryInstanceSizeNotEqualsException](./docs/exception/RegistryInstanceSizeNotEqualsException.md)
-* [RegistryInstancesNotEqualsException](./docs/exception/RegistryInstancesNotEqualsException.md)
-
-#### Operation name
-* [ActualRegistryOperationNameEmptyException](./docs/exception/ActualRegistryOperationNameEmptyException.md)
-* [RegistryOperationNameNotFoundException](./docs/exception/RegistryOperationNameNotFoundException.md)
-* [RegistryOperationNamesNotFoundException](./docs/exception/RegistryOperationNamesNotFoundException.md)
-* [RegistryOperationNamesOfServiceNotFoundException](./docs/exception/RegistryOperationNamesOfServiceNotFoundException.md)
-
 ### Segment
 * [ActualSegmentItemEmptyException](./docs/exception/ActualSegmentItemEmptyException.md)
 * [SegmentItemNotFoundException](./docs/exception/SegmentItemNotFoundException.md)
diff --git a/validator/docs/exception/RegistryInstanceOfServiceNotFoundException.md b/validator/docs/exception/RegistryInstanceOfServiceNotFoundException.md
deleted file mode 100644
index b11575c..0000000
--- a/validator/docs/exception/RegistryInstanceOfServiceNotFoundException.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# RegistryInstanceOfServiceNotFoundException
-
-## Format 
-RegistryInstanceOfServiceNotFoundException<br/>
-expected: Instances of Service(ServiceId)<br/>
-actual: NOT FOUND
-
-## Cause
-The `RegistryServiceNotFoundException` caused by one of service code that you write in the expected data file 
-cannot found in the actual data file.
-
-
-## Check Points
-1. Check the service code is the value of  `agent.service_name` that you configured.<br/>
-e.g.,
-the service that you write in the expected data file:  
-```
-registryItems:   {
-  "test_servce_name":  {
-  }
-}
-```
-the service of  `agent.service_name` that you configured: `-Dskywalking.agent.service_name=other_servce_name`
-
-2. Check the agent of someone project in the test case if it works.
\ No newline at end of file
diff --git a/validator/docs/exception/RegistryInstanceSizeNotEqualsException.md b/validator/docs/exception/RegistryInstanceSizeNotEqualsException.md
deleted file mode 100644
index 050e23b..0000000
--- a/validator/docs/exception/RegistryInstanceSizeNotEqualsException.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# RegistryInstanceSizeNotEqualsException
-
-## Format
-RegistryInstanceSizeNotEqualsException SERVICE_NAME<br/>
-expected: EXPECTED_SIZE<br/>
-actual:   ACTUAL_SIZE
-
-## Cause
-The `RegistryInstanceSizeNotEqualsException` caused by the size of the registry instance of one service is different between you expected and the actual
-
-## Check Points
-1. Check the size of the registry instance that you expected
-
diff --git a/validator/docs/exception/RegistryInstancesNotEqualsException.md b/validator/docs/exception/RegistryInstancesNotEqualsException.md
deleted file mode 100644
index b52ecb5..0000000
--- a/validator/docs/exception/RegistryInstancesNotEqualsException.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# RegistryInstancesNotEqualsException
-
-## Format
-RegistryInstancesNotEqualsException<br/>
-expected: EXPECTED_INSTANCE_SIZE<br/>
-actual:   ACTUAL_INSTANCE_SIZE
-
-## Cause by
-The RegistryInstancesNotEqualsException cause by the instance size is different between expected and actual
-
-## Check Points
-1.  Check the instance size that your write if it is your expected.
\ No newline at end of file
diff --git a/validator/docs/exception/RegistryOperationNameNotFoundException.md b/validator/docs/exception/RegistryOperationNameNotFoundException.md
deleted file mode 100644
index eb05652..0000000
--- a/validator/docs/exception/RegistryOperationNameNotFoundException.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# RegistryOperationNameNotFoundException
-
-## Format
-RegistryOperationNameNotFoundException SERVICE_NAME<br/>
-expected: OPERATION_NAME<br/>
-actual: NOT FOUND
-
-## Cause
-The `RegistryOperationNameNotFoundException` caused by the registry operation name that you expected cannot found in the actual data file
-
-## Check Points
-1. Check if the registry operation name that you expected is correct
-2. Check if the instrumentation that it generates the operation name works
\ No newline at end of file
diff --git a/validator/docs/exception/RegistryOperationNamesNotFoundException.md b/validator/docs/exception/RegistryOperationNamesNotFoundException.md
deleted file mode 100644
index 368a105..0000000
--- a/validator/docs/exception/RegistryOperationNamesNotFoundException.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# RegistryOperationNamesNotFoundException
-
-## Format
-RegistryOperationNamesNotFoundException  <SERVICE_NAME><br/>
-expected:   <OPERATION_NAME_1, OPERATION_NAME_2, ....><br/>
-actual:     Not Found<br/>
-
-## Cause by
-The RegistryOperationNamesNotFoundException cause by the registry operation names of someone service cannot found
- in the actual data file.
-
-## Check Points
-1. Check all the instrumentations about test case if it works. 
\ No newline at end of file
diff --git a/validator/docs/exception/RegistryOperationNamesOfApplicationNotFoundException.md b/validator/docs/exception/RegistryOperationNamesOfApplicationNotFoundException.md
deleted file mode 100644
index 66da425..0000000
--- a/validator/docs/exception/RegistryOperationNamesOfApplicationNotFoundException.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# RegistryOperationNamesOfServiceNotFoundException
-
-## Format
-RegistryOperationNamesOfServiceNotFoundException<br/>
-expected: [ OPERATION_NAME_A, OPERATION_NAME_B, ...]<br/>
-actual: NOT FOUND
-
-## Cause
-The `RegistryOperationNamesOfServiceNotFoundException`  caused by the registry operation name of someone service does not exist in the actual data file.
-
-## Check Points
-1. Check if the execute time of entry service of test case more than 40 seconds, Please make it less than 40 seconds.
\ No newline at end of file
diff --git a/validator/docs/exception/RegistryServiceNotFoundException.md b/validator/docs/exception/RegistryServiceNotFoundException.md
deleted file mode 100644
index 34023a4..0000000
--- a/validator/docs/exception/RegistryServiceNotFoundException.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# RegistryServiceNotFoundException
-
-## Format 
-RegistryServiceNotFoundException<br/>
-expected: EXPECTED_SERVICE<br/>
-actual:   NOT FOUND
-
-## Cause by
-The `RegistryServiceNotFoundException` caused by one of service code that you write in the expected data file 
-cannot found in the actual data file.
-
-
-## Check points
-1. Check the service code is the value of  `agent.service_name` that you configured.
-
-e.g.,
-the service that you write in the expected data file:  
-```
-registryItems:   {
-  "test_servce_name":  {
-  }
-}
-```
-the service of  `agent.service_name` that you configured: 
-`-Dskywalking.agent.service_name=another_service_name`
-
-2. Check the agent of someone project in the test case if it works.
\ No newline at end of file
diff --git a/validator/docs/exception/RegistryServiceSizeNotEqualsException.md b/validator/docs/exception/RegistryServiceSizeNotEqualsException.md
deleted file mode 100644
index 5f41adc..0000000
--- a/validator/docs/exception/RegistryServiceSizeNotEqualsException.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# RegistryServiceSizeNotEqualsException
-
-## Format
-RegistryServiceSizeNotEqualsException  SERVICE_NAME<br/>
-expected:  EXPECTED_SIZE<br/>
-actual:    ACTUAL_SIZE
-
-## Cause
-The `RegistryServiceSizeNotEqualsException` caused by the size of the registry service is different between expected and actual.
-
-## Check Points
-1. Check if the size of the registry service that you expected
-2. Check if the `agent.service_name` is duplicated in the test case project
\ No newline at end of file
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssert.java
index 4074817..fff1a99 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssert.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssert.java
@@ -27,7 +27,6 @@
     public static void assertEquals(Data excepted, Data actual) {
         log.info("excepted data:\n{}", new GsonBuilder().setPrettyPrinting().create().toJson(excepted));
         log.info("actual data:\n{}", new GsonBuilder().setPrettyPrinting().create().toJson(actual));
-        RegistryItemsAssert.assertEquals(excepted.registryItems(), actual.registryItems());
         SegmentItemsAssert.assertEquals(excepted.segmentItems(), actual.segmentItems());
         log.info("{} assert successful.", "segment items");
     }
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/InstanceAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/InstanceAssert.java
deleted file mode 100644
index dfde4a4..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/InstanceAssert.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor;
-
-import java.util.List;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.RegistryInstanceOfServiceNotFoundException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.RegistryInstanceSizeNotEqualsException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.ValueAssertFailedException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.entity.RegistryInstance;
-
-public class InstanceAssert {
-    public static void assertEquals(List<RegistryInstance> expected, List<RegistryInstance> actual) {
-
-        if (expected == null) {
-            return;
-        }
-
-        for (RegistryInstance instance : expected) {
-            RegistryInstance actualInstance = getMatchService(actual, instance);
-            try {
-                ExpressParser.parse(actualInstance.expressValue())
-                             .assertValue(
-                                 String.format("The registry instance of %s", instance.serviceName()),
-                                 actualInstance
-                                     .expressValue()
-                             );
-            } catch (ValueAssertFailedException e) {
-                throw new RegistryInstanceSizeNotEqualsException(instance.serviceName(), e);
-            }
-        }
-    }
-
-    private static RegistryInstance getMatchService(List<RegistryInstance> actual, RegistryInstance service) {
-        for (RegistryInstance registryInstance : actual) {
-            if (registryInstance.serviceName().equals(service.serviceName())) {
-                return registryInstance;
-            }
-        }
-        throw new RegistryInstanceOfServiceNotFoundException(service.serviceName());
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/OperationNameAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/OperationNameAssert.java
deleted file mode 100644
index cec6b3e..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/OperationNameAssert.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor;
-
-import java.util.List;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.ActualRegistryOperationNameEmptyException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.RegistryOperationNameNotFoundException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.RegistryOperationNamesOfServiceNotFoundException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.entity.RegistryOperationName;
-
-public class OperationNameAssert {
-    public static void assertEquals(List<RegistryOperationName> expected, List<RegistryOperationName> actual) {
-        if (expected == null) {
-            return;
-        }
-
-        for (RegistryOperationName operationName : expected) {
-            RegistryOperationName actualOperationName = findActualRegistryOperationName(actual, operationName);
-            assertOperationEquals(
-                actualOperationName.serviceName(), operationName.operationName(), actualOperationName
-                    .operationName());
-        }
-    }
-
-    private static void assertOperationEquals(String serviceName, List<String> expectedOperationName,
-                                              List<String> actualOperationName) {
-        for (String operationName : expectedOperationName) {
-            if (!actualOperationName.contains(operationName)) {
-                throw new RegistryOperationNameNotFoundException(serviceName, operationName);
-            }
-        }
-    }
-
-    private static RegistryOperationName findActualRegistryOperationName(List<RegistryOperationName> actual,
-                                                                         RegistryOperationName registryOperationName) {
-        if (actual == null) {
-            throw new ActualRegistryOperationNameEmptyException(registryOperationName);
-        }
-
-        for (RegistryOperationName operationName : actual) {
-            if (operationName.serviceName().equals(registryOperationName.serviceName())) {
-                return operationName;
-            }
-        }
-
-        throw new RegistryOperationNamesOfServiceNotFoundException(registryOperationName);
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/RegistryItemsAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/RegistryItemsAssert.java
deleted file mode 100644
index 6ffb950..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/RegistryItemsAssert.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.skywalking.plugin.test.agent.tool.validator.entity.RegistryItems;
-
-@Slf4j
-public class RegistryItemsAssert {
-
-    public static void assertEquals(RegistryItems excepted, RegistryItems actual) {
-        ServiceAssert.assertEquals(excepted.services(), actual.services());
-        log.info("{} assert successful.", "registry services");
-        InstanceAssert.assertEquals(excepted.instances(), actual.instances());
-        log.info("{} assert successful.", "registry instances");
-        OperationNameAssert.assertEquals(excepted.operationNames(), actual.operationNames());
-        log.info("{} assert successful.", "registry operation name");
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentAssert.java
index 1c50b58..57f6301 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentAssert.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentAssert.java
@@ -211,10 +211,12 @@
 
     private static boolean simpleSegmentRefEquals(SegmentRef expected, SegmentRef actual) {
         try {
-            ExpressParser.parse(expected.entryEndpointName())
-                         .assertValue("entry service name", actual.entryEndpointName());
-            ExpressParser.parse(expected.parentEndpointName())
-                         .assertValue("parent service name", actual.parentEndpointName());
+            ExpressParser.parse(expected.parentEndpoint())
+                         .assertValue("parent endpoint name", actual.parentEndpoint());
+            ExpressParser.parse(expected.parenService())
+                         .assertValue("parent service name", actual.parenService());
+            ExpressParser.parse(expected.networkAddress())
+                         .assertValue("network address", actual.networkAddress());
             ExpressParser.parse(expected.refType()).assertValue("ref type", actual.refType());
             return true;
         } catch (ValueAssertFailedException e) {
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentRefAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentRefAssert.java
index 41820c4..d78cb96 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentRefAssert.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/SegmentRefAssert.java
@@ -57,24 +57,22 @@
 
     private static boolean segmentRefEquals(SegmentRef expected, SegmentRef actual) {
         try {
-            ExpressParser.parse(expected.entryEndpointName())
-                         .assertValue("entry endpoint name", actual.entryEndpointName());
-            ExpressParser.parse(expected.networkAddress()).assertValue("network address", actual.networkAddress());
+            ExpressParser.parse(expected.parentEndpoint())
+                         .assertValue("entry endpoint name", actual.parentEndpoint());
+            ExpressParser.parse(expected.networkAddress())
+                         .assertValue("network address", actual.networkAddress());
+            ExpressParser.parse(expected.refType())
+                         .assertValue("ref type", actual.refType());
+            ExpressParser.parse(expected.parentSpanId())
+                         .assertValue("span id", actual.parentSpanId());
             ExpressParser.parse(expected.parentTraceSegmentId())
                          .assertValue("parent segment id", actual.parentTraceSegmentId());
-            ExpressParser.parse(expected.parentSpanId()).assertValue("span id", actual.parentSpanId());
-            ExpressParser.parse(expected.entryEndpointId()).assertValue("entry endpoint id", actual.entryEndpointId());
-            ExpressParser.parse(expected.networkAddressId())
-                         .assertValue("network address id", actual.networkAddressId());
-            ExpressParser.parse(expected.parentServiceInstanceId())
-                         .assertValue("parent service instance id", actual.parentServiceInstanceId());
-            ExpressParser.parse(expected.parentEndpointId())
-                         .assertValue("parent endpoint id", actual.parentEndpointId());
-            ExpressParser.parse(expected.parentEndpointName())
-                         .assertValue("parent endpoint name", actual.parentEndpointName());
-            ExpressParser.parse(expected.refType()).assertValue("ref type", actual.refType());
-            ExpressParser.parse(expected.entryServiceInstanceId())
-                         .assertValue("entry service instance id", actual.entryServiceInstanceId());
+            ExpressParser.parse(expected.parentServiceInstance())
+                         .assertValue("parent service instance", actual.parentServiceInstance());
+            ExpressParser.parse(expected.parenService())
+                         .assertValue("parent service name", actual.parenService());
+            ExpressParser.parse(expected.traceId())
+                         .assertValue("trace id", actual.traceId());
             return true;
         } catch (ValueAssertFailedException e) {
             throw new SegmentRefAssertFailedException(e, expected, actual);
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/ServiceAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/ServiceAssert.java
deleted file mode 100644
index 332cc94..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/ServiceAssert.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor;
-
-import java.util.List;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.RegistryServiceNotFoundException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.RegistryServiceSizeNotEqualsException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.ValueAssertFailedException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.entity.RegistryService;
-
-public class ServiceAssert {
-    public static void assertEquals(List<RegistryService> expected, List<RegistryService> actual) {
-
-        if (expected == null) {
-            return;
-        }
-
-        for (RegistryService service : expected) {
-            RegistryService actualService = getMatchService(actual, service);
-            try {
-                ExpressParser.parse(service.expressValue())
-                             .assertValue("registry service", actualService.expressValue());
-            } catch (ValueAssertFailedException e) {
-                throw new RegistryServiceSizeNotEqualsException(service.serviceName(), e);
-            }
-        }
-    }
-
-    private static RegistryService getMatchService(List<RegistryService> actual,
-                                                   RegistryService service) {
-        for (RegistryService registryService : actual) {
-            if (registryService.serviceName().equals(service.serviceName())) {
-                return registryService;
-            }
-        }
-        throw new RegistryServiceNotFoundException(service.serviceName());
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/ActualRegistryOperationNameEmptyException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/ActualRegistryOperationNameEmptyException.java
deleted file mode 100644
index 2524e79..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/ActualRegistryOperationNameEmptyException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception;
-
-import org.apache.skywalking.plugin.test.agent.tool.validator.entity.RegistryOperationName;
-import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
-
-public class ActualRegistryOperationNameEmptyException extends AssertFailedException {
-
-    private final RegistryOperationName registryOperationName;
-
-    public ActualRegistryOperationNameEmptyException(RegistryOperationName registryOperationName) {
-        this.registryOperationName = registryOperationName;
-    }
-
-    @Override
-    public String getCauseMessage() {
-        return String.format(
-            "ActualRegistryOperationNameEmptyException\nexpected:%s\nactual:%s\n", registryOperationName
-                .operationName(), "Empty");
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryInstanceOfServiceNotFoundException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryInstanceOfServiceNotFoundException.java
deleted file mode 100644
index c604fb8..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryInstanceOfServiceNotFoundException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception;
-
-import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
-
-public class RegistryInstanceOfServiceNotFoundException extends AssertFailedException {
-
-    private final String serviceName;
-
-    public RegistryInstanceOfServiceNotFoundException(String serviceName) {
-        this.serviceName = serviceName;
-    }
-
-    @Override
-    public String getCauseMessage() {
-        return String.format(
-            "RegistryInstanceOfServiceNotFoundException\nexpected: Instances of Service(%s)" + "\nactual: %s\n",
-            serviceName, "NOT FOUND"
-        );
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryInstanceSizeNotEqualsException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryInstanceSizeNotEqualsException.java
deleted file mode 100644
index 8311214..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryInstanceSizeNotEqualsException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception;
-
-import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
-
-public class RegistryInstanceSizeNotEqualsException extends AssertFailedException {
-
-    private final String serviceName;
-    private final ValueAssertFailedException cause;
-
-    public RegistryInstanceSizeNotEqualsException(String serviceName, ValueAssertFailedException cause) {
-        this.serviceName = serviceName;
-        this.cause = cause;
-    }
-
-    @Override
-    public String getCauseMessage() {
-        return String.format(
-            "RegistryInstanceSizeNotEqualsException %s\nexpected: %s\nactual: %s\n", serviceName, cause
-                .getExpected(), cause.getActual());
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryOperationNameNotFoundException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryOperationNameNotFoundException.java
deleted file mode 100644
index 4647c26..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryOperationNameNotFoundException.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception;
-
-import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
-
-public class RegistryOperationNameNotFoundException extends AssertFailedException {
-    private final String serviceName;
-    private final String operationName;
-
-    public RegistryOperationNameNotFoundException(String serviceName, String operationName) {
-        this.serviceName = serviceName;
-        this.operationName = operationName;
-    }
-
-    @Override
-    public String getCauseMessage() {
-        return String.format(
-            "RegistryOperationNameNotFoundException %s\nexpected: %s\nactual: %s\n", serviceName, operationName,
-            "NOT FOUND"
-        );
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryOperationNamesOfServiceNotFoundException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryOperationNamesOfServiceNotFoundException.java
deleted file mode 100644
index f8adf42..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryOperationNamesOfServiceNotFoundException.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception;
-
-import org.apache.skywalking.plugin.test.agent.tool.validator.entity.RegistryOperationName;
-import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
-
-public class RegistryOperationNamesOfServiceNotFoundException extends AssertFailedException {
-    private final RegistryOperationName registryOperationName;
-
-    public RegistryOperationNamesOfServiceNotFoundException(RegistryOperationName registryOperationName) {
-        this.registryOperationName = registryOperationName;
-    }
-
-    @Override
-    public String getCauseMessage() {
-        return String.format(
-            "RegistryOperationNamesOfServiceNotFoundException %s\nexpected: %s\nactual: %s\n", registryOperationName
-                .serviceName(), registryOperationName.operationName(), "NOT FOUND");
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryServiceNotFoundException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryServiceNotFoundException.java
deleted file mode 100644
index f5335d8..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryServiceNotFoundException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception;
-
-import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
-
-public class RegistryServiceNotFoundException extends AssertFailedException {
-    private final String serviceName;
-
-    public RegistryServiceNotFoundException(String serviceName) {
-        this.serviceName = serviceName;
-    }
-
-    @Override
-    public String getCauseMessage() {
-        return String.format(
-            "RegistryServiceNotFoundException\nexpected: %s\nactual: %s\n", serviceName, "Not Found");
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryServiceSizeNotEqualsException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryServiceSizeNotEqualsException.java
deleted file mode 100644
index 2d7fd25..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/RegistryServiceSizeNotEqualsException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception;
-
-import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
-
-public class RegistryServiceSizeNotEqualsException extends AssertFailedException {
-    private final String serviceName;
-    private final ValueAssertFailedException cause;
-
-    public RegistryServiceSizeNotEqualsException(String serviceName, ValueAssertFailedException cause) {
-        this.serviceName = serviceName;
-        this.cause = cause;
-    }
-
-    @Override
-    public String getCauseMessage() {
-        return String.format(
-            "RegistryServiceSizeNotEqualsException: %s\nexpected: %s\nactual: %s\n", serviceName, cause
-                .getExpected(), cause.getActual());
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/SegmentRefNotFoundException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/SegmentRefNotFoundException.java
index 49f4e1f..b9669fb 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/SegmentRefNotFoundException.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/SegmentRefNotFoundException.java
@@ -40,13 +40,14 @@
             String reason = cause.getFailedCause().getCauseMessage();
 
             StringBuilder actualSegmentRef = new StringBuilder(String.format("\nSegmentRef:\t%s\n", reason));
-            actualSegmentRef.append(String.format(" - entryServiceName:\t\t%s\n", actual.entryEndpointName()))
-                            .append(String.format(" - networkAddress:\t\t\t%s\n", actual.networkAddress()))
-                            .append(String.format(" - parentServiceName:\t\t%s\n", actual.parentEndpointName()))
-                            .append(String.format(" - parentSpanId:\t\t\t%s\n", actual.parentSpanId()))
-                            .append(String.format(" - parentTraceSegmentId:\t%s\n", actual.parentTraceSegmentId()))
-                            .append(String.format(" - refType:\t\t\t\t\t%s", actual.refType()))
-                            .toString();
+            actualSegmentRef // FIXME
+                             //                .append(String.format(" - entryServiceName:\t\t%s\n", actual.entryEndpointName()))
+                             .append(String.format(" - networkAddress:\t\t\t%s\n", actual.networkAddress()))
+                             //                            .append(String.format(" - parentServiceName:\t\t%s\n", actual.parentEndpointName()))
+                             .append(String.format(" - parentSpanId:\t\t\t%s\n", actual.parentSpanId()))
+                             .append(String.format(" - parentTraceSegmentId:\t%s\n", actual.parentTraceSegmentId()))
+                             .append(String.format(" - refType:\t\t\t\t\t%s", actual.refType()))
+                             .toString();
 
             actualMessage.append(String.format("%s\n", actualSegmentRef));
         }
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Data.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Data.java
index c43f71a..79e0f4b 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Data.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Data.java
@@ -28,8 +28,6 @@
 import org.yaml.snakeyaml.representer.Representer;
 
 public interface Data {
-    RegistryItems registryItems();
-
     List<SegmentItem> segmentItems();
 
     class Loader {
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/DataForRead.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/DataForRead.java
index b235279..8ddf94b 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/DataForRead.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/DataForRead.java
@@ -21,17 +21,8 @@
 import java.util.List;
 
 public class DataForRead implements Data {
-    private RegistryItemsForRead registryItems;
     private List<SegmentItemForRead> segmentItems;
 
-    public void setRegistryItems(RegistryItemsForRead registryItems) {
-        this.registryItems = registryItems;
-    }
-
-    public RegistryItemsForRead getRegistryItems() {
-        return registryItems;
-    }
-
     public List<SegmentItemForRead> getSegmentItems() {
         return segmentItems;
     }
@@ -41,11 +32,6 @@
     }
 
     @Override
-    public RegistryItemsForRead registryItems() {
-        return registryItems;
-    }
-
-    @Override
     public List<SegmentItem> segmentItems() {
         if (this.segmentItems == null) {
             return null;
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryInstance.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryInstance.java
deleted file mode 100644
index ab50500..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryInstance.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.entity;
-
-public interface RegistryInstance {
-
-    String serviceName();
-
-    String expressValue();
-
-    class Impl implements RegistryInstance {
-
-        private final String serviceName;
-        private final String express;
-
-        Impl(String serviceName, String express) {
-            this.serviceName = serviceName;
-            this.express = express;
-        }
-
-        @Override
-        public String serviceName() {
-            return serviceName;
-        }
-
-        @Override
-        public String expressValue() {
-            return express;
-        }
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryItems.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryItems.java
deleted file mode 100644
index 8825ae3..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryItems.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.entity;
-
-import java.util.List;
-
-public interface RegistryItems {
-    List<RegistryService> services();
-
-    List<RegistryInstance> instances();
-
-    List<RegistryOperationName> operationNames();
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryItemsForRead.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryItemsForRead.java
deleted file mode 100644
index 4afe2d6..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryItemsForRead.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.entity;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class RegistryItemsForRead implements RegistryItems {
-    private List<Map<String, String>> services;
-    private List<Map<String, String>> instances;
-    private List<Map<String, List<String>>> operationNames;
-
-    public List<Map<String, String>> getServices() {
-        return services;
-    }
-
-    public void setServices(List<Map<String, String>> services) {
-        this.services = services;
-    }
-
-    public List<Map<String, String>> getInstances() {
-        return instances;
-    }
-
-    public void setInstances(List<Map<String, String>> instances) {
-        this.instances = instances;
-    }
-
-    public List<Map<String, List<String>>> getOperationNames() {
-        return operationNames;
-    }
-
-    public void setOperationNames(List<Map<String, List<String>>> operationNames) {
-        this.operationNames = operationNames;
-    }
-
-    @Override
-    public List<RegistryService> services() {
-        if (this.services == null) {
-            return null;
-        }
-
-        List<RegistryService> registryServices = new ArrayList<>();
-        for (Map<String, String> registryService : services) {
-            String serviceName = new ArrayList<String>(registryService.keySet()).get(0);
-            String express = String.valueOf(registryService.get(serviceName));
-            registryServices.add(new RegistryService.Impl(serviceName, express));
-        }
-        return registryServices;
-    }
-
-    @Override
-    public List<RegistryInstance> instances() {
-        if (this.instances == null) {
-            return null;
-        }
-
-        List<RegistryInstance> registryInstances = new ArrayList<>();
-        instances.forEach((registryInstance) -> {
-            String serviceName = new ArrayList<String>(registryInstance.keySet()).get(0);
-            String express = String.valueOf(registryInstance.get(serviceName));
-            registryInstances.add(new RegistryInstance.Impl(serviceName, express));
-        });
-        return registryInstances;
-    }
-
-    @Override
-    public List<RegistryOperationName> operationNames() {
-        if (this.operationNames == null) {
-            return null;
-        }
-
-        List<RegistryOperationName> registryOperationNames = new ArrayList<>();
-        operationNames.forEach((registryInstance) -> {
-            String serviceName = new ArrayList<String>(registryInstance.keySet()).get(0);
-            List<String> express = registryInstance.get(serviceName);
-            registryOperationNames.add(new RegistryOperationName.Impl(serviceName, express));
-        });
-        return registryOperationNames;
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryOperationName.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryOperationName.java
deleted file mode 100644
index 4914437..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryOperationName.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.entity;
-
-import java.util.List;
-
-public interface RegistryOperationName {
-    String serviceName();
-
-    List<String> operationName();
-
-    class Impl implements RegistryOperationName {
-        private final String serviceName;
-        private final List<String> express;
-
-        Impl(String serviceName, List<String> express) {
-            this.serviceName = serviceName;
-            this.express = express;
-        }
-
-        @Override
-        public String serviceName() {
-            return serviceName;
-        }
-
-        @Override
-        public List<String> operationName() {
-            return express;
-        }
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryService.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryService.java
deleted file mode 100644
index 1a59b57..0000000
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/RegistryService.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.skywalking.plugin.test.agent.tool.validator.entity;
-
-public interface RegistryService {
-    String serviceName();
-
-    String expressValue();
-
-    class Impl implements RegistryService {
-        private String serviceName;
-        private String express;
-
-        Impl(String serviceName, String express) {
-            this.serviceName = serviceName;
-            this.express = express;
-        }
-
-        @Override
-        public String serviceName() {
-            return serviceName;
-        }
-
-        @Override
-        public String expressValue() {
-            return express;
-        }
-    }
-}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/SegmentForRead.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/SegmentForRead.java
index a4af081..06d1840 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/SegmentForRead.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/SegmentForRead.java
@@ -20,6 +20,8 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import lombok.Getter;
+import lombok.ToString;
 
 public class SegmentForRead implements Segment {
     private String segmentId;
@@ -38,100 +40,40 @@
         return new ArrayList<>(spans);
     }
 
+    @Getter
+    @ToString
     public static class SegmentRefForRead implements SegmentRef {
-        private String parentEndpointId;
         private String parentEndpoint;
-        private String networkAddressId;
-        private String entryEndpointId;
+        private String networkAddress;
         private String refType;
         private String parentSpanId;
         private String parentTraceSegmentId;
-        private String parentServiceInstanceId;
-        private String networkAddress;
-        private String entryEndpoint;
-        private String entryServiceInstanceId;
+        private String parentServiceInstance;
+        private String parenService;
+        private String traceId;
 
         public SegmentRefForRead() {
         }
 
         public SegmentRefForRead(Map<String, Object> ref) {
-            this.networkAddress = ref.get("networkAddress").toString();
-            this.entryEndpoint = ref.get("entryEndpoint").toString();
             this.parentEndpoint = ref.get("parentEndpoint").toString();
-            this.parentTraceSegmentId = ref.get("parentTraceSegmentId").toString();
-            this.entryServiceInstanceId = ref.get("entryServiceInstanceId").toString();
+            this.networkAddress = ref.get("networkAddress").toString();
             this.refType = ref.get("refType") == null ? null : ref.get("refType").toString();
             this.parentSpanId = ref.get("parentSpanId") == null ? null : ref.get("parentSpanId").toString();
-            this.entryEndpointId = ref.get("entryEndpointId") == null ? null : ref.get("entryEndpointId").toString();
-            this.parentEndpointId = ref.get("parentEndpointId") == null ? null : ref.get("parentEndpointId").toString();
-            this.networkAddressId = ref.get("networkAddressId") == null ? null : ref.get("networkAddressId").toString();
-            this.parentServiceInstanceId = ref.get("parentServiceInstanceId") == null ? null : ref.get(
-                "parentServiceInstanceId")
-                                                                                                  .toString();
-        }
-
-        public void setParentEndpointId(String parentEndpointId) {
-            this.parentEndpointId = parentEndpointId;
-        }
-
-        public void setParentEndpoint(String parentEndpoint) {
-            this.parentEndpoint = parentEndpoint;
-        }
-
-        public void setNetworkAddressId(String networkAddressId) {
-            this.networkAddressId = networkAddressId;
-        }
-
-        public void setEntryEndpointId(String entryEndpointId) {
-            this.entryEndpointId = entryEndpointId;
-        }
-
-        public void setRefType(String refType) {
-            this.refType = refType;
-        }
-
-        public void setParentSpanId(String parentSpanId) {
-            this.parentSpanId = parentSpanId;
-        }
-
-        public void setParentTraceSegmentId(String parentTraceSegmentId) {
-            this.parentTraceSegmentId = parentTraceSegmentId;
-        }
-
-        public void setParentServiceInstanceId(String parentServiceInstanceId) {
-            this.parentServiceInstanceId = parentServiceInstanceId;
-        }
-
-        public void setNetworkAddress(String networkAddress) {
-            this.networkAddress = networkAddress;
-        }
-
-        public void setEntryEndpoint(String entryEndpoint) {
-            this.entryEndpoint = entryEndpoint;
-        }
-
-        public void setEntryServiceInstanceId(String entryServiceInstanceId) {
-            this.entryServiceInstanceId = entryServiceInstanceId;
+            this.parentTraceSegmentId = ref.get("parentTraceSegmentId").toString();
+            this.parentServiceInstance = ref.get("parentServiceInstance").toString();
+            this.parenService = ref.get("parentService").toString();
+            this.traceId = ref.get("traceId").toString();
         }
 
         @Override
-        public String parentEndpointId() {
-            return parentEndpointId;
-        }
-
-        @Override
-        public String parentEndpointName() {
+        public String parentEndpoint() {
             return parentEndpoint;
         }
 
         @Override
-        public String networkAddressId() {
-            return networkAddressId;
-        }
-
-        @Override
-        public String entryEndpointId() {
-            return entryEndpointId;
+        public String networkAddress() {
+            return networkAddress;
         }
 
         @Override
@@ -150,40 +92,23 @@
         }
 
         @Override
-        public String parentServiceInstanceId() {
-            return parentServiceInstanceId;
+        public String parentServiceInstance() {
+            return parentServiceInstance;
         }
 
         @Override
-        public String networkAddress() {
-            return networkAddress;
-        }
-
-        @Override
-        public String entryEndpointName() {
-            return entryEndpoint;
-        }
-
-        @Override
-        public void parentTraceSegmentId(String parentTraceSegmentId) {
+        public void parentTraceSegmentId(final String parentSegmentId) {
             this.parentTraceSegmentId = parentTraceSegmentId;
         }
 
         @Override
-        public String entryServiceInstanceId() {
-            return entryServiceInstanceId;
+        public String parenService() {
+            return parenService;
         }
 
         @Override
-        public String toString() {
-            StringBuilder actualSegmentRef = new StringBuilder("\nSegmentRef:\n");
-            return actualSegmentRef.append(String.format(" - entryServiceName:\t\t%s\n", entryEndpointName()))
-                                   .append(String.format(" - networkAddress:\t\t\t%s\n", networkAddress()))
-                                   .append(String.format(" - parentServiceName:\t\t%s\n", parentEndpointName()))
-                                   .append(String.format(" - parentSpanId:\t\t\t%s\n", parentSpanId()))
-                                   .append(String.format(" - parentTraceSegmentId:\t%s\n", parentTraceSegmentId()))
-                                   .append(String.format(" - refType:\t\t\t\t\t%s", refType()))
-                                   .toString();
+        public String traceId() {
+            return traceId;
         }
     }
 
@@ -206,6 +131,7 @@
         private String spanType;
         private String peer;
         private String peerId;
+        private boolean skipAnalysis;
 
         public void setOperationName(String operationName) {
             this.operationName = operationName;
@@ -271,6 +197,10 @@
             this.refs = refs;
         }
 
+        public void setSkipAnalysis(boolean skipAnalysis) {
+            this.skipAnalysis = skipAnalysis;
+        }
+
         @Override
         public String operationName() {
             return operationName;
@@ -367,6 +297,11 @@
         }
 
         @Override
+        public boolean skipAnalysis() {
+            return skipAnalysis;
+        }
+
+        @Override
         public List<SegmentRef> refs() {
             if (formatedRefs == null && refs != null) {
                 List<SegmentRef> segmentRefs = new ArrayList<>();
@@ -418,4 +353,5 @@
     public void setSpans(List<SpanForRead> spans) {
         this.spans = spans;
     }
+
 }
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/SegmentRef.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/SegmentRef.java
index 77cf0b7..449d97a 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/SegmentRef.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/SegmentRef.java
@@ -18,14 +18,9 @@
 package org.apache.skywalking.plugin.test.agent.tool.validator.entity;
 
 public interface SegmentRef {
+    String parentEndpoint();
 
-    String parentEndpointId();
-
-    String parentEndpointName();
-
-    String networkAddressId();
-
-    String entryEndpointId();
+    String networkAddress();
 
     String refType();
 
@@ -33,13 +28,11 @@
 
     String parentTraceSegmentId();
 
-    String parentServiceInstanceId();
+    void parentTraceSegmentId(String parentSegmentId);
 
-    String networkAddress();
+    String parentServiceInstance();
 
-    String entryEndpointName();
+    String parenService();
 
-    void parentTraceSegmentId(String parentTraceSegmentId);
-
-    String entryServiceInstanceId();
+    String traceId();
 }
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Span.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Span.java
index ea1bc99..e193a97 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Span.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Span.java
@@ -50,6 +50,8 @@
 
     String peerId();
 
+    boolean skipAnalysis();
+
     List<SegmentRef> refs();
 
     void setActualRefs(List<SegmentRef> refs);
diff --git a/validator/src/test/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssertTest.java b/validator/src/test/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssertTest.java
index 028fd56..b852dbb 100644
--- a/validator/src/test/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssertTest.java
+++ b/validator/src/test/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/DataAssertTest.java
@@ -35,8 +35,7 @@
                 Data.Loader.loadData("actualData.yaml", actualData)
             );
         } catch (AssertFailedException e) {
-            System.out.println(String.format("\nassert failed.\n%s\n", e.getCauseMessage()));
-
+            throw new RuntimeException(String.format("\nassert failed.\n%s\n", e.getCauseMessage()), e);
         }
     }
 
diff --git a/validator/src/test/resources/actualData.yaml b/validator/src/test/resources/actualData.yaml
index 76d6c8b..d42a117 100644
--- a/validator/src/test/resources/actualData.yaml
+++ b/validator/src/test/resources/actualData.yaml
@@ -12,284 +12,89 @@
 # 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.
-{
-  "registryItems": {
-    "services": [
-    {
-      "vertx-core-3.x-scenario": 2
-    }
-    ],
-    "instances": [
-    {
-      "vertx-core-3.x-scenario": 1
-    }
-    ],
-    "operationNames": [
-    {
-      "vertx-core-3.x-scenario": [
-        "/vertx-core-3-scenario/vertx-core/core-case",
-        "/vertx-core-3-scenario/vertx-core/executeTest",
-        "cluster-message-receiver"
-      ]
-    }
-    ]
-  },
-  "segmentItems": [
-  {
-    "serviceName": "vertx-core-3.x-scenario",
-    "segmentSize": "8",
-    "segments": [
-    {
-      "segmentId": "1.159.15542729582940000",
-      "spans": [
-      {
-        "operationName": "#local-message-receiver",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "RPCFramework",
-        "refs": [
-        {
-          "parentEndpointId": 0,
-          "parentEndpoint": "local-message-receiver",
-          "networkAddressId": 0,
-          "entryEndpointId": 0,
-          "refType": "CrossThread",
-          "parentSpanId": 0,
-          "parentTraceSegmentId": "1.158.15542729582900006",
-          "parentServiceInstanceId": 1,
-          "networkAddress": "",
-          "entryEndpoint": "local-message-receiver",
-          "entryServiceInstanceId": 1
-        }
-        ],
-        "startTime": "1554272958294",
-        "endTime": "1554272958294",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Local",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "1.158.15542729582900006",
-      "spans": [
-      {
-        "operationName": "local-message-receiver",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "RPCFramework",
-        "startTime": "1554272958290",
-        "endTime": "1554272958305",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Local",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "1.158.15542729581640000",
-      "spans": [
-      {
-        "operationName": "/vertx-core-3-scenario/vertx-core/executeTest",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "Http",
-        "tags": [
-        {
-          "key": "http.method",
-          "value": "GET"
-        },
-        {
-          "key": "url",
-          "value": "http://localhost:8080/vertx-core-3-scenario/vertx-core/executeTest"
-        }
-        ],
-        "startTime": "1554272958168",
-        "endTime": "1554272958339",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Exit",
-        "peer": "/vertx-core-3-scenario/vertx-core/executeTest",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "1.158.15542729581890002",
-      "spans": [
-      {
-        "operationName": "/vertx-core-3-scenario/vertx-core/core-case",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "Http",
-        "tags": [
-        {
-          "key": "http.method",
-          "value": "GET"
-        },
-        {
-          "key": "url",
-          "value": "http://localhost:18080/vertx-core-3-scenario/vertx-core/core-case"
-        }
-        ],
-        "startTime": "1554272958190",
-        "endTime": "1554272958340",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Entry",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "1.81.15542729583180000",
-      "spans": [
-      {
-        "operationName": "cluster-message-receiver",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "RPCFramework",
-        "refs": [
-        {
-          "parentEndpointId": 0,
-          "parentEndpoint": "cluster-message-receiver",
-          "networkAddressId": 0,
-          "entryEndpointId": 0,
-          "refType": "CrossProcess",
-          "parentSpanId": 0,
-          "parentTraceSegmentId": "1.158.15542729582940008",
-          "parentServiceInstanceId": 1,
-          "networkAddress": "localhost:45171",
-          "entryEndpoint": "cluster-message-receiver",
-          "entryServiceInstanceId": 1
-        }
-        ],
-        "startTime": "1554272958318",
-        "endTime": "1554272958320",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Entry",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "1.158.15542729583390010",
-      "spans": [
-      {
-        "operationName": "#/vertx-core-3-scenario/vertx-core/executeTest",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "Http",
-        "refs": [
-        {
-          "parentEndpointId": 0,
-          "parentEndpoint": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "networkAddressId": 0,
-          "entryEndpointId": 0,
-          "refType": "CrossThread",
-          "parentSpanId": 0,
-          "parentTraceSegmentId": "1.158.15542729581640000",
-          "parentServiceInstanceId": 1,
-          "networkAddress": "",
-          "entryEndpoint": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "entryServiceInstanceId": 1
-        }
-        ],
-        "startTime": "1554272958339",
-        "endTime": "1554272958340",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Local",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "1.158.15542729582940008",
-      "spans": [
-      {
-        "operationName": "cluster-message-receiver",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "RPCFramework",
-        "startTime": "1554272958294",
-        "endTime": "1554272958324",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Exit",
-        "peer": "localhost:45171",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "1.158.15542729582860004",
-      "spans": [
-      {
-        "operationName": "/vertx-core-3-scenario/vertx-core/executeTest",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "Http",
-        "tags": [
-        {
-          "key": "http.method",
-          "value": "GET"
-        },
-        {
-          "key": "url",
-          "value": "http://localhost:8080/vertx-core-3-scenario/vertx-core/executeTest"
-        }
-        ],
-        "refs": [
-        {
-          "parentEndpointId": 0,
-          "parentEndpoint": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "networkAddressId": 0,
-          "entryEndpointId": 0,
-          "refType": "CrossProcess",
-          "parentSpanId": 0,
-          "parentTraceSegmentId": "1.158.15542729581640000",
-          "parentServiceInstanceId": 1,
-          "networkAddress": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "entryEndpoint": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "entryServiceInstanceId": 1
-        }
-        ],
-        "startTime": "1554272958286",
-        "endTime": "1554272958325",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Entry",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    }
-    ]
-  }
-  ]
-}
+segmentItems:
+  - serviceName: jettyserver-scenario
+    segmentSize: 1
+    segments:
+      - segmentId: b7b87f050b004bcbaf6c3b461e310b39.19.15860972284530000
+        spans:
+          - operationName: /jettyserver-case/case/receiveContext-0
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            startTime: 1586097228454
+            endTime: 1586097230551
+            componentId: 19
+            componentName: ''
+            isError: false
+            spanType: Entry
+            peer: ''
+            peerId: 0
+            skipAnalysis: false
+            tags:
+              - {key: url, value: 'http://localhost:18080/jettyserver-case/case/receiveContext-0'}
+              - {key: http.method, value: GET}
+            refs:
+              - {parentEndpoint: /jettyclient-case/case/jettyclient-case, networkAddress: 'localhost:18080',
+                 refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: 9da55094db7845919d8de81cf26e9769.44.15860972266610000,
+                 parentServiceInstance: 2c6396ba48d549c99ae3c1643aae5a90@172.17.0.2, parentService: jettyclient-scenario,
+                 traceId: 9da55094db7845919d8de81cf26e9769.44.15860972266610001}
+  - serviceName: jettyclient-scenario
+    segmentSize: 2
+    segments:
+      - segmentId: 9da55094db7845919d8de81cf26e9769.43.15860972260670000
+        spans:
+          - operationName: /jettyclient-case/case/healthCheck
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            startTime: 1586097226069
+            endTime: 1586097226561
+            componentId: 1
+            componentName: ''
+            isError: false
+            spanType: Entry
+            peer: ''
+            peerId: 0
+            skipAnalysis: false
+            tags:
+              - {key: url, value: 'http://localhost:8080/jettyclient-case/case/healthCheck'}
+              - {key: http.method, value: HEAD}
+      - segmentId: 9da55094db7845919d8de81cf26e9769.44.15860972266610000
+        spans:
+          - operationName: /jettyserver-case/case/receiveContext-0
+            operationId: 0
+            parentSpanId: 0
+            spanId: 1
+            spanLayer: Http
+            startTime: 1586097226783
+            endTime: 1586097230546
+            componentId: 18
+            componentName: ''
+            isError: false
+            spanType: Exit
+            peer: localhost:18080
+            peerId: 0
+            skipAnalysis: false
+            tags:
+              - {key: http.method, value: GET}
+              - {key: url, value: 'http://localhost:18080/jettyserver-case/case/receiveContext-0'}
+          - operationName: /jettyclient-case/case/jettyclient-case
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            startTime: 1586097226661
+            endTime: 1586097230548
+            componentId: 1
+            componentName: ''
+            isError: false
+            spanType: Entry
+            peer: ''
+            peerId: 0
+            skipAnalysis: false
+            tags:
+              - {key: url, value: 'http://localhost:8080/jettyclient-case/case/jettyclient-case'}
+              - {key: http.method, value: GET}
\ No newline at end of file
diff --git a/validator/src/test/resources/expectedData.yaml b/validator/src/test/resources/expectedData.yaml
index a24a846..73e12d6 100644
--- a/validator/src/test/resources/expectedData.yaml
+++ b/validator/src/test/resources/expectedData.yaml
@@ -12,281 +12,89 @@
 # 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.
-{
-  "registryItems": {
-    "services": [
-    {
-      "vertx-core-3.x-scenario": 2
-    }
-    ],
-    "instances": [
-    {
-      "vertx-core-3.x-scenario": 1
-    }
-    ],
-    "operationNames": [
-    {
-      "vertx-core-3.x-scenario": [
-        "/vertx-core-3-scenario/vertx-core/executeTest",
-        "/vertx-core-3-scenario/vertx-core/core-case",
-        "cluster-message-receiver"
-      ]
-    }
-    ]
-  },
-  "segmentItems": [
-  {
-    "serviceName": "vertx-core-3.x-scenario",
-    "segmentSize": "8",
-    "segments": [
-    {
-      "segmentId": "nq 0",
-      "spans": [
-      {
-        "operationName": "#local-message-receiver",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "RPCFramework",
-        "refs": [
-        {
-          "parentEndpointId": 0,
-          "parentEndpoint": "local-message-receiver",
-          "networkAddressId": 0,
-          "entryEndpointId": 0,
-          "refType": "CrossThread",
-          "parentSpanId": 0,
-          "parentTraceSegmentId": "not null",
-          "parentServiceInstanceId": 1,
-          "networkAddress": "",
-          "entryEndpoint": "local-message-receiver",
-          "entryServiceInstanceId": 1
-        }
-        ],
-        "startTime": "nq 0",
-        "endTime": "nq 0",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Local",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "nq 0",
-      "spans": [
-      {
-        "operationName": "local-message-receiver",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "RPCFramework",
-        "startTime": "nq 0",
-        "endTime": "nq 0",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Local",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "nq 0",
-      "spans": [
-      {
-        "operationName": "/vertx-core-3-scenario/vertx-core/executeTest",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "Http",
-        "tags": [
-        {
-          "key": "http.method",
-          "value": "GET"
-        },
-        {
-          "key": "url",
-          "value": "http://localhost:8080/vertx-core-3-scenario/vertx-core/executeTest"
-        }
-        ],
-        "startTime": "nq 0",
-        "endTime": "nq 0",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Exit",
-        "peer": "/vertx-core-3-scenario/vertx-core/executeTest",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "nq 0",
-      "spans": [
-      {
-        "operationName": "/vertx-core-3-scenario/vertx-core/core-case",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "Http",
-        "tags": [
-        {
-          "key": "http.method",
-          "value": "GET"
-        },
-        {
-          "key": "url",
-          "value": "http://localhost:18080/vertx-core-3-scenario/vertx-core/core-case"
-        }
-        ],
-        "startTime": "nq 0",
-        "endTime": "nq 0",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Entry",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "nq 0",
-      "spans": [
-      {
-        "operationName": "cluster-message-receiver",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "RPCFramework",
-        "refs": [
-        {
-          "parentEndpointId": 0,
-          "parentEndpoint": "cluster-message-receiver",
-          "networkAddressId": 0,
-          "entryEndpointId": 0,
-          "refType": "CrossProcess",
-          "parentSpanId": 0,
-          "parentTraceSegmentId": "not null",
-          "parentServiceInstanceId": 1,
-          "networkAddress": "not null",
-          "entryEndpoint": "cluster-message-receiver",
-          "entryServiceInstanceId": 1
-        }
-        ],
-        "startTime": "nq 0",
-        "endTime": "nq 0",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Entry",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "nq 0",
-      "spans": [
-      {
-        "operationName": "#/vertx-core-3-scenario/vertx-core/executeTest",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "Http",
-        "refs": [
-        {
-          "parentEndpointId": 0,
-          "parentEndpoint": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "networkAddressId": 0,
-          "entryEndpointId": 0,
-          "refType": "CrossThread",
-          "parentSpanId": 0,
-          "parentTraceSegmentId": "not null",
-          "parentServiceInstanceId": 1,
-          "networkAddress": "",
-          "entryEndpoint": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "entryServiceInstanceId": 1
-        }
-        ],
-        "startTime": "nq 0",
-        "endTime": "nq 0",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Local",
-        "peer": "",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "nq 0",
-      "spans": [
-      {
-        "operationName": "cluster-message-receiver",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "RPCFramework",
-        "startTime": "nq 0",
-        "endTime": "nq 0",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Exit",
-        "peerId": "0"
-      }
-      ]
-    },
-    {
-      "segmentId": "nq 0",
-      "spans": [
-      {
-        "operationName": "/vertx-core-3-scenario/vertx-core/executeTest",
-        "operationId": "0",
-        "parentSpanId": "-1",
-        "spanId": "0",
-        "spanLayer": "Http",
-        "tags": [
-        {
-          "key": "http.method",
-          "value": "GET"
-        },
-        {
-          "key": "url",
-          "value": "http://localhost:8080/vertx-core-3-scenario/vertx-core/executeTest"
-        }
-        ],
-        "refs": [
-        {
-          "parentEndpointId": 0,
-          "parentEndpoint": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "networkAddressId": 0,
-          "entryEndpointId": 0,
-          "refType": "CrossProcess",
-          "parentSpanId": 0,
-          "parentTraceSegmentId": "not null",
-          "parentServiceInstanceId": 1,
-          "networkAddress": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "entryEndpoint": "/vertx-core-3-scenario/vertx-core/executeTest",
-          "entryServiceInstanceId": 1
-        }
-        ],
-        "startTime": "nq 0",
-        "endTime": "nq 0",
-        "componentId": "59",
-        "componentName": "",
-        "isError": false,
-        "spanType": "Entry",
-        "peerId": "0"
-      }
-      ]
-    }
-    ]
-  }
-  ]
-}
+segmentItems:
+  - serviceName: jettyserver-scenario
+    segmentSize: 1
+    segments:
+      - segmentId: not null
+        spans:
+          - operationName: /jettyserver-case/case/receiveContext-0
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            startTime: gt 0
+            endTime: gt 0
+            componentId: 19
+            componentName: ''
+            isError: false
+            spanType: Entry
+            peer: ''
+            peerId: 0
+            skipAnalysis: false
+            tags:
+              - {key: url, value: 'http://localhost:18080/jettyserver-case/case/receiveContext-0'}
+              - {key: http.method, value: GET}
+            refs:
+              - {parentEndpoint: /jettyclient-case/case/jettyclient-case, networkAddress: 'localhost:18080',
+                 refType: CrossProcess, parentSpanId: 1, parentTraceSegmentId: not null,
+                 parentServiceInstance: not null, parentService: jettyclient-scenario,
+                 traceId: not null}
+  - serviceName: jettyclient-scenario
+    segmentSize: 2
+    segments:
+      - segmentId: not null
+        spans:
+          - operationName: /jettyclient-case/case/healthCheck
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            startTime: gt 0
+            endTime: gt 0
+            componentId: 1
+            componentName: ''
+            isError: false
+            spanType: Entry
+            peer: ''
+            peerId: 0
+            skipAnalysis: false
+            tags:
+              - {key: url, value: 'http://localhost:8080/jettyclient-case/case/healthCheck'}
+              - {key: http.method, value: HEAD}
+      - segmentId: not null
+        spans:
+          - operationName: /jettyserver-case/case/receiveContext-0
+            operationId: 0
+            parentSpanId: 0
+            spanId: 1
+            spanLayer: Http
+            startTime: gt 0
+            endTime: gt 0
+            componentId: 18
+            componentName: ''
+            isError: false
+            spanType: Exit
+            peer: localhost:18080
+            peerId: 0
+            skipAnalysis: false
+            tags:
+              - {key: http.method, value: GET}
+              - {key: url, value: 'http://localhost:18080/jettyserver-case/case/receiveContext-0'}
+          - operationName: /jettyclient-case/case/jettyclient-case
+            operationId: 0
+            parentSpanId: -1
+            spanId: 0
+            spanLayer: Http
+            startTime: gt 0
+            endTime: gt 0
+            componentId: 1
+            componentName: ''
+            isError: false
+            spanType: Entry
+            peer: ''
+            peerId: 0
+            skipAnalysis: false
+            tags:
+              - {key: url, value: 'http://localhost:8080/jettyclient-case/case/jettyclient-case'}
+              - {key: http.method, value: GET}
\ No newline at end of file