예제 #1
0
 /** Initializes the output. Sets the expected encoding and content type. */
 public void initResponse() {
   // set content type and encoding
   final SerializerOptions opts = sopts();
   final String enc = opts.get(SerializerOptions.ENCODING);
   res.setCharacterEncoding(enc);
   final String ct = mediaType(opts);
   res.setContentType(new TokenBuilder(ct).add(CHARSET).add(enc).toString());
 }
예제 #2
0
 /**
  * Runs a query and checks the serialization parameters.
  *
  * @throws IOException I/O exception
  */
 @Test
 public void queryOptions() throws IOException {
   final Query query = session.query("declare option output:encoding 'US-ASCII';()");
   query.execute();
   final SerializerOptions sp = new SerializerOptions();
   sp.parse(query.options());
   assertEquals("US-ASCII", sp.get(SerializerOptions.ENCODING));
   query.close();
 }
예제 #3
0
  /**
   * Returns the media type defined in the specified serialization parameters.
   *
   * @param sopts serialization parameters
   * @return media type
   */
  public static String mediaType(final SerializerOptions sopts) {
    // set content type
    final String type = sopts.get(SerializerOptions.MEDIA_TYPE);
    if (!type.isEmpty()) return type;

    // determine content type dependent on output method
    final SerialMethod sm = sopts.get(SerializerOptions.METHOD);
    if (sm == SerialMethod.RAW) return APP_OCTET;
    if (sm == SerialMethod.XML) return APP_XML;
    if (sm == SerialMethod.XHTML || sm == SerialMethod.HTML) return TEXT_HTML;
    if (sm == SerialMethod.JSON) {
      final JsonSerialOptions jprop = sopts.get(SerializerOptions.JSON);
      return jprop.get(JsonOptions.FORMAT) == JsonFormat.JSONML ? APP_JSONML : APP_JSON;
    }
    return TEXT_PLAIN;
  }
예제 #4
0
  /**
   * Constructor.
   *
   * @param os output stream
   * @param sopts serializer options
   * @throws QueryIOException query I/O exception
   */
  protected OutputSerializer(final OutputStream os, final SerializerOptions sopts)
      throws QueryIOException {

    this.sopts = sopts;
    indent = sopts.yes(INDENT);

    // project-specific options
    indents = sopts.get(INDENTS);
    tab = sopts.yes(TABULATOR) ? '\t' : ' ';

    encoding = Strings.normEncoding(sopts.get(ENCODING), true);
    PrintOutput po;
    if (encoding == Strings.UTF8) {
      po = PrintOutput.get(os);
    } else {
      try {
        po = new EncoderOutput(os, Charset.forName(encoding));
      } catch (final Exception ex) {
        throw SERENCODING_X.getIO(encoding);
      }
    }
    final int limit = sopts.get(LIMIT);
    if (limit != -1) po.setLimit(limit);

    final byte[] nl = token(sopts.get(NEWLINE).newline());
    if (nl.length != 1 || nl[0] != '\n') po = new NewlineOutput(po, nl);
    out = po;
  }
예제 #5
0
 /** Creates the database context. */
 @BeforeClass
 public static void start() {
   // turn off pretty printing
   set(MainOptions.SERIALIZER, SerializerOptions.get(false));
 }
예제 #6
0
 /**
  * Sets the item separator.
  *
  * @param def default separator
  */
 protected final void itemsep(final String def) {
   final String is = sopts.get(ITEM_SEPARATOR);
   itemsep = sopts.contains(ITEM_SEPARATOR) ? token(is) : def == null ? null : token(def);
 }