示例#1
1
  protected PsmMethodAction(Class c, String m, Class[] argArray) {
    // This prevents IllegalAccessExceptions when attempting to
    // invoke methods on a class that is in another package and not
    // defined 'public'.
    if (!Modifier.isPublic(c.getModifiers())) {
      throw new IllegalPsmMethodActionException("Action class must be public.");
    }

    try {
      method = c.getMethod(m, argArray);
    } catch (NoSuchMethodException ex) {
      throw new IllegalPsmMethodActionException(ex.toString() + ": method " + m);
    }

    // Check each exception this method declares thrown.  If it declares
    // exceptions, and any of them are not runtime exceptions, abort.
    Class[] exceptionTypes = method.getExceptionTypes();
    for (int i = 0; i < exceptionTypes.length; i++) {
      Class exceptionClass = exceptionTypes[i];
      if (!RuntimeException.class.isAssignableFrom(exceptionClass)) {
        throw new IllegalPsmMethodActionException(
            "Method must not declare non-Runtime " + "exceptions.");
      }
    }

    // Ensure that the method returns PsmEvent
    if (PsmEvent.class != method.getReturnType()) {
      throw new IllegalPsmMethodActionException("Method return type must be PsmEvent");
    }

    // Ensure that both the method is both public and static.
    if (!Modifier.isStatic(method.getModifiers()) || !Modifier.isPublic(method.getModifiers())) {
      throw new IllegalPsmMethodActionException("Method " + m + " must be static and public.");
    }
  }
 /**
  * Builds a new page stream transform using the given PDF operator processors (represented by
  * their class) to process the given PDF operators (represented by their operator string), and
  * imposing a default of {@link SimpleOperatorProcessor} for all others.
  *
  * @param pdfOperatorString1 A PDF operator string.
  * @param pdfOperatorProcessor1 A PDF operator processor class for <code>pdfOperatorString1</code>
  *     .
  * @param pdfOperatorString2 A PDF operator string.
  * @param pdfOperatorProcessor2 A PDF operator processor class for <code>pdfOperatorString2</code>
  *     .
  * @throws IOException if any processing error occurs.
  * @see #PageStreamTransform(Properties)
  * @see PropUtil#fromArgs(String, String, String, String)
  * @deprecated Use {@link #PageStreamTransform(OperatorProcessorFactory, String, Class, String,
  *     Class)}.
  */
 public PageStreamTransform(
     String pdfOperatorString1,
     Class pdfOperatorProcessor1,
     String pdfOperatorString2,
     Class pdfOperatorProcessor2)
     throws IOException {
   this(
       PropUtil.fromArgs(
           pdfOperatorString1, pdfOperatorProcessor1.getName(),
           pdfOperatorString2, pdfOperatorProcessor2.getName()));
 }
 /**
  * Builds a new page stream transform using the given PDF operator processors (represented by
  * their class) to process the given PDF operators (represented by their operator string), and
  * imposing a default of {@link SimpleOperatorProcessor} for all others.
  *
  * @param factory A {@link PdfOperatorProcessor} factory.
  * @param pdfOperatorString1 A PDF operator string.
  * @param pdfOperatorProcessor1 A PDF operator processor class for <code>pdfOperatorString1</code>
  *     .
  * @param pdfOperatorString2 A PDF operator string.
  * @param pdfOperatorProcessor2 A PDF operator processor class for <code>pdfOperatorString2</code>
  *     .
  * @param pdfOperatorString3 A PDF operator string.
  * @param pdfOperatorProcessor3 A PDF operator processor class for <code>pdfOperatorString3</code>
  *     .
  * @throws IOException if any processing error occurs.
  * @see #PageStreamTransform(OperatorProcessorFactory, Properties)
  * @see PropUtil#fromArgs(String, String, String, String, String, String)
  */
 public PageStreamTransform(
     OperatorProcessorFactory factory,
     String pdfOperatorString1,
     Class pdfOperatorProcessor1,
     String pdfOperatorString2,
     Class pdfOperatorProcessor2,
     String pdfOperatorString3,
     Class pdfOperatorProcessor3)
     throws IOException {
   this(
       factory,
       PropUtil.fromArgs(
           pdfOperatorString1, pdfOperatorProcessor1.getName(),
           pdfOperatorString2, pdfOperatorProcessor2.getName(),
           pdfOperatorString3, pdfOperatorProcessor3.getName()));
 }
 /**
  * Returns an instance of the type of MBF indicated by "version" intended to verify a proof of
  * effort.
  *
  * @param nonceVal a byte array containing the nonce
  * @param eVal the effort sizer (# of low-order zeros in destination)
  * @param lVal the effort sizer (length of each path)
  * @param nVal the proof density
  * @param sVal an array of ints containing the proof
  * @param maxPathVal maximum number of steps to verify
  * @throws NoSuchAlgorithmException no such implementation
  * @throws InstantiationException XXX
  * @throws IllegalAccessException XXX
  * @throws MemoryBoundFunctionException could not initialize instance
  */
 public MemoryBoundFunction makeVerifier(
     byte[] nonceVal, int eVal, int lVal, int nVal, int[] sVal, long maxPathVal)
     throws NoSuchAlgorithmException, InstantiationException, IllegalAccessException,
         MemoryBoundFunctionException {
   MemoryBoundFunction ret = null;
   if (classToUse == null) throw new NoSuchAlgorithmException();
   ret = (MemoryBoundFunction) classToUse.newInstance();
   ret.initialize(nonceVal, eVal, lVal, nVal, sVal, maxPathVal, A0, T);
   return (ret);
 }
 /**
  * Public constructor for an object that creates MemoryBoundFunction objects of the requested
  * implementation.
  *
  * @param impl A String specifying the implementation to use.
  * @param A0array The A0 basis array
  * @param Tarray The T basis array
  * @throws NoSuchAlgorithmException if no such implementation
  */
 public MemoryBoundFunctionFactory(String impl, byte[] A0array, byte[] Tarray)
     throws NoSuchAlgorithmException, ClassNotFoundException, MemoryBoundFunctionException {
   classToUse = null;
   implToUse = null;
   for (int i = 0; i < implNames.length; i++) {
     if (implNames[i].equals(impl)) implToUse = impls[i];
   }
   if (implToUse != null) {
     // Found it
     if (A0array == null || Tarray == null) {
       throw new MemoryBoundFunctionException("Array is null");
     }
     classToUse = Class.forName(implToUse);
     logger.info("factory for " + impl + " size " + A0array.length + " / " + Tarray.length);
     A0 = A0array;
     T = Tarray;
   } else {
     throw new NoSuchAlgorithmException(impl);
   }
 }
 /**
  * Builds a new page stream transform using the given PDF operator processor (represented by its
  * class) to process the given PDF operator (represented by its operator string), and imposing a
  * default of {@link SimpleOperatorProcessor} for all others.
  *
  * @param factory A {@link PdfOperatorProcessor} factory.
  * @param pdfOperatorString A PDF operator string.
  * @param pdfOperatorProcessor A PDF operator processor class for <code>pdfOperatorString</code>..
  * @throws IOException if any processing error occurs.
  * @see #PageStreamTransform(OperatorProcessorFactory, Properties)
  * @see PropUtil#fromArgs(String, String)
  */
 public PageStreamTransform(
     OperatorProcessorFactory factory, String pdfOperatorString, Class pdfOperatorProcessor)
     throws IOException {
   this(factory, PropUtil.fromArgs(pdfOperatorString, pdfOperatorProcessor.getName()));
 }
  protected void initResultMap() throws PluginException.InvalidDefinition {
    HttpResultMap hResultMap = new HttpResultMap();
    // XXX Currently this only allows a CacheResultHandler class to
    // initialize the result map.  Instead, don't use a CacheResultMap
    // directly, use either the plugin's CacheResultHandler, if specified,
    // or a default one that wraps the CacheResultMap

    String handler_class = null;
    handler_class = definitionMap.getString(KEY_EXCEPTION_HANDLER, null);
    if (handler_class != null) {
      try {
        resultHandler = (CacheResultHandler) newAuxClass(handler_class, CacheResultHandler.class);
        resultHandler.init(hResultMap);
      } catch (Exception ex) {
        throw new PluginException.InvalidDefinition(
            mapName + " has invalid Exception handler: " + handler_class, ex);
      } catch (LinkageError le) {
        throw new PluginException.InvalidDefinition(
            mapName + " has invalid Exception handler: " + handler_class, le);
      }
    } else {
      // Expect a list of mappings from either result code or exception
      // name to CacheException name
      Collection<String> mappings = definitionMap.getCollection(KEY_EXCEPTION_LIST, null);
      if (mappings != null) {
        // add each entry
        for (String entry : mappings) {
          if (log.isDebug2()) {
            log.debug2("initMap(" + entry + ")");
          }
          String first;
          String ceName;
          try {
            List<String> pair = StringUtil.breakAt(entry, '=', 2, true, true);
            first = pair.get(0);
            ceName = pair.get(1);
          } catch (Exception ex) {
            throw new PluginException.InvalidDefinition(
                "Invalid syntax: " + entry + "in " + mapName);
          }
          Object val;

          // Value should be either a CacheException or CacheResultHandler
          // class name.
          PluginFetchEventResponse resp =
              (PluginFetchEventResponse) newAuxClass(ceName, PluginFetchEventResponse.class, null);
          if (resp instanceof CacheException) {
            val = resp.getClass();
          } else if (resp instanceof CacheResultHandler) {
            val = WrapperUtil.wrap((CacheResultHandler) resp, CacheResultHandler.class);
          } else {
            throw new PluginException.InvalidDefinition(
                "Second arg not a "
                    + "CacheException or "
                    + "CacheResultHandler class: "
                    + entry
                    + ", in "
                    + mapName);
          }
          try {
            int code = Integer.parseInt(first);
            // If parseable as an integer, it's a result code.
            hResultMap.storeMapEntry(code, val);
          } catch (NumberFormatException e) {
            try {
              Class eClass = Class.forName(first);
              // If a class name, it should be an exception class
              if (Exception.class.isAssignableFrom(eClass)) {
                hResultMap.storeMapEntry(eClass, val);
              } else {
                throw new PluginException.InvalidDefinition(
                    "First arg not an " + "Exception class: " + entry + ", in " + mapName);
              }
            } catch (Exception ex) {
              throw new PluginException.InvalidDefinition(
                  "First arg not a " + "number or class: " + entry + ", in " + mapName);
            } catch (LinkageError le) {
              throw new PluginException.InvalidDefinition("Can't load " + first, le);
            }
          }
        }
      }
    }
    resultMap = hResultMap;
  }