All Superinterfaces:
RuntimeType.Api<ResourceConfig>

public interface Resource extends RuntimeType.Api<ResourceConfig>
A representation of a resource that can be loaded from URL (create(URI)), classpath (create(String)), filesystem (create(Path), content in config (create(Config), input stream(create(String, InputStream), or direct value (create(String, byte[]), create(String, String).

The resource bytes can then be accessed by various methods, depending on the type required - either you can access bytes (bytes(), stream()) or String (string(), string(Charset)).

This class is not thread safe. If you want to use it across multiple threads, there is an option: call cacheBytes() before accessing it by other threads. Note that this stores all the bytes in memory, so use with care!!!

  • Method Details

    • create

      static Resource create(URI uri)
      Load resource from URI provided. Note that the loading is lazy - this method opens the stream, but byte are ready only once you call bytes() and other content retrieval-methods.
      Parameters:
      uri - Resource location
      Returns:
      resource instance
    • create

      static Resource create(URI uri, Proxy proxy)
      Load resource from URI provided with an explicit proxy server. Note that the loading is lazy - this method opens the stream, but byte are ready only once you call bytes() and other content retrieval-methods.
      Parameters:
      uri - Resource location
      proxy - HTTP proxy to use when accessing the URI
      Returns:
      resource instance
    • create

      static Resource create(String resourcePath)
      Load resource from classpath. Note that the loading is lazy - this method opens the stream, but byte are ready only once you call bytes() and other content retrieval-methods.
      Parameters:
      resourcePath - classpath path
      Returns:
      resource instance
    • create

      static Resource create(Path fsPath)
      Load resource from file system. Note that the loading is lazy - this method opens the stream, but byte are ready only once you call bytes() and other content retrieval-methods.
      Parameters:
      fsPath - path of file system
      Returns:
      resource instance
    • create

      static Resource create(String description, byte[] bytes)
      Load resource from binary content.
      Parameters:
      description - description of this resource (e.g. "keystore")
      bytes - raw bytes of this resource
      Returns:
      resource instance
    • create

      static Resource create(String description, String string)
      Load resource from text content (e.g. this must not be base64 - use create(String, byte[]) for binary).
      Parameters:
      description - description of this resource (e.g. "JWK-private")
      string - string content of this resource, will be transformed to bytes using UTF-8 encoding
      Returns:
      resource instance
    • create

      static Resource create(String description, InputStream inputStream)
      Load resource from binary content from an input stream, using Resource.Source.UNKNOWN type.
      Parameters:
      description - description of this resource (e.g. "keystore")
      inputStream - input stream to raw bytes of this resource
      Returns:
      resource instance
    • create

      static Resource create(ResourceConfig config)
      Create resource from its configuration.
      Parameters:
      config - resource configuration
      Returns:
      a new resource based on its configuration
    • create

      static Resource create(Consumer<ResourceConfig.Builder> consumer)
      Create a new resource, updating its configuration.
      Parameters:
      consumer - of resource configuration builder
      Returns:
      a new resource
    • builder

      static ResourceConfig.Builder builder()
      Create a new builder to create a resource.
      Returns:
      a new builder
    • create

      static Resource create(Config config)
      Loads the resource from appropriate location based on configuration.
      Parameters:
      config - configuration current node must be the node containing the location of the resource, by convention in helidon, this should be on key named resource
      Returns:
      a resource ready to load from one of the locations
      Throws:
      ConfigException - in case this config does not define a resource configuration
    • stream

      InputStream stream()
      Get an input stream to this resource. If this method is called first, you actually get "THE" stream to the resource and there will be no buffering done. Once this happens, you cannot call any other method on this instance. If you create the resource with byte content (e.g. from string), the content will be pre-buffered.

      If you first call another method (such as bytes(), or explicitly buffer this resource cacheBytes(), you will get a new input stream to the buffered bytes and may call this method multiple times.

      Returns:
      input stream ready to read bytes
      Throws:
      IllegalStateException - in case the stream was already provided in previous call and was not buffered
    • bytes

      byte[] bytes()
      Get bytes of this resource. Buffers the resource bytes in memory.
      Returns:
      bytes of this resource
      Throws:
      IllegalStateException - in case the stream was already provided in previous call and was not buffered
    • string

      String string()
      Get string content of this resource. Buffers the resource bytes in memory.
      Returns:
      string content of this instance, using UTF-8 encoding to decode bytes
      Throws:
      IllegalStateException - in case the stream was already provided in previous call and was not buffered
    • string

      String string(Charset charset)
      Get string content of this resource. Buffers the resource bytes in memory.
      Parameters:
      charset - Character set (encoding) to use to decode bytes
      Returns:
      string content of this instance, using your encoding to decode bytes
      Throws:
      IllegalStateException - in case the stream was already provided in previous call and was not buffered
    • sourceType

      Resource.Source sourceType()
      Type of this resource, depends on the original source.
      Returns:
      type
    • location

      String location()
      Location (or description) of this resource, depends on original source. Depending on source, this may be:
      Returns:
      location of this resource (or other description of where it comes from)
    • cacheBytes

      void cacheBytes()
      Caches the resource bytes in memory, so they can be repeatedly accessed. Be VERY careful with all methods that cache the bytes, as this may cause a memory issue!