Skip to content

Cannot resolve type description for [class of jdk] #1882

@zhanjinhao

Description

@zhanjinhao

Hello.

I have two agents.

One will isolate log4j2 by custom classloader which load class from specific directory instead of appclassloader, and the other will check whether the class's parents is target type.

the parent classloader of custom classloader is appclassloader.

the second agent's code that check the type of class's parent is below:


  @Override
  public boolean isMatch(TypeDescription typeDescription) {
    List<String> tmpList = new ArrayList<>(Arrays.asList(this.parentTypes));

    TypeList.Generic implInterfaces = typeDescription.getInterfaces();
    for (TypeDescription.Generic implInterface : implInterfaces) {
      matchHierarchyClass(implInterface, tmpList);
    }

    if (typeDescription.getSuperClass() != null) {
      matchHierarchyClass(typeDescription.getSuperClass(), tmpList);
    }

    return tmpList.isEmpty();
  }

  private void matchHierarchyClass(TypeDescription.Generic clazz, List<String> parentTypes) {
    parentTypes.remove(clazz.asRawType().getTypeName());
    if (parentTypes.isEmpty()) {
      return;
    }

    for (TypeDescription.Generic generic : clazz.getInterfaces()) {
      matchHierarchyClass(generic, parentTypes);
    }

    TypeDescription.Generic superClazz = clazz.getSuperClass();
    if (superClazz != null && !clazz.getTypeName().equals("java.lang.Object")) {
      matchHierarchyClass(superClazz, parentTypes);
    }

  }

when i run springboot with the two agents:

-javaagent:C:\workspace\project\incubating\port-trail\dist\porttrail-agent.jar
-javaagent:C:\workspace\learn\skywalking-agent-learn\dist\apm-agent-1.0-SNAPSHOT-jar-with-dependencies.jar

error will output:

2026-01-08 22:11:40.426 [main] WARN  [cn.addenda.porttrail.agent.transform.match.ProtectiveShieldMatcher.matches.33] - Byte-buddy occurs exception when match type [class org.apache.logging.log4j.spi.AbstractLogger].
cn.addenda.porttrail.dependency.net.bytebuddy.pool.TypePool$Resolution$NoSuchTypeException: Cannot resolve type description for java.io.Serializable
	at cn.addenda.porttrail.dependency.net.bytebuddy.pool.TypePool$Resolution$Illegal.resolve(TypePool.java:192) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.pool.TypePool$Default$WithLazyResolution$LazyTypeDescription.delegate(TypePool.java:1170) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.description.type.TypeDescription$AbstractBase$OfSimpleType$WithDelegation.getInterfaces(TypeDescription.java:8451) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.description.type.TypeDescription$Generic$OfNonGenericType.getInterfaces(TypeDescription.java:3698) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.matcher.HasSuperTypeMatcher.doMatch(HasSuperTypeMatcher.java:67) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.matcher.HasSuperTypeMatcher.doMatch(HasSuperTypeMatcher.java:32) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.matcher.ElementMatcher$Junction$ForNonNullValues.matches(ElementMatcher.java:249) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.matcher.ElementMatcher$Junction$Conjunction.matches(ElementMatcher.java:146) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.matcher.ElementMatcher$Junction$Disjunction.matches(ElementMatcher.java:214) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.agent.transform.match.ProtectiveShieldMatcher.matches(ProtectiveShieldMatcher.java:31) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.agent.builder.AgentBuilder$RawMatcher$ForElementMatchers.matches(AgentBuilder.java:1968) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.doTransform(AgentBuilder.java:12703) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(AgentBuilder.java:12661) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.access$1800(AgentBuilder.java:12370) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$LegacyVmDispatcher.run(AgentBuilder.java:13070) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$LegacyVmDispatcher.run(AgentBuilder.java:13008) ~[porttrail-agent.jar:?]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_221]
	at cn.addenda.porttrail.dependency.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.doPrivileged(AgentBuilder.java) ~[porttrail-agent.jar:?]
	at cn.addenda.porttrail.dependency.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(AgentBuilder.java:12570) ~[porttrail-agent.jar:?]
	at sun.instrument.TransformerManager.transform(TransformerManager.java:188) ~[?:1.8.0_221]
	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) ~[?:1.8.0_221]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_221]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:1.8.0_221]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:642) ~[?:1.8.0_221]
	at cn.addenda.sal.agent.core.log.LogClassLoader.doFindClass(LogClassLoader.java:99) ~[apm-agent-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
	at cn.addenda.sal.agent.core.log.LogClassLoader.loadClass(LogClassLoader.java:69) ~[apm-agent-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_221]
	at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_221]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:1.8.0_221]
	at java.lang.ClassLoader.defineClass(ClassLoader.java:642) ~[?:1.8.0_221]
	at cn.addenda.sal.agent.core.log.LogClassLoader.doFindClass(LogClassLoader.java:99) ~[apm-agent-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
	at cn.addenda.sal.agent.core.log.LogClassLoader.loadClass(LogClassLoader.java:69) ~[apm-agent-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_221]
	at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:61) ~[log4j-api-2.17.2.jar:2.17.2]
	at java.lang.Class.forName0(Native Method) ~[?:1.8.0_221]
	at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_221]
	at cn.addenda.sal.agent.core.log.MyLoggerFactory.<clinit>(MyLoggerFactory.java:35) ~[apm-agent-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
	at cn.addenda.sal.agent.SkywalkingLearnAgent.<clinit>(SkywalkingLearnAgent.java:36) ~[apm-agent-1.0-SNAPSHOT-jar-with-dependencies.jar:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_221]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_221]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_221]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_221]
	at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386) ~[?:1.8.0_221]
	at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401) ~[?:1.8.0_221]

I have searched the issue of bytebuddy and I know bytebuddy will analyze bytecode of class, so if there is not bytecode exists, bytebuddy can not get type.

but , my problem is : the type which can not be resolved is jdk's class.

All the class which match failed are class that loading from my custom classloader.

can somebody give me some advise. thanks!

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions