GithubHelp home page GithubHelp logo

Comments (9)

raphw avatar raphw commented on July 2, 2024

What's your interceptor class, including annotations and imports?

from byte-buddy.

jwalor avatar jwalor commented on July 2, 2024

Hi , thanks for replying,
Is it technically possible to modify this method?
image

--> Code:
`import io.confluent.kafka.schemaregistry.rest.SchemaRegistryConfig;
import io.confluent.rest.RestConfigException;
import javassist.NotFoundException;
import net.bytebuddy.agent.ByteBuddyAgent;
import net.bytebuddy.agent.builder.AgentBuilder;
import net.bytebuddy.asm.MemberSubstitution;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.matcher.ElementMatchers;
import net.bytebuddy.utility.JavaModule;
import org.apache.kafka.common.config.ConfigDef;

import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
import java.util.Properties;
import static net.bytebuddy.matcher.ElementMatchers.*;

public class MainX2 {

public static void main(String[] args) throws RestConfigException, NotFoundException {
    SchemaRegistryConfig test = new SchemaRegistryConfig(new Properties());
    Instrumentation instrumentation = ByteBuddyAgent.install();
    new AgentBuilder.Default()
            .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION)
            .with(AgentBuilder.RedefinitionStrategy.REDEFINITION)
            .with(AgentBuilder.RedefinitionStrategy.Listener.StreamWriting.toSystemError())
            .with(AgentBuilder.Listener.StreamWriting.toSystemError().withTransformationsOnly())
            .with(AgentBuilder.InstallationListener.StreamWriting.toSystemError())
            .type(ElementMatchers.named("io.confluent.kafka.schemaregistry.rest.SchemaRegistryConfig"))
            .transform(new AgentBuilder.Transformer() {
                @Override
                public DynamicType.Builder<?> transform(DynamicType.Builder<?> builder, TypeDescription typeDescription,
                                                        ClassLoader classLoader, JavaModule module, ProtectionDomain protectionDomain) {
                    try {
                        return builder
                                .visit(MemberSubstitution.strict()
                                        .method(named("baseSchemaRegistryConfigDef"))
                                        .replaceWith(MainX2.class.getMethod("baseSchemaRegistryConfigDef"))
                                        .on(any()));
                    } catch (NoSuchMethodException e) {
                        throw new RuntimeException(e);
                    }
                  
                }
            }).installOn(instrumentation);

    SchemaRegistryConfig teSchemaRegistryConfig = new SchemaRegistryConfig(new Properties());

    System.out.println(teSchemaRegistryConfig.baseSchemaRegistryConfigDef().configKeys().size());

}

public static ConfigDef baseSchemaRegistryConfigDef() {
    return new ConfigDef();
}

`
I would like to know if it is possible to replace the body of that method with a modified one. I have tried some examples but no success.

from byte-buddy.

raphw avatar raphw commented on July 2, 2024

It is, but the static initializer will not be rerun on a retransformation. In this case, you would need to hook before the class is loaded for the first time.

from byte-buddy.

jwalor avatar jwalor commented on July 2, 2024

I agree Rafael, with AgentBuilder could I achieve it?
If you have any reference it would help me a lot for what I am looking for

from byte-buddy.

raphw avatar raphw commented on July 2, 2024

You mean rerun the static initializer? That is not possible, unfortunately, the JVM does not support it.

from byte-buddy.

jwalor avatar jwalor commented on July 2, 2024

If I understood what you indicated... ("you would need to hook before the class is loaded for the first time.")
could you give me some reference on how I could resolve this case? thank you so much :)

from byte-buddy.

jwalor avatar jwalor commented on July 2, 2024

@raphw
Could you just tell me which api to use?

from byte-buddy.

raphw avatar raphw commented on July 2, 2024

You are doing it right, but there's nothing that can fix your problem if the initializer already ran.

from byte-buddy.

jwalor avatar jwalor commented on July 2, 2024

Thank you very much for the support! , I found everything about bytebuddy interesting.

from byte-buddy.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.