# Class Provider.Service

java.lang.Object
java.security.Provider.Service

Enclosing class:
  `Provider`

public static class Provider.Service extends Object
The description of a security service. It encapsulates the properties of a service and contains a factory method to obtain new implementation instances of this service.

Each service has a provider that offers the service, a type, an algorithm name, and the name of the class that implements the service. Optionally, it also includes a list of alternate algorithm names for this service (aliases) and attributes, which are a map of (name, value) `String` pairs.

This class defines the methods `supportsParameter()` and `newInstance()` which are used by the Java security framework when it searches for suitable services and instantiates them. The valid arguments to those methods depend on the type of service. For the service types defined within Java SE, see the Java Cryptography Architecture (JCA) Reference Guide for the valid values. Note that components outside of Java SE can define additional types of services and their behavior.

Instances of this class are immutable.

Since:
  1.5

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Service(Provider provider, String type, String algorithm, String className, List<String> aliases, Map<String,String> attributes)`
  Construct a new service.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `final String`
  `getAlgorithm()`
  Return the name of the algorithm of this service.
  `final String`
  `getAttribute(String name)`
  Return the value of the specified attribute or `null` if this attribute is not set for this Service.
  `final String`
  `getClassName()`
  Return the name of the class implementing this service.
  `final Provider`
  `getProvider()`
  Return the Provider of this service.
  `final String`
  `getType()`
  Get the type of this service.
  `Object`
  `newInstance(Object constructorParameter)`
  Return a new instance of the implementation described by this service.
  `boolean`
  `supportsParameter(Object parameter)`
  Test whether this Service can use the specified parameter.
  `String`
  `toString()`
  Return a `String` representation of this service.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### Service

    public Service(Provider provider, String type, String algorithm, String className, List<String> aliases, Map<String,String> attributes)
    Construct a new service.
    Parameters:
      `provider` - the provider that offers this service
      `type` - the type of this service
      `algorithm` - the algorithm name
      `className` - the name of the class implementing this service
      `aliases` - List of aliases or `null` if algorithm has no aliases
      `attributes` - Map of attributes or `null` if this implementation has no attributes
    Throws:
      `NullPointerException` - if provider, type, algorithm, or className is `null`

- ## Method Details

  - ### getType

    public final String getType()
    Get the type of this service. For example, `MessageDigest`.
    Returns:
      the type of this service

  - ### getAlgorithm

    public final String getAlgorithm()
    Return the name of the algorithm of this service. For example, `SHA-1`.
    Returns:
      the algorithm of this service

  - ### getProvider

    public final Provider getProvider()
    Return the Provider of this service.
    Returns:
      the Provider of this service

  - ### getClassName

    public final String getClassName()
    Return the name of the class implementing this service.
    Returns:
      the name of the class implementing this service

  - ### getAttribute

    public final String getAttribute(String name)
    Return the value of the specified attribute or `null` if this attribute is not set for this Service.
    Parameters:
      `name` - the name of the requested attribute
    Returns:
      the value of the specified attribute or `null` if the attribute is not present
    Throws:
      `NullPointerException` - if name is `null`

  - ### newInstance

    public Object newInstance(Object constructorParameter) throws NoSuchAlgorithmException
    Return a new instance of the implementation described by this service. The security provider framework uses this method to construct implementations. Applications will typically not need to call it.

    The default implementation uses reflection to invoke the standard constructor for this type of service. Security providers can override this method to implement instantiation in a different way. For details and the values of constructorParameter that are valid for the various types of services see the Java Cryptography Architecture (JCA) Reference Guide.

    Parameters:
      `constructorParameter` - the value to pass to the constructor, or `null` if this type of service does not use a constructorParameter.
    Returns:
      a new implementation of this service
    Throws:
      `InvalidParameterException` - if the value of constructorParameter is invalid for this type of service.
      `NoSuchAlgorithmException` - if instantiation failed for any other reason.

  - ### supportsParameter

    public boolean supportsParameter(Object parameter)
    Test whether this Service can use the specified parameter. Returns `false` if this service cannot use the parameter. Returns `true` if this service can use the parameter, if a fast test is infeasible, or if the status is unknown.

    The security provider framework uses this method with some types of services to quickly exclude non-matching implementations for consideration. Applications will typically not need to call it.

    For details and the values of parameter that are valid for the various types of services see the top of this class and the Java Cryptography Architecture (JCA) Reference Guide. Security providers can override it to implement their own test.

    Parameters:
      `parameter` - the parameter to test
    Returns:
      `false` if this service cannot use the specified parameter; `true` if it can possibly use the parameter
    Throws:
      `InvalidParameterException` - if the value of parameter is invalid for this type of service or if this method cannot be used with this type of service

  - ### toString

    public String toString()
    Return a `String` representation of this service.
    Overrides:
      `toString` in class `Object`
    Returns:
      a `String` representation of this service.