⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dimebodypart.java

📁 Java有关XML编程需要用到axis 的源代码 把里面bin下的包导入相应的Java工程 进行使用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright 2001-2004 The Apache Software Foundation. *  * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *  *      http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//** * @author Rick Rineholt */package org.apache.axis.attachments;import org.apache.axis.components.logger.LogFactory;import org.apache.axis.utils.Messages;import org.apache.commons.logging.Log;import javax.activation.DataHandler;import javax.activation.DataSource;import java.io.BufferedInputStream;import java.io.IOException;import java.util.StringTokenizer;/** * This class is a single part for DIME mulitpart message.<pre> DIME 1.0 format 0                   1                   2                   3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | VERSION |B|E|C| TYPE_T| OPT_T |         OPTIONS_LENGTH        | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |          ID_LENGTH          |             TYPE_LENGTH         | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |                          DATA_LENGTH                          | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |                                                               / /                       OPTIONS + PADDING                       / /                                                               | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |                                                               / /                        ID + PADDING                           / /                                                               | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |                                                               / /                        TYPE + PADDING                         / /                                                               | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |                                                               / /                        DATA + PADDING                         / /                                                               | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ </pre> *//** * Holds one attachment DIME part. */public class DimeBodyPart {    protected static Log log =        LogFactory.getLog(DimeBodyPart.class.getName());    protected Object data = null;    protected DimeTypeNameFormat dtnf = null;    protected byte[] type = null;    protected byte[] id = null;    static final byte POSITION_FIRST = (byte) 0x04;    static final  byte POSITION_LAST = (byte) 0x02;    private static final byte CHUNK = 0x01; //Means set the chunk bit    private static final byte CHUNK_NEXT = 0x2; //Means this was part of a CHUNK    private static final byte ONLY_CHUNK = -1;//Means only one chunk was sent    private static final byte LAST_CHUNK = (byte)0;//Means many chunks were sent        private static int MAX_TYPE_LENGTH = (1 << 16) - 1;    private static int MAX_ID_LENGTH = (1 << 16) - 1;    static final long MAX_DWORD = 0xffffffffL;    // fixme: don't use? is this for inheritance only? I can't find any    //  classes that extend this    protected DimeBodyPart() {} //do not use.    /**     * Create a DIME Attachment Part.     * @param data a byte array containing the data as the attachment.     * @param format the type format for the data.     * @param type the type of the data     * @param id  the ID for the DIME part.     *     */    public DimeBodyPart(byte[] data, DimeTypeNameFormat format,      String type, String id) {        System.arraycopy(data, 0, this.data = new byte[ data.length], 0, data.length);        this.dtnf = format;        this.type = type.getBytes();        if (this.type.length > MAX_TYPE_LENGTH)            throw new IllegalArgumentException(Messages.getMessage                    ("attach.dimetypeexceedsmax",                    "" + this.type.length, "" + MAX_TYPE_LENGTH));        this.id = id.getBytes();        if (this.id.length > MAX_ID_LENGTH)            throw new IllegalArgumentException(                    Messages.getMessage("attach.dimelengthexceedsmax", "" + this.id.length,                        "" + MAX_ID_LENGTH));    }    /**     * Create a DIME Attachment Part.     * @param dh the data for the attachment as a JAF datahadler.     * @param format the type format for the data.     * @param type the type of the data     * @param id  the ID for the DIME part.     *     */    public DimeBodyPart(DataHandler dh,    DimeTypeNameFormat format, String type, String id) {        this.data = dh;        this.dtnf = format;        if (type == null || type.length() == 0)            type = "application/octet-stream";        this.type = type.getBytes();        if (this.type.length > MAX_TYPE_LENGTH)            throw new IllegalArgumentException(Messages.getMessage(                        "attach.dimetypeexceedsmax",                        "" + this.type.length, "" + MAX_TYPE_LENGTH));        this.id = id.getBytes();        if (this.id.length > MAX_ID_LENGTH)            throw new IllegalArgumentException(Messages.getMessage(            "attach.dimelengthexceedsmax",            "" + this.id.length, "" + MAX_ID_LENGTH));    }    /**     * Create a DIME Attachment Part.     * @param dh the data for the attachment as a JAF datahadler.     *    The type and foramt is derived from the DataHandler.     * @param id  the ID for the DIME part.     *     */    public DimeBodyPart(DataHandler dh, String id) {        this(dh, DimeTypeNameFormat.MIME, dh.getContentType(), id);        String ct = dh.getContentType();        if (ct != null) {            ct = ct.trim();            if (ct.toLowerCase().startsWith("application/uri")) {                StringTokenizer st = new StringTokenizer(ct, " \t;");                String t = st.nextToken(" \t;");                if (t.equalsIgnoreCase("application/uri")) {                    for (; st.hasMoreTokens();) {                        t = st.nextToken(" \t;");                        if (t.equalsIgnoreCase("uri")) {                            t = st.nextToken("=");                            if (t != null) {                                t = t.trim();                                if (t.startsWith("\"")) t =                                  t.substring(1);                                if (t.endsWith("\"")) t =                                  t.substring(0, t.length() - 1);                                this.type = t.getBytes();                                this.dtnf = DimeTypeNameFormat.URI;                            }                            return;                        } else if (t.equalsIgnoreCase("uri=")) {                            t = st.nextToken(" \t;");                            if (null != t && t.length() != 0) {                                t = t.trim();                                if (t.startsWith("\"")) t=                                  t.substring(1);                                if (t.endsWith("\"")) t=                                  t.substring(0, t.length() - 1);                                this.type = t.getBytes();                                this.dtnf = DimeTypeNameFormat.URI;                                return;                            }                        } else if (t.toLowerCase().startsWith("uri=")) {                            if (-1 != t.indexOf('=')) {                                t = t.substring(t.indexOf('=')).trim();                                if (t.length() != 0) {                                    t = t.trim();                                    if (t.startsWith("\"")) t =                                      t.substring(1);                                    if (t.endsWith("\""))                                     t = t.substring(0, t.length() - 1);                                    this.type = t.getBytes();                                    this.dtnf = DimeTypeNameFormat.URI;                                    return;                                }                            }                        }                    }                }            }        }    }    /**     * Write to stream the data using maxchunk for the largest junk.     *     * @param os        the <code>OutputStream</code> to write to     * @param position  the position to write     * @param maxchunk  the maximum length of any one chunk     * @throws IOException if there was a problem writing data to the stream     */    void write(java.io.OutputStream os, byte position, long maxchunk)      throws java.io.IOException {        if (maxchunk < 1) throw new IllegalArgumentException(                    Messages.getMessage("attach.dimeMaxChunkSize0", "" + maxchunk));        if (maxchunk > MAX_DWORD) throw new IllegalArgumentException(                    Messages.getMessage("attach.dimeMaxChunkSize1", "" + maxchunk));        if (data instanceof byte[]) {            send(os, position, (byte[]) data, maxchunk);        } else if (data instanceof DynamicContentDataHandler) {            send(os, position, (DynamicContentDataHandler) data, maxchunk);        } else if (data instanceof DataHandler) {            DataSource source = ((DataHandler)data).getDataSource();            DynamicContentDataHandler dh2 = new DynamicContentDataHandler(source);            send(os, position, dh2, maxchunk);        }    }    /**     * Write to stream the data using the default largest chunk size.     *     * @param os  the <code>OutputStream</code> to write to     * @param position  the position to write     * @throws IOException if there was a problem writing data to the stream     */    void write(java.io.OutputStream os, byte position)      throws java.io.IOException {        write(os, position, MAX_DWORD);    }    private static final byte[] pad = new byte[4];    void send(java.io.OutputStream os, byte position, byte[] data,        final long maxchunk)throws java.io.IOException {        send(os, position, data, 0, data.length, maxchunk);    }    void send(java.io.OutputStream os, byte position, byte[] data,        int offset, final int length, final long maxchunk)        throws java.io.IOException {        byte chunknext = 0;        do {            int sendlength = (int) Math.min(maxchunk, length - offset);            sendChunk(os, position, data, offset, sendlength, (byte)                ((sendlength < (length - offset) ? CHUNK : 0)                 | chunknext));            offset += sendlength;            chunknext = CHUNK_NEXT;        }        while (offset < length);    }    void send(java.io.OutputStream os, byte position, DataHandler dh,        final long maxchunk) throws java.io.IOException {        java.io.InputStream in = null;        try {            long dataSize = getDataSize();            in = dh.getInputStream();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -