/******************************************************************************* | |
* Copyright (c) 1998, 2013 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: | |
* Mike Norman - Oct 29th 2008, create packager for Javase 6 'Containerless' Endpoint deployment | |
******************************************************************************/ | |
package org.eclipse.persistence.tools.dbws; | |
//javase imports | |
import java.io.File; | |
import java.io.FileInputStream; | |
import java.util.jar.JarEntry; | |
import java.util.jar.JarOutputStream; | |
import java.util.zip.ZipEntry; | |
//EclipseLink imports | |
import static org.eclipse.persistence.internal.xr.Util.DBWS_WSDL; | |
import static org.eclipse.persistence.internal.xr.Util.DBWS_SCHEMA_XML; | |
import static org.eclipse.persistence.tools.dbws.DBWSPackager.ArchiveUse.archive; | |
import static org.eclipse.persistence.tools.dbws.Util.DBWS_PROVIDER_CLASS_FILE; | |
import static org.eclipse.persistence.tools.dbws.Util.SWAREF_FILENAME; | |
import static org.eclipse.persistence.tools.dbws.Util.UNDER_DBWS; | |
/** | |
* <p> | |
* <b>PUBLIC:</b> JavasePackager extends {@link ProviderPackager}. It generates a simplified version<br> | |
* of the JAX-WS Provider Endpoint that can be run using the Javase 6 'containerless' Endpoint API: | |
* <pre> | |
* Endpoint endpoint = Endpoint.create(new @WebService or @WebServiceProvider); | |
* endpoint.publish(ENDPOINT_ADDRESS); | |
* QName serviceQName = new QName(serviceNamespace, serviceName); | |
* QName portQName = new QName(serviceNamespace, portName); | |
* service = Service.create(serviceQName); | |
* service.addPort(portQName, javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, ENDPOINT_ADDRESS); | |
* ... | |
* Dispatch<SOAPMessage> dispatch = testService.createDispatch(portQName, SOAPMessage.class, | |
* Service.Mode.MESSAGE); | |
* SOAPMessage response = dispatch.invoke(request); | |
* ... | |
* </pre> | |
* Package files generated by parent according to the following layout: | |
* <pre> | |
* ${PACKAGER_ROOT} - could be a directory or a <tt>.jar</tt> file: | |
* +---META-INF | |
* | eclipselink-dbws-or.xml | |
* | eclipselink-dbws-ox.xml | |
* | eclipselink-dbws-sessions.xml | |
* | eclipselink-dbws.xml | |
* | | |
* +---_dbws | |
* | DBWSProvider.class | |
* | | |
* \---wsdl | |
* <i>swaref.xsd</i> -- optional if using attachments | |
* eclipselink-dbws-schema.xsd | |
* eclipselink-dbws.wsdl | |
* </pre> | |
* | |
* @author Mike Norman - michael.norman@oracle.com | |
* @since EclipseLink 1.x | |
*/ | |
public class JavasePackager extends ProviderPackager { | |
public JavasePackager() { | |
this(new JavaseArchiver(), "javase", archive); | |
} | |
protected JavasePackager(Archiver archiver, String packagerLabel, ArchiveUse useJavaArchive) { | |
super(archiver, packagerLabel, useJavaArchive); | |
} | |
@Override | |
public Archiver buildDefaultArchiver() { | |
return new JavaseArchiver(this); | |
} | |
/** | |
* by returning null, the generated _dbws.DDBWProvider class will have a slightly-different | |
* class annotation: | |
* <pre> | |
* @WebServiceProvider( | |
* // note: no 'wsdlLocation' attribute | |
* serviceName = ${serviceName}, | |
* portName = ${servicePort}, | |
* targetNamespace = ${serviceNamespace} | |
* ) | |
</pre> | |
) | |
*/ | |
@Override | |
public String getWSDLPathPrefix() { | |
return null; | |
} | |
static class JavaseArchiver extends JarArchiver { | |
JavaseArchiver() { | |
super(); | |
} | |
JavaseArchiver(DBWSPackager packager) { | |
super(packager); | |
} | |
@Override | |
protected void addFilesToJarOutputStream(JarOutputStream jarOutputStream) { | |
super.addFilesToJarOutputStream(jarOutputStream); | |
/* and more ... | |
* DBWSProvider.class | |
* eclipselink-dbws.wsdl | |
*/ | |
try { | |
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(); | |
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(); | |
} | |
} | |
@Override | |
protected JarEntry getSchemaJarEntry() { | |
return new JarEntry(getWSDLPathPrefix() + DBWS_SCHEMA_XML); | |
} | |
@Override | |
protected JarEntry getSWARefJarEntry() { | |
return new JarEntry(getWSDLPathPrefix() + SWAREF_FILENAME); | |
} | |
ZipEntry getWSDLJarEntry() { | |
return new JarEntry(getWSDLPathPrefix() + DBWS_WSDL); | |
} | |
ZipEntry getDBWSProviderClassJarEntry() { | |
return new JarEntry(UNDER_DBWS + "/" + DBWS_PROVIDER_CLASS_FILE); | |
} | |
} | |
} |