Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
import static org.apache.yoko.orb.OB.TypeCodeFactory.createWStringTC;
import static org.apache.yoko.orb.OCI.GiopVersion.GIOP1_0;
import static org.apache.yoko.util.Assert.ensure;
import static org.apache.yoko.util.InstanceFactory.createNoArgsInstance;
import static org.apache.yoko.util.MinorCodes.MinorInvalidUnionDiscriminator;
import static org.apache.yoko.util.MinorCodes.MinorLoadStub;
import static org.apache.yoko.util.MinorCodes.MinorReadBooleanArrayOverflow;
Expand Down Expand Up @@ -111,7 +112,6 @@
import static org.apache.yoko.util.MinorCodes.describeMarshal;
import static org.apache.yoko.util.PrivilegedActions.getClassLoader;
import static org.apache.yoko.util.PrivilegedActions.getMethod;
import static org.apache.yoko.util.PrivilegedActions.getNoArgConstructor;
import static org.omg.CORBA.CompletionStatus.COMPLETED_NO;
import static org.omg.CORBA.TCKind._tk_Principal;
import static org.omg.CORBA.TCKind._tk_TypeCode;
Expand Down Expand Up @@ -147,7 +147,6 @@
import static org.omg.CORBA.TCKind._tk_wchar;
import static org.omg.CORBA.TCKind._tk_wstring;
import static org.omg.CORBA.TCKind.tk_union;
import static org.omg.CORBA_2_4.TCKind._tk_local_interface;

final public class YokoInputStream extends InputStreamWithOffsets {
private ORBInstance orbInstance;
Expand Down Expand Up @@ -1057,10 +1056,10 @@ private org.omg.CORBA.Object createStub(Class<?> stubClass, org.omg.CORBA.portab
@SuppressWarnings("unchecked")
Class<? extends ObjectImpl> clz = (Class<? extends ObjectImpl>) stubClass;
try {
org.omg.CORBA.portable.ObjectImpl stub = doPrivileged(getNoArgConstructor(clz)).newInstance();
ObjectImpl stub = createNoArgsInstance(clz);
stub._set_delegate(delegate);
return stub;
} catch (InvocationTargetException | InstantiationException | IllegalAccessException | PrivilegedActionException ex) {
} catch (RuntimeException ex) {
GIOP_IN_LOG.log(FINE, ex, () -> "Exception creating object stub");
throw newMarshalError(MinorLoadStub, ex);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@
import static java.util.logging.Level.SEVERE;
import static org.apache.yoko.logging.VerboseLogging.INIT_LOG;
import static org.apache.yoko.osgi.ProviderLocator.loadClass;
import static org.apache.yoko.util.InstanceFactory.createNoArgsInstance;
import static org.apache.yoko.util.PrivilegedActions.GET_CONTEXT_CLASS_LOADER;
import static org.apache.yoko.util.PrivilegedActions.getNoArgConstructor;

public final class PluginManager {
private ORB orb;
Expand All @@ -55,7 +55,7 @@ private Plugin createPlugin(String name, StringSeqHolder args) {
final String className = orb.properties().getProperty("yoko.oci.plugin." + name, "org.apache.yoko.orb.OCI." + name);
try {
Class<? extends PluginInit> c = loadClass(className, this.getClass(), doPrivileged(GET_CONTEXT_CLASS_LOADER));
PluginInit pi = doPrivileged(getNoArgConstructor(c)).newInstance();
PluginInit pi = createNoArgsInstance(c);
pi.version(orb, Version.value);
return pi.init(orb, args);
} catch (SystemException ex) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,16 @@
import org.omg.CORBA.WStringValueHelper;
import org.omg.CORBA.portable.ValueFactory;

import java.lang.reflect.InvocationTargetException;
import java.security.PrivilegedActionException;
import java.util.Hashtable;
import java.util.logging.Logger;

import static java.security.AccessController.doPrivileged;
import static java.util.logging.Logger.getLogger;
import static org.apache.yoko.util.Assert.ensure;
import static org.apache.yoko.util.InstanceFactory.createNoArgsInstance;
import static org.apache.yoko.util.MinorCodes.MinorORBDestroyed;
import static org.apache.yoko.util.MinorCodes.MinorValueFactoryError;
import static org.apache.yoko.util.MinorCodes.describeBadParam;
import static org.apache.yoko.util.MinorCodes.describeInitialize;
import static org.apache.yoko.util.PrivilegedActions.getNoArgConstructor;
import static org.omg.CORBA.CompletionStatus.COMPLETED_NO;

public final class ValueFactoryManager {
Expand Down Expand Up @@ -169,18 +166,14 @@ public ValueFactory lookupValueFactoryWithClass(String id) {

// Try to convert the repository ID into a class name.
Class<? extends ValueFactory> c = RepIds.query(id).suffix("DefaultFactory").toClass();
if (c != null) {
try {
logger.finer(() -> "Attempting to create value factory from class " + c.getName());
// Instantiate the factory
ValueFactory result = doPrivileged(getNoArgConstructor(c)).newInstance();

// Cache the result
classFactories_.put(id, result);
return result;
} catch (ClassCastException | PrivilegedActionException | InvocationTargetException | InstantiationException | IllegalAccessException ignored) {
}
if (null == c) return null;
try {
logger.finer(() -> "Attempting to create value factory from class " + c.getName());
ValueFactory result = createNoArgsInstance(c);
classFactories_.put(id, result);
return result;
} catch (RuntimeException ignored) {
return null;
}
return null;
}
}
18 changes: 6 additions & 12 deletions yoko-core/src/main/java/org/apache/yoko/orb/OB/ValueReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@
import javax.rmi.CORBA.ValueHandler;
import java.io.Serializable;
import java.lang.reflect.Array;
import java.lang.reflect.InvocationTargetException;
import java.security.PrivilegedActionException;
import java.util.Hashtable;
import java.util.Map;
import java.util.Optional;
Expand All @@ -56,22 +54,22 @@
import static java.lang.Integer.toHexString;
import static java.lang.System.arraycopy;
import static java.security.AccessController.doPrivileged;
import static org.apache.yoko.util.Arrays.NO_STRINGS;
import static java.util.logging.Level.FINE;
import static java.util.logging.Level.FINER;
import static javax.rmi.CORBA.Util.createValueHandler;
import static org.apache.yoko.logging.VerboseLogging.MARSHAL_IN_LOG;
import static org.apache.yoko.orb.CORBA.TypeCodeImpl._OB_getOrigType;
import static org.apache.yoko.orb.OB.ValueReader.SettingsHolder.IGNORE_INVALID_VALUE_TAG;
import static org.apache.yoko.util.Arrays.NO_STRINGS;
import static org.apache.yoko.util.Assert.ensure;
import static org.apache.yoko.util.Assert.fail;
import static org.apache.yoko.util.Exceptions.as;
import static org.apache.yoko.util.InstanceFactory.createNoArgsInstance;
import static org.apache.yoko.util.MinorCodes.MinorNoValueFactory;
import static org.apache.yoko.util.MinorCodes.MinorReadInvalidIndirection;
import static org.apache.yoko.util.MinorCodes.describeMarshal;
import static org.apache.yoko.util.PrivilegedActions.GET_CONTEXT_CLASS_LOADER;
import static org.apache.yoko.util.PrivilegedActions.action;
import static org.apache.yoko.util.PrivilegedActions.getNoArgConstructor;
import static org.omg.CORBA.CompletionStatus.COMPLETED_NO;
import static org.omg.CORBA.TCKind.tk_abstract_interface;
import static org.omg.CORBA.TCKind.tk_value;
Expand Down Expand Up @@ -229,7 +227,7 @@ Serializable create(Header h) {
MARSHAL_IN_LOG.info(() -> "Attempting to read a value with type '" + h.ids[0] + "' into a field of type '" + clz_ + "'");

try {
result = doPrivileged(getNoArgConstructor(clz_)).newInstance();
result = createNoArgsInstance(clz_);
reader_.addInstance(h.headerPos, result);
try {
reader_.unmarshalValueState(result);
Expand All @@ -238,8 +236,7 @@ Serializable create(Header h) {
throw ex;
}
return result;
} catch (ClassCastException | PrivilegedActionException | InvocationTargetException |
InstantiationException | IllegalAccessException e) {
} catch (RuntimeException e) {
throw as(MARSHAL::new, e, describeMarshal(MinorNoValueFactory) + ": " + clz_.getName(), MinorNoValueFactory, COMPLETED_NO);
}
}
Expand Down Expand Up @@ -309,15 +306,12 @@ private BoxedValueHelper getBoxedHelper(String id) {
if (WStringValueHelper.id().equals(id)) return new WStringValueHelper();

final Class<? extends BoxedValueHelper> helperClass = RepIds.query(id).suffix("Helper").toClass();

try {
if (helperClass != null) return doPrivileged(getNoArgConstructor(helperClass)).newInstance();
} catch (ClassCastException | PrivilegedActionException | InvocationTargetException | InstantiationException | IllegalAccessException ex) {
return createNoArgsInstance(helperClass);
} catch (RuntimeException ex) {
String msg = describeMarshal(MinorNoValueFactory) + ": invalid BoxedValueHelper for " + id;
throw as(MARSHAL::new, ex, msg, MinorNoValueFactory, COMPLETED_NO);
}

return null;
}

Serializable create(Header h) {
Expand Down
18 changes: 7 additions & 11 deletions yoko-core/src/main/java/org/apache/yoko/orb/OB/ValueWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.apache.yoko.orb.CORBA.YokoOutputStream;
import org.apache.yoko.osgi.ProviderLocator;
import org.apache.yoko.util.Assert;
import org.apache.yoko.util.InstanceFactory.CannotInstantiateException;
import org.apache.yoko.util.cmsf.RepIds;
import org.omg.CORBA.CustomMarshal;
import org.omg.CORBA.MARSHAL;
Expand All @@ -36,21 +37,19 @@

import javax.rmi.CORBA.ValueHandler;
import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.security.PrivilegedActionException;
import java.util.Arrays;
import java.util.Hashtable;
import java.util.IdentityHashMap;

import static java.security.AccessController.doPrivileged;
import static javax.rmi.CORBA.Util.createValueHandler;
import static javax.rmi.CORBA.Util.getCodebase;
import static org.apache.yoko.util.Arrays.NO_STRINGS;
import static org.apache.yoko.orb.CORBA.TypeCodeImpl._OB_getOrigType;
import static org.apache.yoko.util.Arrays.NO_STRINGS;
import static org.apache.yoko.util.InstanceFactory.createNoArgsInstance;
import static org.apache.yoko.util.MinorCodes.MinorNoValueFactory;
import static org.apache.yoko.util.MinorCodes.describeMarshal;
import static org.apache.yoko.util.PrivilegedActions.GET_CONTEXT_CLASS_LOADER;
import static org.apache.yoko.util.PrivilegedActions.getNoArgConstructor;
import static org.omg.CORBA.CompletionStatus.COMPLETED_NO;
import static org.omg.CORBA.TCKind._tk_string;

Expand Down Expand Up @@ -208,14 +207,11 @@ private BoxedValueHelper getHelper(Serializable value, TypeCode type) {
//
// Instantiate the Helper
//
if (helperClass != null) {
try {
return doPrivileged(getNoArgConstructor(helperClass)).newInstance();
} catch (PrivilegedActionException | InvocationTargetException | InstantiationException | IllegalAccessException ignored) {
}
try {
return createNoArgsInstance(helperClass);
} catch (CannotInstantiateException ignored) {
return null;
}

return null;
}

private BoxedValueHelper fastPathStringBoxHelper(TypeCode type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@
import org.apache.yoko.orb.CORBA.ORBPolicyFactory_impl;
import org.apache.yoko.orb.CORBA.ORBPolicyManager_impl;
import org.apache.yoko.orb.CORBA.ORBSingleton;
import org.apache.yoko.orb.CORBA.YokoOutputStream;
import org.apache.yoko.orb.CORBA.PolicyMap;
import org.apache.yoko.orb.CORBA.YokoOutputStream;
import org.apache.yoko.orb.DynamicAny.DynAnyFactory_impl;
import org.apache.yoko.orb.IOP.CodecFactory_impl;
import org.apache.yoko.orb.Messaging.RebindPolicy_impl;
Expand Down Expand Up @@ -188,10 +188,8 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.PrivilegedActionException;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
Expand All @@ -202,16 +200,16 @@
import static java.security.AccessController.doPrivileged;
import static java.util.logging.Level.SEVERE;
import static java.util.logging.Level.WARNING;
import static org.apache.yoko.util.Arrays.EMPTY_INTS;
import static org.apache.yoko.util.Arrays.emptyArray;
import static org.apache.yoko.util.Arrays.NO_STRINGS;
import static org.apache.yoko.logging.VerboseLogging.INIT_LOG;
import static org.apache.yoko.logging.VerboseLogging.SHUTDOWN_LOG;
import static org.apache.yoko.orb.OB.CodeSetInfo.UTF_16;
import static org.apache.yoko.orb.OB.CodeSetInfo.UTF_8;
import static org.apache.yoko.util.Arrays.EMPTY_INTS;
import static org.apache.yoko.util.Arrays.NO_STRINGS;
import static org.apache.yoko.util.Arrays.emptyArray;
import static org.apache.yoko.util.InstanceFactory.createNoArgsInstance;
import static org.apache.yoko.util.PrivilegedActions.GET_CONTEXT_CLASS_LOADER;
import static org.apache.yoko.util.PrivilegedActions.GET_SYSPROPS_OR_EMPTY_MAP;
import static org.apache.yoko.util.PrivilegedActions.getNoArgConstructor;

// This class must be public and not final
public class ORB_impl extends ORBSingleton {
Expand Down Expand Up @@ -790,12 +788,12 @@ private void instantiateORBInitializers(Properties properties) {
// get the appropriate class for the loading.
ClassLoader loader = doPrivileged(GET_CONTEXT_CLASS_LOADER);
final Class<? extends ORBInitializer> initClass = ProviderLocator.loadClass(className, getClass(), loader);
initializers.put(className, doPrivileged(getNoArgConstructor(initClass)).newInstance());
initializers.put(className, createNoArgsInstance(initClass));
}
// Exceptions have to be ignored here
catch (ClassNotFoundException e) {
INIT_LOG.log(WARNING, e, () -> "ORB.init: initializer class " + className + " not found");
} catch (PrivilegedActionException | InvocationTargetException | InstantiationException | IllegalAccessException e) {
} catch (RuntimeException e) {
INIT_LOG.log(WARNING, e, () -> "ORB.init: error occurred while instantiating initializer class " + className);
}
}
Expand Down
7 changes: 3 additions & 4 deletions yoko-core/src/main/java/org/apache/yoko/orb/OCI/iiop.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@
import java.util.stream.Stream;

import static java.security.AccessController.doPrivileged;
import static org.apache.yoko.util.InstanceFactory.createNoArgsInstance;
import static org.apache.yoko.util.PrivilegedActions.GET_CONTEXT_CLASS_LOADER;
import static org.apache.yoko.util.PrivilegedActions.getNoArgConstructor;

public class iiop implements PluginInit {
static final Logger logger = Logger.getLogger(iiop.class.getName());
Expand Down Expand Up @@ -67,9 +67,8 @@ public Plugin init(ORB orb, StringSeqHolder args) {

try {
// get the appropriate class for the loading.
Class<?> c = ProviderLocator.loadClass(connectionHelper, getClass(), doPrivileged(GET_CONTEXT_CLASS_LOADER));
UnifiedConnectionHelper connectionHelper = ((UnifiedConnectionHelperProvider)doPrivileged(getNoArgConstructor(c)).newInstance())
.getUnifiedConnectionHelper();
Class<? extends UnifiedConnectionHelperProvider> c = ProviderLocator.loadClass(connectionHelper, getClass(), doPrivileged(GET_CONTEXT_CLASS_LOADER));
UnifiedConnectionHelper connectionHelper = createNoArgsInstance(c).getUnifiedConnectionHelper();
connectionHelper.init(orb, helperArgs);
return new Plugin_impl(orb, connectionHelper);
} catch (AssertionFailed|INITIALIZE e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2022 IBM Corporation and others.
* Copyright 2026 IBM Corporation and others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -23,8 +23,8 @@
import javax.security.auth.login.LoginException;

import static java.security.AccessController.doPrivileged;
import static org.apache.yoko.util.InstanceFactory.createNoArgsInstance;
import static org.apache.yoko.util.PrivilegedActions.GET_CONTEXT_CLASS_LOADER;
import static org.apache.yoko.util.PrivilegedActions.getNoArgConstructor;
import static org.apache.yoko.util.PrivilegedActions.getSysProp;

public abstract class SecurityContext {
Expand All @@ -49,7 +49,7 @@ private static SecurityContextDelegate allocateDelegate() {

try {
Class<? extends SecurityContextDelegate> c = ProviderLocator.loadClass(className, SecurityContext.class, doPrivileged(GET_CONTEXT_CLASS_LOADER));
return doPrivileged(getNoArgConstructor(c)).newInstance();
return createNoArgsInstance(c);
} catch (Exception e) {
throw new InternalError("unable to attach to SecurityContext", e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,14 @@ final class FVDUncustomizableValueDescriptor extends FVDValueDescriptor {

@Override
boolean isExternalizable() { return false; }

@Override
MethodHandle genReadObjectHandle() { return null; }

@Override
Function<Serializable, Serializable> genReadResolver() { return identity(); }

@Override
MethodHandle genWriteObjectHandle() { return null; }

@Override
Function<Serializable, Serializable> genWriteReplacer() { return identity(); }

@Override
Serializable createBlankInstance() { return null; }
Supplier<Serializable> genBlankInstanceSupplier() { return NULL_SERIALIZABLE_SUPPLIER; }
}
Loading
Loading