Class ManifestWriter

java.lang.Object
org.apache.felix.bundleplugin.ManifestWriter

public class ManifestWriter extends Object
  • Field Details

    • CONTINUE

      private static final byte[] CONTINUE
      Unfortunately we have to write our own manifest :-( because of a stupid bug in the manifest code. It tries to handle UTF-8 but the way it does it it makes the bytes platform dependent. So the following code outputs the manifest. A Manifest consists of
         'Manifest-Version: 1.0\r\n'
         main-attributes *
         \r\n
         name-section
      
         main-attributes ::= attributes
         attributes      ::= key ': ' value '\r\n'
         name-section    ::= 'Name: ' name '\r\n' attributes
       
      Lines in the manifest should not exceed 72 bytes (! this is where the manifest screwed up as well when 16 bit unicodes were used).

      As a bonus, we can now sort the manifest!

    • NICE_HEADERS

      private static final Set<String> NICE_HEADERS
  • Constructor Details

    • ManifestWriter

      public ManifestWriter()
  • Method Details

    • outputManifest

      public static void outputManifest(Manifest manifest, OutputStream out, boolean nice) throws IOException
      Main function to output a manifest properly in UTF-8.
      Parameters:
      manifest - The manifest to output
      out - The output stream
      Throws:
      IOException - when something fails
    • writeEntry

      private static void writeEntry(OutputStream out, String name, String value, boolean nice) throws IOException
      Write out an entry, handling proper unicode and line length constraints
      Throws:
      IOException
    • write

      private static int write(OutputStream out, int i, String s) throws IOException
      Convert a string to bytes with UTF8 and then output in max 72 bytes
      Parameters:
      out - the output string
      i - the current width
      s - the string to output
      Returns:
      the new width
      Throws:
      IOException - when something fails
    • write

      private static int write(OutputStream out, int width, byte[] bytes) throws IOException
      Write the bytes but ensure that the line length does not exceed 72 characters. If it is more than 70 characters, we just put a cr/lf + space.
      Parameters:
      out - The output stream
      width - The nr of characters output in a line before this method started
      bytes - the bytes to output
      Returns:
      the nr of characters in the last line
      Throws:
      IOException - if something fails
    • attributes

      private static void attributes(Attributes value, OutputStream out, boolean nice) throws IOException
      Output an Attributes map. We will sort this map before outputing.
      Parameters:
      value - the attrbutes
      out - the output stream
      Throws:
      IOException - when something fails