未验证 提交 10ddf0c3 编写于 作者: D Darcy 提交者: GitHub

fix a bug that spring-mvc set an error endpoint name (#6783)

上级 db1d655b
...@@ -17,7 +17,8 @@ Release Notes. ...@@ -17,7 +17,8 @@ Release Notes.
* Add Seata in the component definition. Seata plugin hosts on Seata project. * Add Seata in the component definition. Seata plugin hosts on Seata project.
* Extended Kafka plugin to properly trace consumers that have topic partitions directly assigned. * Extended Kafka plugin to properly trace consumers that have topic partitions directly assigned.
* Support print SkyWalking context to logs. * Support print SkyWalking context to logs.
* Add `MessageListener` enhancement in pulsar plugin * Add `MessageListener` enhancement in pulsar plugin.
* fix a bug that spring-mvc set an error endpoint name if the controller class annotation implements an interface.
* Add an optional agent plugin to support mybatis. * Add an optional agent plugin to support mybatis.
#### OAP-Backend #### OAP-Backend
......
...@@ -22,6 +22,7 @@ import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache; ...@@ -22,6 +22,7 @@ import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
/** /**
...@@ -32,7 +33,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte ...@@ -32,7 +33,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte
@Override @Override
public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
String basePath = ""; String basePath = "";
RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class); RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class);
if (basePathRequestMapping != null) { if (basePathRequestMapping != null) {
if (basePathRequestMapping.value().length > 0) { if (basePathRequestMapping.value().length > 0) {
basePath = basePathRequestMapping.value()[0]; basePath = basePathRequestMapping.value()[0];
......
...@@ -22,6 +22,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI ...@@ -22,6 +22,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI
import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
/** /**
...@@ -42,7 +43,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte ...@@ -42,7 +43,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte
@Override @Override
public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
String basePath = ""; String basePath = "";
RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class); RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class);
if (basePathRequestMapping != null) { if (basePathRequestMapping != null) {
if (basePathRequestMapping.value().length > 0) { if (basePathRequestMapping.value().length > 0) {
basePath = basePathRequestMapping.value()[0]; basePath = basePathRequestMapping.value()[0];
......
...@@ -22,13 +22,14 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI ...@@ -22,13 +22,14 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
public class ControllerForLowVersionConstructorInterceptor implements InstanceConstructorInterceptor { public class ControllerForLowVersionConstructorInterceptor implements InstanceConstructorInterceptor {
@Override @Override
public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
String basePath = ""; String basePath = "";
RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class); RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class);
if (basePathRequestMapping != null) { if (basePathRequestMapping != null) {
if (basePathRequestMapping.value().length > 0) { if (basePathRequestMapping.value().length > 0) {
basePath = basePathRequestMapping.value()[0]; basePath = basePathRequestMapping.value()[0];
......
...@@ -22,6 +22,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI ...@@ -22,6 +22,7 @@ import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedI
import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.EnhanceRequireObjectCache;
import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache; import org.apache.skywalking.apm.plugin.spring.mvc.commons.PathMappingCache;
import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor; import org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceConstructorInterceptor;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
/** /**
...@@ -42,7 +43,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte ...@@ -42,7 +43,7 @@ public class ControllerConstructorInterceptor implements InstanceConstructorInte
@Override @Override
public void onConstruct(EnhancedInstance objInst, Object[] allArguments) { public void onConstruct(EnhancedInstance objInst, Object[] allArguments) {
String basePath = ""; String basePath = "";
RequestMapping basePathRequestMapping = objInst.getClass().getAnnotation(RequestMapping.class); RequestMapping basePathRequestMapping = AnnotationUtils.findAnnotation(objInst.getClass(), RequestMapping.class);
if (basePathRequestMapping != null) { if (basePathRequestMapping != null) {
if (basePathRequestMapping.value().length > 0) { if (basePathRequestMapping.value().length > 0) {
basePath = basePathRequestMapping.value()[0]; basePath = basePathRequestMapping.value()[0];
......
...@@ -35,11 +35,7 @@ public class RequestMappingMethodInterceptor extends AbstractMethodInterceptor { ...@@ -35,11 +35,7 @@ public class RequestMappingMethodInterceptor extends AbstractMethodInterceptor {
String requestURL = null; String requestURL = null;
RequestMapping methodRequestMapping = AnnotationUtils.getAnnotation(m, RequestMapping.class); RequestMapping methodRequestMapping = AnnotationUtils.getAnnotation(m, RequestMapping.class);
if (methodRequestMapping != null) { if (methodRequestMapping != null) {
if (methodRequestMapping.value().length > 0) { requestURL = methodRequestMapping.value().length > 0 ? methodRequestMapping.value()[0] : "";
requestURL = methodRequestMapping.value()[0];
} else if (methodRequestMapping.path().length > 0) {
requestURL = methodRequestMapping.path()[0];
}
} }
return requestURL; return requestURL;
}); });
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
segmentItems: segmentItems:
- serviceName: spring-3.0.x-scenario - serviceName: spring-3.0.x-scenario
segmentSize: ge 2 segmentSize: ge 4
segments: segments:
- segmentId: not null - segmentId: not null
spans: spans:
...@@ -30,24 +30,102 @@ segmentItems: ...@@ -30,24 +30,102 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/healthCheck'} - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/healthCheck'}
- {key: http.method, value: HEAD} - {key: http.method, value: HEAD}
skipAnalysis: 'false' - segmentId: not null
spans:
- operationName: /impl/requestmapping
operationId: 0
parentSpanId: -1
spanId: 0
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 14
isError: false
spanType: Entry
peer: ''
skipAnalysis: false
tags:
- {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/impl/requestmapping'}
- {key: http.method, value: GET}
refs:
- {parentEndpoint: /case/spring3, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 5, parentTraceSegmentId: not null,
parentServiceInstance: not null, parentService: spring-3.0.x-scenario,
traceId: not null}
- segmentId: not null
spans:
- operationName: '{GET}/impl/restmapping'
operationId: 0
parentSpanId: -1
spanId: 0
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 14
isError: false
spanType: Entry
peer: ''
skipAnalysis: false
tags:
- {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/impl/restmapping'}
- {key: http.method, value: GET}
refs:
- {parentEndpoint: /case/spring3, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 6, parentTraceSegmentId: not null,
parentServiceInstance: not null, parentService: spring-3.0.x-scenario,
traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod,
operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff,
operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness,
operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- operationName: /spring-3.0.x-scenario/impl/requestmapping
operationId: 0
parentSpanId: 4
spanId: 5
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 13
isError: false
spanType: Exit
peer: localhost:8080
skipAnalysis: false
tags:
- {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/impl/requestmapping'}
- {key: http.method, value: GET}
- operationName: /spring-3.0.x-scenario/impl/restmapping
operationId: 0
parentSpanId: 4
spanId: 6
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 13
isError: false
spanType: Exit
peer: localhost:8080
skipAnalysis: false
tags:
- {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/impl/restmapping'}
- {key: http.method, value: GET}
- {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doInvokeImplCase,
operationId: 0, parentSpanId: 0, spanId: 4, spanLayer: Unknown, startTime: nq 0,
endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: false}
- operationName: /case/spring3 - operationName: /case/spring3
operationId: 0 operationId: 0
parentSpanId: -1 parentSpanId: -1
...@@ -59,7 +137,7 @@ segmentItems: ...@@ -59,7 +137,7 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/case/spring3'} - {key: url, value: 'http://localhost:8080/spring-3.0.x-scenario/case/spring3'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
skipAnalysis: 'false'
...@@ -36,6 +36,7 @@ public class CaseController { ...@@ -36,6 +36,7 @@ public class CaseController {
@ResponseBody @ResponseBody
public String updateUser() { public String updateUser() {
testServiceBean.doSomeBusiness("test"); testServiceBean.doSomeBusiness("test");
testServiceBean.doInvokeImplCase();
return SUCCESS; return SUCCESS;
} }
......
/*
* 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 test.apache.skywalking.apm.testcase.spring3.implinterface;
import org.springframework.stereotype.Controller;
@Controller
public class TestCaseController implements TestCaseInterface {
@Override
public String implRequestMappingAnnotationTestCase() {
return "implRequestMappingAnnotationTestCase";
}
@Override
public String implRestAnnotationTestCase() {
return "implRestAnnotationTestCase";
}
}
/*
* 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 test.apache.skywalking.apm.testcase.spring3.implinterface;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@RequestMapping("/impl")
public interface TestCaseInterface {
@RequestMapping("/requestmapping")
@ResponseBody
String implRequestMappingAnnotationTestCase();
@RequestMapping(value = "/restmapping", method = RequestMethod.GET)
@ResponseBody
String implRestAnnotationTestCase();
}
...@@ -20,11 +20,14 @@ package test.apache.skywalking.apm.testcase.spring3.service; ...@@ -20,11 +20,14 @@ package test.apache.skywalking.apm.testcase.spring3.service;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean; import test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean;
import test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean; import test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean;
@Service @Service
public class TestServiceBean { public class TestServiceBean {
public static final String URL = "http://localhost:8080/spring-3.0.x-scenario";
@Autowired @Autowired
private TestComponentBean componentBean; private TestComponentBean componentBean;
...@@ -35,4 +38,10 @@ public class TestServiceBean { ...@@ -35,4 +38,10 @@ public class TestServiceBean {
componentBean.componentMethod(name); componentBean.componentMethod(name);
repositoryBean.doSomeStuff(name); repositoryBean.doSomeStuff(name);
} }
public void doInvokeImplCase() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getForObject(URL + "/impl/requestmapping", String.class);
restTemplate.getForObject(URL + "/impl/restmapping", String.class);
}
} }
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
segmentItems: segmentItems:
- serviceName: spring-3.1.x-scenario - serviceName: spring-3.1.x-scenario
segmentSize: ge 7 segmentSize: ge 9
segments: segments:
- segmentId: not null - segmentId: not null
spans: spans:
...@@ -30,24 +30,24 @@ segmentItems: ...@@ -30,24 +30,24 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/healthCheck'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/healthCheck'}
- {key: http.method, value: HEAD} - {key: http.method, value: HEAD}
skipAnalysis: 'false'
- segmentId: not null - segmentId: not null
spans: spans:
- {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod,
operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff,
operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness,
operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- operationName: /case/spring3 - operationName: /case/spring3
operationId: 0 operationId: 0
parentSpanId: -1 parentSpanId: -1
...@@ -59,14 +59,15 @@ segmentItems: ...@@ -59,14 +59,15 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/spring3/'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/spring3/'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 1, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 1, parentTraceSegmentId: not null,
null, parentService: spring-3.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-3.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: '{POST}/create/' - operationName: '{POST}/create/'
...@@ -80,14 +81,15 @@ segmentItems: ...@@ -80,14 +81,15 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/create/'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/create/'}
- {key: http.method, value: POST} - {key: http.method, value: POST}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 2, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 2, parentTraceSegmentId: not null,
null, parentService: spring-3.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-3.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: '{GET}/get/{id}' - operationName: '{GET}/get/{id}'
...@@ -101,14 +103,15 @@ segmentItems: ...@@ -101,14 +103,15 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/get/1'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/get/1'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 3, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 3, parentTraceSegmentId: not null,
null, parentService: spring-3.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-3.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: '{DELETE}/delete/{id}' - operationName: '{DELETE}/delete/{id}'
...@@ -122,14 +125,59 @@ segmentItems: ...@@ -122,14 +125,59 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/delete/1'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/delete/1'}
- {key: http.method, value: DELETE} - {key: http.method, value: DELETE}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 5, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 5, parentTraceSegmentId: not null,
null, parentService: spring-3.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-3.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
- segmentId: not null
spans:
- operationName: '{PUT}/update/{id}'
operationId: 0
parentSpanId: -1
spanId: 0
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 14
isError: false
spanType: Entry
peer: ''
skipAnalysis: false
tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/update/1'}
- {key: http.method, value: PUT}
refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 4, parentTraceSegmentId: not null,
parentServiceInstance: not null, parentService: spring-3.1.x-scenario,
traceId: not null}
- segmentId: not null
spans:
- operationName: /impl/requestmapping
operationId: 0
parentSpanId: -1
spanId: 0
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 14
isError: false
spanType: Entry
peer: ''
skipAnalysis: false
tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/impl/requestmapping'}
- {key: http.method, value: GET}
refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 6, parentTraceSegmentId: not null,
parentServiceInstance: not null, parentService: spring-3.1.x-scenario,
traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: /spring-3.1.x-scenario/case/spring3/ - operationName: /spring-3.1.x-scenario/case/spring3/
...@@ -143,10 +191,10 @@ segmentItems: ...@@ -143,10 +191,10 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: http.method, value: GET} - {key: http.method, value: GET}
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/spring3/'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/spring3/'}
skipAnalysis: 'false'
- operationName: /spring-3.1.x-scenario/create/ - operationName: /spring-3.1.x-scenario/create/
operationId: 0 operationId: 0
parentSpanId: 0 parentSpanId: 0
...@@ -158,10 +206,10 @@ segmentItems: ...@@ -158,10 +206,10 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/create/'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/create/'}
- {key: http.method, value: POST} - {key: http.method, value: POST}
skipAnalysis: 'false'
- operationName: /spring-3.1.x-scenario/get/1 - operationName: /spring-3.1.x-scenario/get/1
operationId: 0 operationId: 0
parentSpanId: 0 parentSpanId: 0
...@@ -173,10 +221,10 @@ segmentItems: ...@@ -173,10 +221,10 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/get/1'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/get/1'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
skipAnalysis: 'false'
- operationName: /spring-3.1.x-scenario/update/1 - operationName: /spring-3.1.x-scenario/update/1
operationId: 0 operationId: 0
parentSpanId: 0 parentSpanId: 0
...@@ -188,10 +236,10 @@ segmentItems: ...@@ -188,10 +236,10 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/update/1'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/update/1'}
- {key: http.method, value: PUT} - {key: http.method, value: PUT}
skipAnalysis: 'false'
- operationName: /spring-3.1.x-scenario/delete/1 - operationName: /spring-3.1.x-scenario/delete/1
operationId: 0 operationId: 0
parentSpanId: 0 parentSpanId: 0
...@@ -203,10 +251,40 @@ segmentItems: ...@@ -203,10 +251,40 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/delete/1'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/delete/1'}
- {key: http.method, value: DELETE} - {key: http.method, value: DELETE}
skipAnalysis: 'false' - operationName: /spring-3.1.x-scenario/impl/requestmapping
operationId: 0
parentSpanId: 0
spanId: 6
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 12
isError: false
spanType: Exit
peer: localhost:8080
skipAnalysis: false
tags:
- {key: http.method, value: GET}
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/impl/requestmapping'}
- operationName: /spring-3.1.x-scenario/impl/restmapping
operationId: 0
parentSpanId: 0
spanId: 7
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 12
isError: false
spanType: Exit
peer: localhost:8080
skipAnalysis: false
tags:
- {key: http.method, value: GET}
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/impl/restmapping'}
- operationName: /case/resttemplate - operationName: /case/resttemplate
operationId: 0 operationId: 0
parentSpanId: -1 parentSpanId: -1
...@@ -218,6 +296,7 @@ segmentItems: ...@@ -218,6 +296,7 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/resttemplate'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/case/resttemplate'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
...@@ -225,10 +304,9 @@ segmentItems: ...@@ -225,10 +304,9 @@ segmentItems:
value: |- value: |-
q1=[v1] q1=[v1]
chinese=[中文] chinese=[中文]
skipAnalysis: 'false'
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: '{PUT}/update/{id}' - operationName: '{GET}/impl/restmapping'
operationId: 0 operationId: 0
parentSpanId: -1 parentSpanId: -1
spanId: 0 spanId: 0
...@@ -239,11 +317,12 @@ segmentItems: ...@@ -239,11 +317,12 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/update/1'} - {key: url, value: 'http://localhost:8080/spring-3.1.x-scenario/impl/restmapping'}
- {key: http.method, value: PUT} - {key: http.method, value: GET}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 4, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 7, parentTraceSegmentId: not null,
null, parentService: spring-3.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-3.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
/*
* 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 test.apache.skywalking.apm.testcase.implinterface;
import org.springframework.stereotype.Controller;
@Controller
public class TestCaseController implements TestCaseInterface {
@Override
public String implRequestMappingAnnotationTestCase() {
return "implRequestMappingAnnotationTestCase";
}
@Override
public String implRestAnnotationTestCase() {
return "implRestAnnotationTestCase";
}
}
/*
* 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 test.apache.skywalking.apm.testcase.implinterface;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@RequestMapping("/impl")
public interface TestCaseInterface {
@RequestMapping("/requestmapping")
@ResponseBody
String implRequestMappingAnnotationTestCase();
@RequestMapping(value = "/restmapping", method = RequestMethod.GET)
@ResponseBody
String implRestAnnotationTestCase();
}
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
package test.apache.skywalking.apm.testcase.resttemplate; package test.apache.skywalking.apm.testcase.resttemplate;
import java.io.IOException; import java.io.IOException;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
...@@ -61,6 +62,14 @@ public class RestTemplateController { ...@@ -61,6 +62,14 @@ public class RestTemplateController {
//Delete user //Delete user
new RestTemplate().delete(URL + "/delete/{id}", 1); new RestTemplate().delete(URL + "/delete/{id}", 1);
Request implRequestMappingRequest = new Request.Builder().url(URL + "/impl/requestmapping").build();
response = new OkHttpClient().newCall(implRequestMappingRequest).execute();
LOGGER.info(response.toString());
Request implRestMappingRequest = new Request.Builder().url(URL + "/impl/restmapping").build();
response = new OkHttpClient().newCall(implRestMappingRequest).execute();
LOGGER.info(response.toString());
return SUCCESS; return SUCCESS;
} }
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
segmentItems: segmentItems:
- serviceName: spring-4.1.x-scenario - serviceName: spring-4.1.x-scenario
segmentSize: ge 7 segmentSize: ge 9
segments: segments:
- segmentId: not null - segmentId: not null
spans: spans:
...@@ -30,24 +30,24 @@ segmentItems: ...@@ -30,24 +30,24 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/healthCheck'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/healthCheck'}
- {key: http.method, value: HEAD} - {key: http.method, value: HEAD}
skipAnalysis: 'false'
- segmentId: not null - segmentId: not null
spans: spans:
- {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod, - {operationName: test.apache.skywalking.apm.testcase.spring3.component.TestComponentBean.componentMethod,
operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 1, spanId: 2, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff, - {operationName: test.apache.skywalking.apm.testcase.spring3.dao.TestRepositoryBean.doSomeStuff,
operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 1, spanId: 3, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness, - {operationName: test.apache.skywalking.apm.testcase.spring3.service.TestServiceBean.doSomeBusiness,
operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq operationId: 0, parentSpanId: 0, spanId: 1, spanLayer: Unknown, startTime: nq 0,
0, endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '', endTime: nq 0, componentId: 93, isError: false, spanType: Local, peer: '',
skipAnalysis: 'false'} skipAnalysis: false}
- operationName: /case/spring3 - operationName: /case/spring3
operationId: 0 operationId: 0
parentSpanId: -1 parentSpanId: -1
...@@ -59,14 +59,15 @@ segmentItems: ...@@ -59,14 +59,15 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/spring3/'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/spring3/'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 1, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 1, parentTraceSegmentId: not null,
null, parentService: spring-4.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-4.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: '{POST}/create/' - operationName: '{POST}/create/'
...@@ -80,14 +81,15 @@ segmentItems: ...@@ -80,14 +81,15 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/create/'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/create/'}
- {key: http.method, value: POST} - {key: http.method, value: POST}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 2, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 2, parentTraceSegmentId: not null,
null, parentService: spring-4.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-4.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: '{GET}/get/{id}' - operationName: '{GET}/get/{id}'
...@@ -101,14 +103,37 @@ segmentItems: ...@@ -101,14 +103,37 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/get/1'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/get/1'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 3, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 3, parentTraceSegmentId: not null,
null, parentService: spring-4.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-4.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
- segmentId: not null
spans:
- operationName: '{PUT}/update/{id}'
operationId: 0
parentSpanId: -1
spanId: 0
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 14
isError: false
spanType: Entry
peer: ''
skipAnalysis: false
tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/update/1'}
- {key: http.method, value: PUT}
refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 4, parentTraceSegmentId: not null,
parentServiceInstance: not null, parentService: spring-4.1.x-scenario,
traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: '{DELETE}/delete/{id}' - operationName: '{DELETE}/delete/{id}'
...@@ -122,14 +147,37 @@ segmentItems: ...@@ -122,14 +147,37 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/delete/1'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/delete/1'}
- {key: http.method, value: DELETE} - {key: http.method, value: DELETE}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 5, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 5, parentTraceSegmentId: not null,
null, parentService: spring-4.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-4.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
- segmentId: not null
spans:
- operationName: /impl/requestmapping
operationId: 0
parentSpanId: -1
spanId: 0
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 14
isError: false
spanType: Entry
peer: ''
skipAnalysis: false
tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/impl/requestmapping'}
- {key: http.method, value: GET}
refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 6, parentTraceSegmentId: not null,
parentServiceInstance: not null, parentService: spring-4.1.x-scenario,
traceId: not null}
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: /spring-4.1.x-scenario/case/spring3/ - operationName: /spring-4.1.x-scenario/case/spring3/
...@@ -143,10 +191,10 @@ segmentItems: ...@@ -143,10 +191,10 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: http.method, value: GET} - {key: http.method, value: GET}
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/spring3/'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/spring3/'}
skipAnalysis: 'false'
- operationName: /spring-4.1.x-scenario/create/ - operationName: /spring-4.1.x-scenario/create/
operationId: 0 operationId: 0
parentSpanId: 0 parentSpanId: 0
...@@ -158,10 +206,10 @@ segmentItems: ...@@ -158,10 +206,10 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/create/'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/create/'}
- {key: http.method, value: POST} - {key: http.method, value: POST}
skipAnalysis: 'false'
- operationName: /spring-4.1.x-scenario/get/1 - operationName: /spring-4.1.x-scenario/get/1
operationId: 0 operationId: 0
parentSpanId: 0 parentSpanId: 0
...@@ -173,10 +221,10 @@ segmentItems: ...@@ -173,10 +221,10 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/get/1'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/get/1'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
skipAnalysis: 'false'
- operationName: /spring-4.1.x-scenario/update/1 - operationName: /spring-4.1.x-scenario/update/1
operationId: 0 operationId: 0
parentSpanId: 0 parentSpanId: 0
...@@ -188,10 +236,10 @@ segmentItems: ...@@ -188,10 +236,10 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/update/1'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/update/1'}
- {key: http.method, value: PUT} - {key: http.method, value: PUT}
skipAnalysis: 'false'
- operationName: /spring-4.1.x-scenario/delete/1 - operationName: /spring-4.1.x-scenario/delete/1
operationId: 0 operationId: 0
parentSpanId: 0 parentSpanId: 0
...@@ -203,10 +251,40 @@ segmentItems: ...@@ -203,10 +251,40 @@ segmentItems:
isError: false isError: false
spanType: Exit spanType: Exit
peer: localhost:8080 peer: localhost:8080
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/delete/1'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/delete/1'}
- {key: http.method, value: DELETE} - {key: http.method, value: DELETE}
skipAnalysis: 'false' - operationName: /spring-4.1.x-scenario/impl/requestmapping
operationId: 0
parentSpanId: 0
spanId: 6
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 12
isError: false
spanType: Exit
peer: localhost:8080
skipAnalysis: false
tags:
- {key: http.method, value: GET}
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/impl/requestmapping'}
- operationName: /spring-4.1.x-scenario/impl/restmapping
operationId: 0
parentSpanId: 0
spanId: 7
spanLayer: Http
startTime: nq 0
endTime: nq 0
componentId: 12
isError: false
spanType: Exit
peer: localhost:8080
skipAnalysis: false
tags:
- {key: http.method, value: GET}
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/impl/restmapping'}
- operationName: /case/resttemplate - operationName: /case/resttemplate
operationId: 0 operationId: 0
parentSpanId: -1 parentSpanId: -1
...@@ -218,13 +296,13 @@ segmentItems: ...@@ -218,13 +296,13 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/resttemplate'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/case/resttemplate'}
- {key: http.method, value: GET} - {key: http.method, value: GET}
skipAnalysis: 'false'
- segmentId: not null - segmentId: not null
spans: spans:
- operationName: '{PUT}/update/{id}' - operationName: '{GET}/impl/restmapping'
operationId: 0 operationId: 0
parentSpanId: -1 parentSpanId: -1
spanId: 0 spanId: 0
...@@ -235,11 +313,13 @@ segmentItems: ...@@ -235,11 +313,13 @@ segmentItems:
isError: false isError: false
spanType: Entry spanType: Entry
peer: '' peer: ''
skipAnalysis: false
tags: tags:
- {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/update/1'} - {key: url, value: 'http://localhost:8080/spring-4.1.x-scenario/impl/restmapping'}
- {key: http.method, value: PUT} - {key: http.method, value: GET}
refs: refs:
- {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess, - {parentEndpoint: /case/resttemplate, networkAddress: 'localhost:8080', refType: CrossProcess,
parentSpanId: 4, parentTraceSegmentId: not null, parentServiceInstance: not parentSpanId: 7, parentTraceSegmentId: not null,
null, parentService: spring-4.1.x-scenario, traceId: not null} parentServiceInstance: not null, parentService: spring-4.1.x-scenario,
skipAnalysis: 'false' traceId: not null}
/*
* 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 test.apache.skywalking.apm.testcase.implinterface;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestCaseController implements TestCaseInterface {
@Override
public String implRequestMappingAnnotationTestCase() {
return "implRequestMappingAnnotationTestCase";
}
@Override
public String implRestAnnotationTestCase() {
return "implRestAnnotationTestCase";
}
}
/*
* 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 test.apache.skywalking.apm.testcase.implinterface;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RequestMapping("/impl")
public interface TestCaseInterface {
@RequestMapping("/requestmapping")
String implRequestMappingAnnotationTestCase();
@RequestMapping(value = "/restmapping", method = RequestMethod.GET)
String implRestAnnotationTestCase();
}
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
package test.apache.skywalking.apm.testcase.resttemplate; package test.apache.skywalking.apm.testcase.resttemplate;
import java.io.IOException; import java.io.IOException;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.Response; import okhttp3.Response;
...@@ -61,6 +62,14 @@ public class RestTemplateController { ...@@ -61,6 +62,14 @@ public class RestTemplateController {
//Delete user //Delete user
new RestTemplate().delete(URL + "/delete/{id}", 1); new RestTemplate().delete(URL + "/delete/{id}", 1);
Request implRequestMappingRequest = new Request.Builder().url(URL + "/impl/requestmapping").build();
response = new OkHttpClient().newCall(implRequestMappingRequest).execute();
LOGGER.info(response.toString());
Request implRestMappingRequest = new Request.Builder().url(URL + "/impl/restmapping").build();
response = new OkHttpClient().newCall(implRestMappingRequest).execute();
LOGGER.info(response.toString());
return SUCCESS; return SUCCESS;
} }
......
...@@ -21,10 +21,11 @@ package test.apache.skywalking.apm.testcase.implinterface; ...@@ -21,10 +21,11 @@ package test.apache.skywalking.apm.testcase.implinterface;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/impl")
public interface TestCaseInterface { public interface TestCaseInterface {
@RequestMapping("/impl/requestmapping") @RequestMapping(path = "/requestmapping")
String implRequestMappingAnnotationTestCase(); String implRequestMappingAnnotationTestCase();
@GetMapping("/impl/restmapping") @GetMapping("/restmapping")
String implRestAnnotationTestCase(); String implRestAnnotationTestCase();
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册