| /* |
| * Copyright (c) 1998, 2021 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 v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0, |
| * or the Eclipse Distribution License v. 1.0 which is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause |
| */ |
| |
| // Contributors: |
| // Mike Norman - May 06 2008, created DBWS tools package |
| |
| package org.eclipse.persistence.tools.dbws; |
| |
| import static java.util.jar.Attributes.Name.MANIFEST_VERSION; |
| //EclipseLink imports |
| import static org.eclipse.persistence.internal.xr.Util.DBWS_OR_XML; |
| import static org.eclipse.persistence.internal.xr.Util.DBWS_OX_XML; |
| import static org.eclipse.persistence.internal.xr.Util.DBWS_SCHEMA_XML; |
| import static org.eclipse.persistence.internal.xr.Util.DBWS_SERVICE_XML; |
| import static org.eclipse.persistence.internal.xr.Util.DBWS_SESSIONS_XML; |
| import static org.eclipse.persistence.internal.xr.Util.META_INF_PATHS; |
| import static org.eclipse.persistence.internal.xr.Util.WSDL_DIR; |
| import static org.eclipse.persistence.tools.dbws.Util.SWAREF_FILENAME; |
| |
| //javase imports |
| import java.io.BufferedOutputStream; |
| import java.io.ByteArrayInputStream; |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.FileOutputStream; |
| import java.util.jar.JarEntry; |
| import java.util.jar.JarFile; |
| import java.util.jar.JarOutputStream; |
| import java.util.jar.Manifest; |
| import java.util.zip.ZipEntry; |
| |
| /** |
| * <p> |
| * <b>INTERNAL:</b> JarArchiver implements the {@link DBWSPackager.Archiver} interface. <br> |
| * This helper class takes the files generated by a DBWSPackager and puts them into an archive,<br> |
| * in this case, a <code>.jar</code> file. |
| * |
| * <pre> |
| * Jar-file layout |
| * \ |
| * | eclipselink-dbws-schema.xsd |
| * | swaref.xsd -- optional if attachements are enabled |
| * \---META-INF |
| * | eclipselink-dbws-or.xml |
| * | eclipselink-dbws-ox.xml |
| * | eclipselink-dbws-sessions.xml |
| * | eclipselink-dbws.xml |
| * </pre> |
| * @author Mike Norman - michael.norman@oracle.com |
| * @since EclipseLink 1.x |
| */ |
| public class JarArchiver implements DBWSPackager.Archiver { |
| |
| static final int BUF_SIZE = 1024; |
| static final String DEFAULT_JAR_FILENAME = "dbws.jar"; |
| static final String DEFAULT_MANIFEST = |
| MANIFEST_VERSION.toString() + ": 1.0\n" + |
| "Created-by: DBWSBuilder 1.0\n\n"; |
| |
| protected DBWSPackager packager; |
| protected String jarFilename = null; |
| protected JarOutputStream jarOutputStream = null; |
| protected File f; |
| protected FileInputStream fis; |
| protected byte[] buffer = new byte[BUF_SIZE]; |
| |
| public JarArchiver() { |
| } |
| public JarArchiver(DBWSPackager packager) { |
| this.packager = packager; |
| } |
| |
| @Override |
| public DBWSPackager getPackager() { |
| return packager; |
| } |
| @Override |
| public void setPackager(DBWSPackager packager) { |
| this.packager = packager; |
| } |
| |
| @Override |
| public String getFilename() { |
| return jarFilename; |
| } |
| @Override |
| public void setFilename(String jarFilename) { |
| if (!(jarFilename.endsWith(".jar"))) { |
| jarFilename += ".jar"; |
| } |
| this.jarFilename = jarFilename; |
| } |
| |
| @Override |
| public void archive() { |
| try { |
| JarOutputStream jarOutputStream = buildJarOutputStream(); |
| if (jarOutputStream != null) { |
| Manifest manifest = buildManifest(); |
| if (manifest != null) { |
| ZipEntry e = new ZipEntry(JarFile.MANIFEST_NAME); |
| jarOutputStream.putNextEntry(e); |
| manifest.write(new BufferedOutputStream(jarOutputStream)); |
| jarOutputStream.closeEntry(); |
| } |
| addFilesToJarOutputStream(jarOutputStream); |
| jarOutputStream.close(); |
| } |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| protected Manifest buildManifest() { |
| Manifest manifest = null; |
| try { |
| new Manifest(new ByteArrayInputStream(DEFAULT_MANIFEST.getBytes("ISO-8859-1"))); |
| } |
| catch (Exception e) { |
| // e.printStackTrace(); |
| } |
| return manifest; |
| } |
| |
| protected JarOutputStream buildJarOutputStream() { |
| JarOutputStream jarOutputStream = null; |
| try { |
| if (jarFilename == null || jarFilename.length() == 0) { |
| jarFilename = DEFAULT_JAR_FILENAME; |
| } |
| jarOutputStream = new JarOutputStream(new FileOutputStream( |
| new File(packager.getStageDir(), jarFilename))); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| return jarOutputStream; |
| } |
| |
| protected JarEntry getSchemaJarEntry() { |
| return new JarEntry(DBWS_SCHEMA_XML); |
| } |
| |
| protected JarEntry getSWARefJarEntry() { |
| return new JarEntry(SWAREF_FILENAME); |
| } |
| |
| protected JarEntry getOrJarEntry() { |
| return new JarEntry(META_INF_PATHS[0] + DBWS_OR_XML); |
| } |
| |
| protected JarEntry getOxJarEntry() { |
| return new JarEntry(META_INF_PATHS[0] + DBWS_OX_XML); |
| } |
| |
| protected JarEntry getSessionsJarEntry() { |
| return new JarEntry(META_INF_PATHS[0] + packager.getSessionsFileName()); |
| } |
| |
| protected JarEntry getServiceJarEntry() { |
| return new JarEntry(META_INF_PATHS[0] + DBWS_SERVICE_XML); |
| } |
| |
| protected void addFilesToJarOutputStream(JarOutputStream jarOutputStream) { |
| // copy files from disk into jar file, then clean up |
| try { |
| // eclipselink-dbws-schema.xsd |
| jarOutputStream.putNextEntry(getSchemaJarEntry()); |
| f = new File(packager.getStageDir(), DBWS_SCHEMA_XML); |
| fis = new FileInputStream(f); |
| for (int read = 0; read != -1; read = fis.read(buffer)) { |
| jarOutputStream.write(buffer, 0, read); |
| } |
| fis.close(); |
| f.deleteOnExit(); |
| |
| if (packager.hasAttachments()) { |
| // swaref.xsd |
| jarOutputStream.putNextEntry(getSWARefJarEntry()); |
| f = new File(packager.getStageDir(), SWAREF_FILENAME); |
| fis = new FileInputStream(f); |
| for (int read = 0; read != -1; read = fis.read(buffer)) { |
| jarOutputStream.write(buffer, 0, read); |
| } |
| fis.close(); |
| f.deleteOnExit(); |
| } |
| |
| // META-INF/eclipselink-dbws-or.xml |
| f = new File(packager.getStageDir(), DBWS_OR_XML); |
| if (f.length() > 0) { |
| jarOutputStream.putNextEntry(getOrJarEntry()); |
| fis = new FileInputStream(f); |
| for (int read = 0; read != -1; read = fis.read(buffer)) { |
| jarOutputStream.write(buffer, 0, read); |
| } |
| fis.close(); |
| } |
| f.deleteOnExit(); |
| |
| // META-INF/eclipselink-dbws-ox.xml |
| f = new File(packager.getStageDir(), DBWS_OX_XML); |
| if (f.length() > 0) { |
| jarOutputStream.putNextEntry(getOxJarEntry()); |
| fis = new FileInputStream(f); |
| for (int read = 0; read != -1; read = fis.read(buffer)) { |
| jarOutputStream.write(buffer, 0, read); |
| } |
| fis.close(); |
| } |
| f.deleteOnExit(); |
| |
| // META-INF/eclipselink-dbws-sessions.xml |
| jarOutputStream.putNextEntry(getSessionsJarEntry()); |
| f = new File(packager.getStageDir(), DBWS_SESSIONS_XML); |
| fis = new FileInputStream(f); |
| for (int read = 0; read != -1; read = fis.read(buffer)) { |
| jarOutputStream.write(buffer, 0, read); |
| } |
| fis.close(); |
| f.deleteOnExit(); |
| |
| // META-INF/eclipselink-dbws.xml |
| jarOutputStream.putNextEntry(getServiceJarEntry()); |
| f = new File(packager.getStageDir(), DBWS_SERVICE_XML); |
| fis = new FileInputStream(f); |
| for (int read = 0; read != -1; read = fis.read(buffer)) { |
| jarOutputStream.write(buffer, 0, read); |
| } |
| fis.close(); |
| f.deleteOnExit(); |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| @Override |
| public String getOrProjectPathPrefix() { |
| return META_INF_PATHS[0]; |
| } |
| @Override |
| public String getOxProjectPathPrefix() { |
| return META_INF_PATHS[0]; |
| } |
| @Override |
| public String getWSDLPathPrefix() { |
| return WSDL_DIR; |
| } |
| } |