Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change already compiled .class file without decompile?

I want to change .class file's method. I installed JD Eclipse Decompiler and opened the .class file. I added some codes and save .class file. But, .class file is not changing.

I don't know how to use decompiler. And if is it possible, how to change .class file without using decompiler.

I am using Ubuntu.

Regards

EDIT:

Here is my decompiled code:

/*     */ package org.hibernate.id; /*     */  /*     */ import java.io.Serializable; /*     */ import java.sql.ResultSet; /*     */ import java.sql.SQLException; /*     */ import java.util.HashMap; /*     */ import java.util.Properties; /*     */ import org.apache.commons.logging.Log; /*     */ import org.apache.commons.logging.LogFactory; /*     */ import org.hibernate.HibernateException; /*     */ import org.hibernate.MappingException; /*     */ import org.hibernate.dialect.Dialect; /*     */ import org.hibernate.type.Type; /*     */ import org.hibernate.util.ReflectHelper; /*     */  /*     */ public final class IdentifierGeneratorFactory /*     */ { /*  25 */   private static final Log log = LogFactory.getLog(IdentifierGeneratorFactory.class); /*     */  /*  64 */   private static final HashMap GENERATORS = new HashMap(); /*     */  /*  66 */   public static final Serializable SHORT_CIRCUIT_INDICATOR = new Serializable() { /*     */     public String toString() { return "SHORT_CIRCUIT_INDICATOR"; /*     */     } /*  66 */   }; /*     */  /*  70 */   public static final Serializable POST_INSERT_INDICATOR = new Serializable() { /*     */     public String toString() { return "POST_INSERT_INDICATOR"; /*     */     } /*  70 */   }; /*     */  /*     */   public static Serializable getGeneratedIdentity(ResultSet rs, Type type) /*     */     throws SQLException, HibernateException, IdentifierGenerationException /*     */   { /*  32 */     if (!(rs.next())) { /*  33 */       throw new HibernateException("The database returned no natively generated identity value"); /*     */     } /*  35 */     Serializable id = get(rs, type); /*     */  /*  37 */     if (log.isDebugEnabled()) log.debug("Natively generated identity: " + id); /*  38 */     return id; /*     */   } /*     */  /*     */   public static Serializable get(ResultSet rs, Type type) /*     */     throws SQLException, IdentifierGenerationException /*     */   { /*  45 */     Class clazz = type.getReturnedClass(); /*  46 */     if (clazz == Long.class) { /*  47 */       return new Long(rs.getLong(1)); /*     */     } /*  49 */     if (clazz == Integer.class) { /*  50 */       return new Integer(rs.getInt(1)); /*     */     } /*  52 */     if (clazz == Short.class) { /*  53 */       return new Short(rs.getShort(1)); /*     */     } /*  55 */     if (clazz == String.class) { /*  56 */       return rs.getString(1); /*     */     }                 if(clazz == java.math.BigDecimal.class){                     return rs.getBigDecimal(1);                 } /*     */  /*  59 */     throw new IdentifierGenerationException("this id generator generates long, integer, short or string78"); /*     */   } /*     */  /*     */   public static IdentifierGenerator create(String strategy, Type type, Properties params, Dialect dialect) /*     */     throws MappingException /*     */   { /*     */     try /*     */     { /*  92 */       Class clazz = getIdentifierGeneratorClass(strategy, dialect); /*  93 */       IdentifierGenerator idgen = (IdentifierGenerator)clazz.newInstance(); /*  94 */       if (idgen instanceof Configurable) ((Configurable)idgen).configure(type, params, dialect); /*  95 */       return idgen; /*     */     } /*     */     catch (Exception e) { /*  98 */       throw new MappingException("could not instantiate id generator", e); /*     */     } /*     */   } /*     */  /*     */   public static Class getIdentifierGeneratorClass(String strategy, Dialect dialect) { /* 103 */     Class clazz = (Class)GENERATORS.get(strategy); /* 104 */     if ("native".equals(strategy)) clazz = dialect.getNativeIdentifierGeneratorClass(); /*     */     try { /* 106 */       if (clazz == null) clazz = ReflectHelper.classForName(strategy); /*     */     } /*     */     catch (ClassNotFoundException e) { /* 109 */       throw new MappingException("could not interpret id generator strategy: " + strategy); /*     */     } /* 111 */     return clazz; /*     */   } /*     */  /*     */   public static Number createNumber(long value, Class clazz) throws IdentifierGenerationException { /* 115 */     if (clazz == Long.class) { /* 116 */       return new Long(value); /*     */     } /* 118 */     if (clazz == Integer.class) { /* 119 */       return new Integer((int)value); /*     */     } /* 121 */     if (clazz == Short.class) { /* 122 */       return new Short((short)(int)value); /*     */     }  /*     */  /* 125 */     throw new IdentifierGenerationException("this id generator generates long, integer, short"); /*     */   } /*     */  /*     */   static /*     */   { /*  75 */     GENERATORS.put("uuid", UUIDHexGenerator.class);     GENERATORS.put("hilo", TableHiLoGenerator.class);      GENERATORS.put("assigned", Assigned.class);      GENERATORS.put("identity", IdentityGenerator.class);     GENERATORS.put("select", SelectGenerator.class);     GENERATORS.put("sequence", SequenceGenerator.class);      GENERATORS.put("seqhilo", SequenceHiLoGenerator.class);     GENERATORS.put("increment", IncrementGenerator.class);    GENERATORS.put("foreign", ForeignGenerator.class);      GENERATORS.put("guid", GUIDGenerator.class);      GENERATORS.put("uuid.hex", UUIDHexGenerator.class);      GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class);    }  } 
like image 348
Breed Hansen Avatar asked Dec 28 '12 11:12

Breed Hansen


People also ask

Can I modify .class file?

To modify a class file in an enterprise bean, you change the source code, recompile it, and redeploy the application.

How do I edit a class in Eclipse?

Class files are compiled entities. You can't just edit them. You need to get the actual source used to compile the class files. The source has to match the class file.


1 Answers

You can follow these steps to modify your java class:

  1. Decompile the .class file as you have done and save it as .java
  2. Create a project in Eclipse with that java file, the original JAR as library, and all its dependencies
  3. Change the .java and compile
  4. Get the modified .class file and put it again inside the original JAR.
like image 72
izaera Avatar answered Sep 30 '22 13:09

izaera