/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.internal.oxm; import javax.activation.DataSource; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStreamReader; /** * INTERNAL: * @author mmacivor */ public class ByteArrayDataSource implements DataSource { String contentType; byte[] bytes; public ByteArrayDataSource(byte[] data, String mimeType) { this.contentType = mimeType; bytes = data; } public String getName() { return ""; } public java.io.OutputStream getOutputStream() { return new ByteArrayOutputStream(bytes.length); } public java.io.InputStream getInputStream() { return new ByteArrayInputStream(bytes); } public String getContentType() { if(contentType.startsWith("multipart") && contentType.indexOf("boundary") == -1) { //parse the bytes for the header and extract the boundary. Add it into the content type. StringBuilder buffer = new StringBuilder(); InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(bytes)); while(true) { try { int next = reader.read(); if(next == -1) { break; } else if(((char)next) == '\n') { if(!(buffer.length() == 0)) { break; } } else { buffer.append((char)next); } } catch(Exception ex) {} } //buffer should contain the header string here. int index = buffer.indexOf("boundary"); if(index != -1) { contentType += ";" + buffer.substring(index); } } return contentType; } }