Skip to content

Commit d231d99

Browse files
committed
support for 2.0
1 parent 1ba49a1 commit d231d99

File tree

17 files changed

+775
-0
lines changed

17 files changed

+775
-0
lines changed

apache-axis2-2.0/build.gradle

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
2+
// Build.gradle generated for instrumentation module apache-axis2
3+
4+
apply plugin: 'java'
5+
6+
dependencies {
7+
implementation 'org.apache.axis2:axis2-kernel:2.0.0'
8+
implementation 'org.apache.axis2:axis2-transport-http:2.0.0'
9+
implementation 'jakarta.servlet:jakarta.servlet-api:6.0.0'
10+
11+
// New Relic Labs Java Agent dependencies
12+
implementation 'com.newrelic.agent.java:newrelic-agent:6.4.0'
13+
implementation 'com.newrelic.agent.java:newrelic-api:6.4.0'
14+
implementation fileTree(include: ['*.jar'], dir: '../libs')
15+
implementation fileTree(include: ['*.jar'], dir: '../test-lib')
16+
}
17+
18+
jar {
19+
manifest {
20+
attributes 'Implementation-Title': 'com.newrelic.instrumentation.labs.apache-axis2'
21+
attributes 'Implementation-Vendor': 'New Relic Labs'
22+
attributes 'Implementation-Vendor-Id': 'com.newrelic.labs'
23+
attributes 'Implementation-Version': 1.0
24+
}
25+
}
26+
27+
verifyInstrumentation {
28+
passes ('org.apache.axis2:axis2-transport-http:[2.0.0,)') {
29+
compile( 'jakarta.servlet:jakarta.servlet-api:6.0.0')
30+
}
31+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.nr.agent.instrumentation.axis2;
2+
3+
import java.util.Enumeration;
4+
5+
import org.apache.axis2.transport.http.server.AxisHttpRequest;
6+
7+
import com.newrelic.api.agent.ExtendedRequest;
8+
import com.newrelic.api.agent.HeaderType;
9+
10+
public class Axis2ExtendedRequest extends ExtendedRequest {
11+
12+
private AxisHttpRequest request = null;
13+
14+
public Axis2ExtendedRequest(AxisHttpRequest req) {
15+
request = req;
16+
}
17+
18+
@Override
19+
public String getRequestURI() {
20+
return request.getRequestURI();
21+
}
22+
23+
@Override
24+
public String getRemoteUser() {
25+
return null;
26+
}
27+
28+
@Override
29+
public Enumeration getParameterNames() {
30+
31+
return null;
32+
}
33+
34+
@Override
35+
public String[] getParameterValues(String name) {
36+
return new String[] {};
37+
}
38+
39+
@Override
40+
public Object getAttribute(String name) {
41+
return null;
42+
}
43+
44+
@Override
45+
public String getCookieValue(String name) {
46+
return null;
47+
}
48+
49+
@Override
50+
public HeaderType getHeaderType() {
51+
return HeaderType.HTTP;
52+
}
53+
54+
@Override
55+
public String getHeader(String name) {
56+
return request.getFirstHeader(name).getValue();
57+
}
58+
59+
@Override
60+
public String getMethod() {
61+
return request.getMethod();
62+
}
63+
64+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.nr.agent.instrumentation.axis2;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collection;
5+
import java.util.Iterator;
6+
import java.util.List;
7+
8+
import org.apache.axis2.context.MessageContext;
9+
10+
import com.newrelic.api.agent.HeaderType;
11+
import com.newrelic.api.agent.Headers;
12+
13+
public class Axis2Headers implements Headers {
14+
15+
private MessageContext msgCtx;
16+
17+
public Axis2Headers(MessageContext messageCtx) {
18+
msgCtx = messageCtx;
19+
}
20+
21+
@Override
22+
public HeaderType getHeaderType() {
23+
return HeaderType.HTTP;
24+
}
25+
26+
@Override
27+
public String getHeader(String key) {
28+
return (String) msgCtx.getProperty(key);
29+
}
30+
31+
@Override
32+
public Collection<String> getHeaders(String name) {
33+
List<String> list = new ArrayList<>();
34+
String value = getHeader(name);
35+
if(value != null && !value.isEmpty()) {
36+
list.add(value);
37+
}
38+
return list;
39+
}
40+
41+
@Override
42+
public void setHeader(String name, String value) {
43+
msgCtx.setProperty(name, value);
44+
}
45+
46+
@Override
47+
public void addHeader(String name, String value) {
48+
msgCtx.setProperty(name, value);
49+
}
50+
51+
@Override
52+
public Collection<String> getHeaderNames() {
53+
Iterator<String> iterator = msgCtx.getPropertyNames();
54+
List<String> names = new ArrayList<>();
55+
while(iterator.hasNext()) {
56+
names.add(iterator.next());
57+
}
58+
return names;
59+
}
60+
61+
@Override
62+
public boolean containsHeader(String name) {
63+
Collection<String> names = getHeaderNames();
64+
return names.contains(name);
65+
}
66+
67+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.nr.agent.instrumentation.axis2;
2+
3+
import java.util.ArrayList;
4+
5+
import org.apache.axis2.context.MessageContext;
6+
import org.apache.axis2.description.AxisOperation;
7+
import org.apache.axis2.description.AxisService;
8+
9+
import com.newrelic.agent.bridge.AgentBridge;
10+
import com.newrelic.api.agent.NewRelic;
11+
12+
import jakarta.servlet.http.HttpServletRequest;
13+
14+
public class Axis2Utils {
15+
16+
public static String[] getAxisTransactionName(MessageContext msgContext, String requestURI, String soapAction) {
17+
ArrayList<String> transactionNameList = new ArrayList<String>();
18+
if (msgContext != null) {
19+
AxisService axisService = msgContext.getAxisService();
20+
AxisOperation axisOperation = msgContext.getAxisOperation();
21+
if(soapAction == null) {
22+
soapAction = msgContext.getSoapAction();
23+
}
24+
if(axisService != null && axisService.getName() != null) {
25+
String serviceName = axisService.getName();
26+
if(!serviceName.isEmpty()) {
27+
transactionNameList.add(serviceName);
28+
AgentBridge.publicApi.addCustomParameter("Service Name", serviceName);
29+
}
30+
}
31+
if(axisOperation != null && axisOperation.getName() != null) {
32+
String opName = axisOperation.getName().getLocalPart();
33+
if(!opName.isEmpty()) {
34+
transactionNameList.add(opName);
35+
NewRelic.addCustomParameter("Operation Name", opName);
36+
}
37+
}
38+
}
39+
40+
if (soapAction != null && !soapAction.isEmpty()) {
41+
String soapActionName = getSoapActionName(soapAction);
42+
NewRelic.addCustomParameter("SOAP Action", soapActionName);
43+
if(transactionNameList.isEmpty()) {
44+
transactionNameList.add(soapActionName);
45+
}
46+
}
47+
48+
if (requestURI != null && !requestURI.isEmpty()) {
49+
NewRelic.addCustomParameter("Request URI", requestURI);
50+
if(transactionNameList.isEmpty()) {
51+
transactionNameList.add(requestURI);
52+
}
53+
}
54+
55+
if(!transactionNameList.isEmpty()) {
56+
return transactionNameList.toArray(new String[transactionNameList.size()]);
57+
} else {
58+
return new String[0];
59+
}
60+
}
61+
62+
public static String[] getAxisTransactionName(HttpServletRequest request) {
63+
return getAxisTransactionName(null, request.getRequestURI(), null);
64+
}
65+
66+
public static String[] getAxisTransactionName(MessageContext msgContext) {
67+
return getAxisTransactionName(msgContext, null, null);
68+
}
69+
70+
public static String getSoapActionName(String soapAction) {
71+
if (soapAction.startsWith("urn:")) {
72+
return soapAction.substring(4);
73+
} else {
74+
return soapAction;
75+
}
76+
}
77+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.apache.axis2.client;
2+
3+
import org.apache.axis2.context.OperationContext;
4+
5+
import com.newrelic.api.agent.NewRelic;
6+
import com.newrelic.api.agent.Trace;
7+
import com.newrelic.api.agent.weaver.MatchType;
8+
import com.newrelic.api.agent.weaver.Weave;
9+
import com.newrelic.api.agent.weaver.Weaver;
10+
11+
@Weave(type=MatchType.BaseClass)
12+
public abstract class OperationClient {
13+
14+
public abstract OperationContext getOperationContext();
15+
16+
@Trace
17+
public void executeImpl(boolean b) {
18+
19+
OperationContext oc1 = getOperationContext();
20+
if(oc1 != null) {
21+
String opName = oc1.getOperationName();
22+
String servicename = oc1.getServiceName();
23+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","OperationClient",getClass().getSimpleName(),"execute",servicename,opName);
24+
25+
}
26+
Weaver.callOriginal();
27+
}
28+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package org.apache.axis2.client;
2+
3+
import javax.xml.namespace.QName;
4+
5+
import org.apache.axiom.om.OMElement;
6+
import org.apache.axis2.client.async.AxisCallback;
7+
import org.apache.axis2.context.ServiceContext;
8+
9+
import com.newrelic.api.agent.NewRelic;
10+
import com.newrelic.api.agent.Token;
11+
import com.newrelic.api.agent.Trace;
12+
import com.newrelic.api.agent.weaver.Weave;
13+
import com.newrelic.api.agent.weaver.Weaver;
14+
15+
@Weave
16+
public abstract class ServiceClient {
17+
18+
public abstract ServiceContext getServiceContext();
19+
20+
@Trace
21+
public OMElement sendReceive(QName operationQName, OMElement xmlPayload) {
22+
ServiceContext serviceCtx = getServiceContext();
23+
if(serviceCtx != null) {
24+
String serviceName = serviceCtx.getName();
25+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Axis2","ServiceClient",serviceName,"sendReceive");
26+
}
27+
return Weaver.callOriginal();
28+
}
29+
30+
@Trace
31+
public void sendReceiveNonBlocking(QName operation, OMElement elem, AxisCallback callback) {
32+
if(callback.token == null) {
33+
Token t = NewRelic.getAgent().getTransaction().getToken();
34+
if(t != null && t.isActive()) {
35+
callback.token = t;
36+
} else if(t != null) {
37+
t.expire();
38+
t = null;
39+
}
40+
}
41+
ServiceContext serviceCtx = getServiceContext();
42+
if(serviceCtx != null) {
43+
String serviceName = serviceCtx.getName();
44+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Axis2","ServiceClient",serviceName,"sendReceiveNonBlocking");
45+
}
46+
Weaver.callOriginal();
47+
}
48+
49+
@Trace
50+
public void sendReceiveNonBlocking(OMElement elem, AxisCallback callback) {
51+
if(callback.token == null) {
52+
Token t = NewRelic.getAgent().getTransaction().getToken();
53+
if(t != null && t.isActive()) {
54+
callback.token = t;
55+
} else if(t != null) {
56+
t.expire();
57+
t = null;
58+
}
59+
}
60+
ServiceContext serviceCtx = getServiceContext();
61+
if(serviceCtx != null) {
62+
String serviceName = serviceCtx.getName();
63+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Axis2","ServiceClient",serviceName,"sendReceiveNonBlocking");
64+
}
65+
Weaver.callOriginal();
66+
}
67+
68+
public void sendRobust(QName operation, OMElement elem) {
69+
ServiceContext serviceCtx = getServiceContext();
70+
if(serviceCtx != null) {
71+
String serviceName = serviceCtx.getName();
72+
NewRelic.getAgent().getTracedMethod().setMetricName("Custom","Axis2","ServiceClient",serviceName,"sendRobust");
73+
}
74+
Weaver.callOriginal();
75+
}
76+
}

0 commit comments

Comments
 (0)