byte-buddy
byte-buddy copied to clipboard
how to use bytebuddy to implement my code
i want to implement the following code
public byte[] toJsonBytes(Object o) throws Exception { return gson.toJson(o).getBytes(); }
i write the code like this
Method toJsonBytesMethod = gsonClass.getDeclaredMethod("toJson", Object.class); builder = builder.method(ElementMatchers.named("toJsonBytes")) .intercept(MethodCall.invoke(toJsonBytesMethod).onField("gson") .withArgument(0) .andThen(MethodCall.invoke(String.class.getDeclaredMethod("getBytes")) .with("UTF-8")) );
but when i run that, It has the following exception
Exception in thread "main" java.lang.IllegalStateException: public byte[] java.lang.String.getBytes() does not accept 1 arguments at net.bytebuddy.implementation.MethodCall$Appender.toStackManipulation(MethodCall.java:3553) at net.bytebuddy.implementation.MethodCall$Appender.apply(MethodCall.java:3522) at net.bytebuddy.implementation.bytecode.ByteCodeAppender$Compound.apply(ByteCodeAppender.java:156) at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod$WithBody.applyCode(TypeWriter.java:730) at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod$WithBody.applyBody(TypeWriter.java:715) at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod.apply(TypeWriter.java:622) at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForCreation.create(TypeWriter.java:6043) at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:2224) at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$UsingTypeWriter.make(DynamicType.java:4050) at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase.make(DynamicType.java:3734) at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$Delegator.make(DynamicType.java:3986) at com.bytebuddy.test.json.gson.GsonBuddyTest.getGsonStrategy(GsonBuddyTest.java:116) at com.bytebuddy.test.json.gson.GsonBuddyTest.main(GsonBuddyTest.java:21)
how i can solve that, pls help me, thx
You should probably try String.class.getDeclaredMethod("getBytes", String.class)
class i have solve that,
builder = builder.method(ElementMatchers.named("toJsonBytes")) .intercept(MethodCall.invoke(String.class.getDeclaredMethod("getBytes")). onMethodCall(MethodCall.invoke(toJsonBytesMethod).onField("gson").withArgument(0)));