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

Co-authored-by: Galder Zamarreño <galder@redhat.com>
  • Loading branch information
ryanemerson and galderz committed Jan 20, 2021
1 parent 6bd1be7 commit 9e64a7d
Show file tree
Hide file tree
Showing 2 changed files with 88 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,83 @@
package org.infinispan.quarkus.server.runtime.graal;

import static java.security.AccessController.doPrivileged;

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 com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;

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) {
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) {
final Constructor<?> constructor = doPrivileged(new PrivilegedAction<Constructor<?>>() {
@Override
public Constructor<?> run() {
try {
return declType.getDeclaredConstructor(paramType);
} catch (NoSuchMethodException e) {
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 9e64a7d

Please sign in to comment.