You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2008/02/13 23:02:43 UTC
svn commit: r627599 - in /webservices/axis2/trunk/java/modules/jaxws:
src/org/apache/axis2/jaxws/framework/
src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
Author: dims
Date: Wed Feb 13 14:02:38 2008
New Revision: 627599
URL: http://svn.apache.org/viewvc?rev=627599&view=rev
Log:
- Better check for a jar file
- move from test to src
- eliminate the remaining uses of reflection
- eliminate the remaining use of rpc message receiver
- remove remnants of annogen
- add a couple of more urls to the class loader for the wsdl/xsd's to get picked up
Added:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
- copied, changed from r627561, webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
Removed:
webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java
Copied: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java (from r627561, webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java)
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java?p2=webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java&p1=webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java&r1=627561&r2=627599&rev=627599&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/framework/JAXWSDeployer.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/framework/JAXWSDeployer.java Wed Feb 13 14:02:38 2008
@@ -18,40 +18,39 @@
*/
package org.apache.axis2.jaxws.framework;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import javax.jws.WebService;
-import javax.xml.ws.WebServiceProvider;
-
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.deployment.Deployer;
import org.apache.axis2.deployment.DeploymentErrorMsgs;
import org.apache.axis2.deployment.DeploymentException;
+import org.apache.axis2.deployment.DeploymentEngine;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
import org.apache.axis2.deployment.util.Utils;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.AxisServiceGroup;
-import org.apache.axis2.description.WSDL2Constants;
-import org.apache.axis2.engine.MessageReceiver;
import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.server.JAXWSMessageReceiver;
import org.apache.axis2.util.Loader;
-import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceProvider;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.jar.JarInputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
/*
* JAXWSDeployer is a custom deployer modeled after the POJODeployer. Its purpose
* is to deploy .wars and expanded .war directories
@@ -71,73 +70,44 @@
ClassLoader threadClassLoader = null;
try {
threadClassLoader = Thread.currentThread().getContextClassLoader();
- String extension = DeploymentFileData.getFileExtension(deploymentFileData.getName());
- if ("war".equals(extension) || "jar".equals(extension)) {
- ArrayList classList;
- FileInputStream fin = null;
- ZipInputStream zin = null;
- try {
- fin = new FileInputStream(deploymentFileData.getAbsolutePath());
- zin = new ZipInputStream(fin);
- ZipEntry entry;
- classList = new ArrayList();
- while ((entry = zin.getNextEntry()) != null) {
- String name = entry.getName();
- if (name.endsWith(".class")) {
- classList.add(name);
- }
- }
- zin.close();
- fin.close();
- } catch (Exception e) {
- log.debug(Messages.getMessage("deployingexception",e.getMessage()),e);
- throw new DeploymentException(e);
- } finally {
- if (zin != null) {
- zin.close();
- }
- if (fin != null) {
- fin.close();
- }
+ if (isJar(deploymentFileData.getFile())) {
+ log.info("Deploying artifact : " + deploymentFileData.getName());
+ ArrayList urls = new ArrayList();
+ urls.add(deploymentFileData.getFile().toURL());
+ urls.add(configCtx.getAxisConfiguration().getRepository());
+ String webLocation = DeploymentEngine.getWebLocationString();
+ if (webLocation != null) {
+ urls.add(new File(webLocation).toURL());
}
+ ClassLoader classLoader = Utils.createClassLoader(
+ urls,
+ configCtx.getAxisConfiguration().getSystemClassLoader(),
+ true,
+ (File) configCtx.getAxisConfiguration().
+ getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
+ Thread.currentThread().setContextClassLoader(classLoader);
+
+ ArrayList classList = getListOfClasses(deploymentFileData);
ArrayList axisServiceList = new ArrayList();
for (int i = 0; i < classList.size(); i++) {
String className = (String) classList.get(i);
- ClassLoader classLoader = Utils.createClassLoader(
- new URL[]{deploymentFileData.getFile().toURL()},
- configCtx.getAxisConfiguration().getSystemClassLoader(),
- true,
- (File) configCtx.getAxisConfiguration().
- getParameterValue(Constants.Configuration.ARTIFACTS_TEMP_DIR));
- Thread.currentThread().setContextClassLoader(classLoader);
className = className.replaceAll(".class", "");
className = className.replaceAll("/", ".");
-
- try {
- Class claxx = Class.forName(className);
-
- Class pojoClass = Loader.loadClass(classLoader, className);
- WebService wsAnnotation = (WebService) pojoClass.getAnnotation(WebService.class);
- WebServiceProvider wspAnnotation = null;
- if (wsAnnotation == null) {
- wspAnnotation = (WebServiceProvider) pojoClass.getAnnotation(WebServiceProvider.class);
- }
- if (wsAnnotation != null || wspAnnotation != null) {
- AxisService axisService;
- axisService =
- createAxisService(classLoader,
- className,
- deploymentFileData.getFile().toURL());
- axisServiceList.add(axisService);
- }
- } catch (Exception e) {
- // Seems like the jax-ws jars missing in the class path .
- // lets try with annogen
- log.debug(Messages.getMessage("jaxwsjarsmissing",e.getMessage()),e);
- //axisService = createAxisServiceUsingAnnogen(className, classLoader, serviceLocation);
- }
-
+ Class pojoClass = Loader.loadClass(classLoader, className);
+ WebService wsAnnotation = (WebService) pojoClass.getAnnotation(WebService.class);
+ WebServiceProvider wspAnnotation = null;
+ if (wsAnnotation == null) {
+ wspAnnotation = (WebServiceProvider) pojoClass.getAnnotation(WebServiceProvider.class);
+ }
+ if (wsAnnotation != null || wspAnnotation != null) {
+ AxisService axisService;
+ axisService =
+ createAxisService(classLoader,
+ className,
+ deploymentFileData.getFile().toURL());
+ axisServiceList.add(axisService);
+ }
}
if (axisServiceList.size() > 0) {
AxisServiceGroup serviceGroup = new AxisServiceGroup();
@@ -149,20 +119,15 @@
configCtx.getAxisConfiguration().addServiceGroup(serviceGroup);
} else {
String msg = "Error:\n No annotated classes found in the jar: " +
- deploymentFileData.getFile().getName() +
- ". Service deployment failed.";
+ deploymentFileData.getFile().getName() +
+ ". Service deployment failed.";
log.error(msg);
configCtx.getAxisConfiguration().getFaultyServices().
put(deploymentFileData.getFile().getAbsolutePath(), msg);
}
- }
- //TODO: Possible other extensions here
- //else if () {}
- } catch (Exception e) {
- log.debug(Messages.getMessage("stroringfaultyservice",e.getMessage()),e);
- storeFaultyService(deploymentFileData, e);
+ }
} catch (Throwable t) {
- log.debug(Messages.getMessage("stroringfaultyservice",t.getMessage()),t);
+ log.debug(Messages.getMessage("stroringfaultyservice", t.getMessage()), t);
storeFaultyService(deploymentFileData, t);
} finally {
if (threadClassLoader != null) {
@@ -171,6 +136,37 @@
}
}
+ private ArrayList getListOfClasses(DeploymentFileData deploymentFileData) throws IOException {
+ ArrayList classList;
+ FileInputStream fin = null;
+ ZipInputStream zin = null;
+ try {
+ fin = new FileInputStream(deploymentFileData.getAbsolutePath());
+ zin = new ZipInputStream(fin);
+ ZipEntry entry;
+ classList = new ArrayList();
+ while ((entry = zin.getNextEntry()) != null) {
+ String name = entry.getName();
+ if (name.endsWith(".class")) {
+ classList.add(name);
+ }
+ }
+ zin.close();
+ fin.close();
+ } catch (Exception e) {
+ log.debug(Messages.getMessage("deployingexception", e.getMessage()), e);
+ throw new DeploymentException(e);
+ } finally {
+ if (zin != null) {
+ zin.close();
+ }
+ if (fin != null) {
+ fin.close();
+ }
+ }
+ return classList;
+ }
+
private void storeFaultyService(DeploymentFileData deploymentFileData, Throwable t) {
StringWriter errorWriter = new StringWriter();
PrintWriter ptintWriter = new PrintWriter(errorWriter);
@@ -183,116 +179,26 @@
private AxisService createAxisService(ClassLoader classLoader,
String className,
URL serviceLocation) throws ClassNotFoundException,
- InstantiationException,
- IllegalAccessException,
- AxisFault {
- AxisService axisService = null;
- try {
- Class claxx = Class.forName(
- "org.apache.axis2.jaxws.description.DescriptionFactory");
- Method mthod = claxx.getMethod(
- "createAxisService",
- new Class[]{Class.class});
- Class pojoClass = Loader.loadClass(classLoader, className);
- axisService =
- (AxisService) mthod.invoke(claxx, new Object[]{pojoClass});
- if (axisService != null) {
- Iterator operations = axisService.getOperations();
- while (operations.hasNext()) {
- AxisOperation axisOperation = (AxisOperation) operations.next();
- if (axisOperation.getMessageReceiver() == null) {
- try {
- Class jaxwsMR = Loader.loadClass(
- "org.apache.axis2.jaxws.server.JAXWSMessageReceiver");
- MessageReceiver jaxwsMRInstance =
- (MessageReceiver) jaxwsMR.newInstance();
- axisOperation.setMessageReceiver(jaxwsMRInstance);
- } catch (Exception e) {
- log.debug("Error occurde while loading JAXWSMessageReceiver for "
- + className );
- }
- }
+ InstantiationException,
+ IllegalAccessException,
+ AxisFault {
+ Class pojoClass = Loader.loadClass(classLoader, className);
+ AxisService axisService = DescriptionFactory.createAxisService(pojoClass);
+ if (axisService != null) {
+ Iterator operations = axisService.getOperations();
+ while (operations.hasNext()) {
+ AxisOperation axisOperation = (AxisOperation) operations.next();
+ if (axisOperation.getMessageReceiver() == null) {
+ axisOperation.setMessageReceiver(new JAXWSMessageReceiver());
}
}
- axisService.setElementFormDefault(false);
- axisService.setFileName(serviceLocation);
- //Not needed at this case, the message receivers always set to RPC if this executes
- //setMessageReceivers(axisService);
-
- } catch (Exception e) {
- // Seems like the jax-ws jars missing in the class path .
- // lets try with annogen
- log.debug(Messages.getMessage(DeploymentErrorMsgs.JAXWS_JARS_MISSING,e.getMessage()),e);
- //axisService = createAxisServiceUsingAnnogen(className, classLoader, serviceLocation);
}
- return axisService;
- }
-
- private AxisService createAxisServiceUsingAnnogen(String className,
- ClassLoader classLoader,
- URL serviceLocation)
- throws ClassNotFoundException,
- InstantiationException,
- IllegalAccessException,
- AxisFault {
- HashMap messageReciverMap = new HashMap();
- Class inOnlyMessageReceiver = Loader.loadClass(
- "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver");
- MessageReceiver messageReceiver =
- (MessageReceiver) inOnlyMessageReceiver.newInstance();
- messageReciverMap.put(WSDL2Constants.MEP_URI_IN_ONLY,
- messageReceiver);
- Class inoutMessageReceiver = Loader.loadClass(
- "org.apache.axis2.rpc.receivers.RPCMessageReceiver");
- MessageReceiver inOutmessageReceiver =
- (MessageReceiver) inoutMessageReceiver.newInstance();
- messageReciverMap.put(WSDL2Constants.MEP_URI_IN_OUT,
- inOutmessageReceiver);
- messageReciverMap.put(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY,
- inOutmessageReceiver);
- AxisService axisService =
- AxisService.createService(className,
- configCtx.getAxisConfiguration(),
- messageReciverMap,
- null, null,
- classLoader);
+ axisService.setElementFormDefault(false);
axisService.setFileName(serviceLocation);
+ log.info("Deploying JAXWS Service : " + className);
return axisService;
}
- public void setMessageReceivers(AxisService service) {
- Iterator iterator = service.getOperations();
- while (iterator.hasNext()) {
- AxisOperation operation = (AxisOperation) iterator.next();
- String MEP = operation.getMessageExchangePattern();
- if (MEP != null) {
- try {
- if (WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_ONLY.equals(MEP)
- || WSDLConstants.WSDL20_2004_Constants.MEP_URI_IN_ONLY.equals(MEP)
- || WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP)) {
- Class inOnlyMessageReceiver = Loader.loadClass(
- "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver");
- MessageReceiver messageReceiver =
- (MessageReceiver) inOnlyMessageReceiver.newInstance();
- operation.setMessageReceiver(messageReceiver);
- } else {
- Class inoutMessageReceiver = Loader.loadClass(
- "org.apache.axis2.rpc.receivers.RPCMessageReceiver");
- MessageReceiver inOutmessageReceiver =
- (MessageReceiver) inoutMessageReceiver.newInstance();
- operation.setMessageReceiver(inOutmessageReceiver);
- }
- } catch (ClassNotFoundException e) {
- log.error(e.getMessage(), e);
- } catch (InstantiationException e) {
- log.error(e.getMessage(), e);
- } catch (IllegalAccessException e) {
- log.error(e.getMessage(), e);
- }
- }
- }
- }
-
public void setDirectory(String directory) {
}
@@ -301,32 +207,37 @@
public void unDeploy(String fileName) {
fileName = Utils.getShortFileName(fileName);
- if (fileName.endsWith(".class")) {
- String className = fileName.replaceAll(".class", "");
- try {
- AxisServiceGroup serviceGroup =
- configCtx.getAxisConfiguration().removeServiceGroup(className);
- configCtx.removeServiceGroupContext(serviceGroup);
- log.info(Messages.getMessage(DeploymentErrorMsgs.SERVICE_REMOVED,
- fileName));
- } catch (AxisFault axisFault) {
- //May be a faulty service
- log.debug(Messages.getMessage(DeploymentErrorMsgs.FAULTY_SERVICE_REMOVAL,axisFault.getMessage()),axisFault);
- configCtx.getAxisConfiguration().removeFaultyService(fileName);
- }
- } else if (fileName.endsWith(".jar")) {
+ if (isJar(new File(fileName))) {
try {
AxisServiceGroup serviceGroup =
configCtx.getAxisConfiguration().removeServiceGroup(fileName);
configCtx.removeServiceGroupContext(serviceGroup);
log.info(Messages.getMessage(DeploymentErrorMsgs.SERVICE_REMOVED,
- fileName));
+ fileName));
} catch (AxisFault axisFault) {
//May be a faulty service
- log.debug(Messages.getMessage(DeploymentErrorMsgs.FAULTY_SERVICE_REMOVAL,axisFault.getMessage()),axisFault);
+ log.debug(Messages.getMessage(DeploymentErrorMsgs.FAULTY_SERVICE_REMOVAL,
+ axisFault.getMessage()), axisFault);
configCtx.getAxisConfiguration().removeFaultyService(fileName);
}
}
+ }
+
+ /**
+ * Check if this inputstream is a jar/zip
+ *
+ * @param is
+ * @return true if inputstream is a jar
+ */
+ public static boolean isJar(File f) {
+ try {
+ JarInputStream jis = new JarInputStream(new FileInputStream(f));
+ if (jis.getNextEntry() != null) {
+ return true;
+ }
+ } catch (IOException ioe) {
+ }
+ return false;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org