All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.xml.ws.util.MessageWriter Maven / Gradle / Ivy

/*
 * Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Distribution License v. 1.0, which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

package com.sun.xml.ws.util;

import java.io.FilterWriter;
import java.io.IOException;
import java.io.Writer;

/**
 * Filter suppressing sending binary data to the underlying stream.
 * Methods in this filter throw {@link UtilException} if the {@code limit}
 * number of bytes was already written to given {@code out}.
 */
public final class MessageWriter extends FilterWriter {

    private boolean filtering;
    private boolean notPrinted;
    private boolean headers;
    private int size;
    private int limit;

    /**
     * Create a new filtered writer.
     *
     * @param out a Writer object to provide the underlying stream.
     * @param limit max number of bytes to send to {@code out}
     * @throws NullPointerException if {@code out} is {@code null}
     */
    public MessageWriter(Writer out, int limit) {
        super(out);
        filtering = false;
        notPrinted = true;
        headers = false;
        size = 0;
        this.limit = limit;
    }

    public void println(Object o) throws IOException {
        write(o.toString());
    }

    public void println(String str) throws IOException {
        write(str);
    }

    public void println() throws IOException {
        write("\n");
    }

    @Override
    public void write(String str) throws IOException {
        if (!headers) {
            if (str.startsWith("--")) {
                headers = true;
                filtering = false;
                notPrinted = true;
            }
        }

        if (headers) {
            if (str.contains("Content-Type: ")) {
                String ct = str.toLowerCase();
                if (ct.contains("image/") || ct.contains("/octet-stream") || ct.contains("fastinfoset")) {
                    filtering = true;
                }
            } else if (str.toLowerCase().contains("content-transfer-encoding: binary")) {
                filtering = true;
            }
            if (str.trim().isEmpty()) {
                headers = false;
            }
        }

        if (!headers && filtering) {
            if (notPrinted) {
                notPrinted = false;
                super.write("\n...binary data...");
                super.write("\n");
                size += 18;
            }
        } else {
            if (size + str.length() >= limit) {
                super.write(str.substring(0, limit - size));
                super.write("\n");
                throw new UtilException(new IOException("large input"));
            }
            size += str.length();
            super.write(str);
            super.write("\n");
        }
        flush();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy