Skip to content

Commit

Permalink
Native server fails to build due to Elytron Credential unsupported co…
Browse files Browse the repository at this point in the history
…mbination infinispan#44
  • Loading branch information
ryanemerson committed Jan 19, 2021
1 parent 6bd1be7 commit 9d13838
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,11 @@ void addReflectionAndResources(BuildProducer<ReflectiveClassBuildItem> reflectio
"org.wildfly.security.sasl.plain.PlainSaslClientFactory",
"org.wildfly.security.sasl.plain.PlainSaslServerFactory",
"org.wildfly.security.sasl.scram.ScramSaslClientFactory",
"org.wildfly.security.sasl.scram.ScramSaslServerFactory"
"org.wildfly.security.sasl.scram.ScramSaslServerFactory",
"org.wildfly.security.credential.KeyPairCredential",
"org.wildfly.security.credential.PasswordCredential",
"org.wildfly.security.credential.SecretKeyCredential",
"org.wildfly.security.credential.X509CertificateChainPrivateCredential",
};
reflectionClass.produce(new ReflectiveClassBuildItem(true, false, elytronClasses));

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package org.infinispan.quarkus.server.runtime.graal;

import com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.UndeclaredThrowableException;
import java.security.Key;
import java.security.PrivilegedAction;
import java.util.function.UnaryOperator;

import static java.security.AccessController.doPrivileged;

public class SubstituteElytronClasses {
}

@TargetClass(className = "org.wildfly.security.key.KeyUtil$KeyClonerCreator")
final class Target_org_wildfly_security_key_KeyUtil_KeyClonerCreator
{
@Substitute
private UnaryOperator<Key> checkForCloneMethod(final Class<?> declType, final Class<?> returnType)
{
System.out.printf("Call checkForCloneMethod(%s,%s)%n", declType, returnType);
final Method method = doPrivileged(new PrivilegedAction<Method>()
{
@Override
public Method run()
{
try
{
Method cloneMethod = declType.getDeclaredMethod("clone");
if (cloneMethod.getReturnType() == returnType)
return cloneMethod;

return null;
}
catch (NoSuchMethodException e)
{
return null;
}
}
});

if (method == null)
return null;

return new UnaryOperator<Key>()
{
@Override
public Key apply(Key key)
{
try
{
return (Key) method.invoke(key);
}
catch (RuntimeException | Error e)
{
throw e;
}
catch (Throwable throwable)
{
throw new UndeclaredThrowableException(throwable);
}
}
};
}

@Substitute
private UnaryOperator<Key> checkForCopyCtor(final Class<?> declType, final Class<?> paramType)
{
System.out.printf("Call checkForCopyCtor(%s,%s)%n", declType, paramType);
final Constructor<?> constructor = doPrivileged(new PrivilegedAction<Constructor<?>>()
{
@Override
public Constructor<?> run()
{
try
{
return declType.getDeclaredConstructor(paramType);
}
catch (NoSuchMethodException e)
{
System.out.printf("Copy ctor in %s for parameter %s not found%n", declType, paramType);
return null;
}
}
});

if (constructor == null)
return null;

return new UnaryOperator<Key>()
{
@Override
public Key apply(Key key)
{
try
{
return (Key) constructor.newInstance(key);
}
catch (RuntimeException | Error e)
{
throw e;
}
catch (Throwable throwable)
{
throw new UndeclaredThrowableException(throwable);
}
}
};
}
}

0 comments on commit 9d13838

Please sign in to comment.