blob: dbe139358e6ab7906ee0b9483311eedd73a283cc [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.tools.dbws;
//javase imports
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
//EclipseLink
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_WSDL;
import static org.eclipse.persistence.internal.xr.Util.META_INF_PATHS;
import static org.eclipse.persistence.internal.xr.Util.WEB_INF_DIR;
import static org.eclipse.persistence.internal.xr.Util.WSDL_DIR;
import static org.eclipse.persistence.tools.dbws.Util.CLASSES;
import static org.eclipse.persistence.tools.dbws.Util.DBWS_PROVIDER_CLASS_FILE;
import static org.eclipse.persistence.tools.dbws.Util.DBWS_PROVIDER_SOURCE_FILE;
import static org.eclipse.persistence.tools.dbws.Util.PROVIDER_LISTENER_CLASS_FILE;
import static org.eclipse.persistence.tools.dbws.Util.PROVIDER_LISTENER_SOURCE_FILE;
import static org.eclipse.persistence.tools.dbws.Util.SWAREF_FILENAME;
import static org.eclipse.persistence.tools.dbws.Util.UNDER_DBWS;
import static org.eclipse.persistence.tools.dbws.Util.WEB_XML_FILENAME;
public class WarArchiver extends JarArchiver {
static final String DEFAULT_WAR_FILENAME = "dbws.war";
public WarArchiver() {
}
public WarArchiver(DBWSPackager packager) {
super(packager);
}
@Override
public void setFilename(String jarFilename) {
if (!(jarFilename.endsWith(".war"))) {
jarFilename += ".war";
}
this.jarFilename = jarFilename;
}
@Override
protected JarEntry getOrJarEntry() {
return new JarEntry(WEB_INF_DIR + CLASSES + META_INF_PATHS[1] + DBWS_OR_XML);
}
@Override
protected JarEntry getOxJarEntry() {
return new JarEntry(WEB_INF_DIR + CLASSES + META_INF_PATHS[1] + DBWS_OX_XML);
}
@Override
protected JarEntry getSchemaJarEntry() {
return new JarEntry(WEB_INF_DIR + WSDL_DIR + DBWS_SCHEMA_XML);
}
@Override
protected JarEntry getServiceJarEntry() {
return new JarEntry(WEB_INF_DIR + CLASSES + META_INF_PATHS[1] + DBWS_SERVICE_XML);
}
@Override
protected JarEntry getSessionsJarEntry() {
return new JarEntry(WEB_INF_DIR + CLASSES + META_INF_PATHS[1] +
packager.getSessionsFileName());
}
@Override
protected JarEntry getSWARefJarEntry() {
return new JarEntry(WEB_INF_DIR + WSDL_DIR + SWAREF_FILENAME);
}
@Override
public String getOrProjectPathPrefix() {
return META_INF_PATHS[1];
}
@Override
public String getOxProjectPathPrefix() {
return META_INF_PATHS[1];
}
protected ZipEntry getWebXmlJarEntry() {
return new JarEntry(WEB_INF_DIR + WEB_XML_FILENAME);
}
protected ZipEntry getDBWSProviderClassJarEntry() {
return new JarEntry(WEB_INF_DIR + CLASSES + "/" + UNDER_DBWS + "/" + DBWS_PROVIDER_CLASS_FILE);
}
protected ZipEntry getDBWSProviderSourceJarEntry() {
return new JarEntry(WEB_INF_DIR + CLASSES + "/" + UNDER_DBWS + "/" + DBWS_PROVIDER_SOURCE_FILE);
}
protected ZipEntry getProviderListenerSourceJarEntry() {
return new JarEntry(WEB_INF_DIR + CLASSES + "/" + UNDER_DBWS + "/" + PROVIDER_LISTENER_SOURCE_FILE);
}
protected ZipEntry getProviderListenerClassJarEntry() {
return new JarEntry(WEB_INF_DIR + CLASSES + "/" + UNDER_DBWS + "/" + PROVIDER_LISTENER_CLASS_FILE);
}
protected ZipEntry getWSDLJarEntry() {
return new JarEntry(WEB_INF_DIR + WSDL_DIR + DBWS_WSDL);
}
/**
* Returns a JarEntry based on WEB-INF/ + the given descriptorFileName.
*/
protected ZipEntry getDeploymentDescriptorJarEntry(String descriptorFileName) {
return new JarEntry(WEB_INF_DIR + descriptorFileName);
}
@Override
protected JarOutputStream buildJarOutputStream() {
JarOutputStream jarOutputStream = null;
try {
if (jarFilename == null || jarFilename.length() == 0) {
jarFilename = DEFAULT_WAR_FILENAME;
}
jarOutputStream = new JarOutputStream(new FileOutputStream(
new File(packager.getStageDir(), jarFilename)));
} catch (Exception e) {
e.printStackTrace();
}
return jarOutputStream;
}
@Override
protected void addFilesToJarOutputStream(JarOutputStream jarOutputStream) {
super.addFilesToJarOutputStream(jarOutputStream);
/* and more ...
* web.xml
* DBWSProvider.class
* DBWSProvider.java
* eclipselink-dbws.wsdl
*/
try {
jarOutputStream.putNextEntry(getWebXmlJarEntry());
f = new File(packager.getStageDir(), WEB_XML_FILENAME);
fis = new FileInputStream(f);
for (int read = 0; read != -1; read = fis.read(buffer)) {
jarOutputStream.write(buffer, 0, read);
}
fis.close();
f.deleteOnExit();
// Deployment descriptor is optional
String deploymentDescriptorFileName = packager.getDeploymentDescriptorFileName();
if (deploymentDescriptorFileName != null) {
f = new File(packager.getStageDir(), deploymentDescriptorFileName);
jarOutputStream.putNextEntry(getDeploymentDescriptorJarEntry(deploymentDescriptorFileName));
fis = new FileInputStream(f);
for (int read = 0; read != -1; read = fis.read(buffer)) {
jarOutputStream.write(buffer, 0, read);
}
fis.close();
f.deleteOnExit();
}
jarOutputStream.putNextEntry(getDBWSProviderClassJarEntry());
f = new File(packager.getStageDir(), DBWS_PROVIDER_CLASS_FILE);
fis = new FileInputStream(f);
for (int read = 0; read != -1; read = fis.read(buffer)) {
jarOutputStream.write(buffer, 0, read);
}
fis.close();
f.deleteOnExit();
// DBWS Provider source is optional
f = new File(packager.getStageDir(), DBWS_PROVIDER_SOURCE_FILE);
if (f.length() > 0) {
jarOutputStream.putNextEntry(getDBWSProviderSourceJarEntry());
fis = new FileInputStream(f);
for (int read = 0; read != -1; read = fis.read(buffer)) {
jarOutputStream.write(buffer, 0, read);
}
fis.close();
}
f.deleteOnExit();
// ProviderListener source is optional
f = new File(packager.getStageDir(), PROVIDER_LISTENER_SOURCE_FILE);
if (f.length() > 0) {
jarOutputStream.putNextEntry(getProviderListenerSourceJarEntry());
fis = new FileInputStream(f);
for (int read = 0; read != -1; read = fis.read(buffer)) {
jarOutputStream.write(buffer, 0, read);
}
fis.close();
}
f.deleteOnExit();
jarOutputStream.putNextEntry(getProviderListenerClassJarEntry());
f = new File(packager.getStageDir(), PROVIDER_LISTENER_CLASS_FILE);
fis = new FileInputStream(f);
for (int read = 0; read != -1; read = fis.read(buffer)) {
jarOutputStream.write(buffer, 0, read);
}
fis.close();
f.deleteOnExit();
jarOutputStream.putNextEntry(getWSDLJarEntry());
f = new File(packager.getStageDir(), DBWS_WSDL);
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();
}
}
}