2017-02-12 1 views
2

Ich versuche, einen gleichzeitigen Test für com.microsoft.azure.eventprocessorhost.PartitionContext zu machen, der einen geschützten Konstruktor mit mehreren Parametern in einem signierten Jar hat.Strategie für das Abfangen von signierten Klassen

Ich möchte diesen Konstruktor grundsätzlich ignorieren (oder Nullen übergeben) und eine Methode überschreiben, um einen Zähler zu inkrementieren. Die Klasse ist nicht final, und weder der Konstruktor noch die betreffende Methode.

Subclassing, das direkt zu einer Sicherheitsausnahme aufgrund der Signierung führt. Ich habe mir verschiedene Beispiele angeschaut und mit einer lokalen Version von ByteBuddyTutorialExamplesTest gespielt, habe aber keinen Erfolg.

Momentan überlege ich, aufzugeben und stattdessen die Call-Site zu dieser Klasse abzufangen. Das heißt, es wäre praktisch, eine falsche Version des Ziels (PartitionContext) zu haben.

Fehle ich irgendwelche Tricks, oder ist das, was ich versuche, nicht möglich?

Antwort

2

Byte Buddy bietet eine ClassLoadingStrategy, die eine Klasse in einen Klassenlader einspeist und die eine gegebene ProtectionDomain verwenden kann. Die Domäne muss jedoch explizit bereitgestellt werden.

diese Strategie anwenden zu können, wird die load Verfahren mit einem zweiten Argument überlastet:

builder.make().load(sealedClass.getClassLoader(), 
    ClassLoadingStrategy.Default.INJECTION.with(sealedClass.getProtectionDomain()))