You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by de...@apache.org on 2005/03/17 04:31:01 UTC
svn commit: r157878 - in webservices/axis/trunk/java/modules/deployment:
maven.xml src/java/org/apache/axis/deployment/DeploymentEngine.java
src/java/org/apache/axis/deployment/DeploymentParser.java
src/java/org/apache/axis/deployment/repository/utill/HDFileItem.java
Author: deepal
Date: Wed Mar 16 19:31:00 2005
New Revision: 157878
URL: http://svn.apache.org/viewcvs?view=rev&rev=157878
Log:
I have modified DeploymentEngine inorder to deploy a service using programatically . That is user can deploy service by giving classLoader , serviceName and Inputstrem of service.xml
Modified:
webservices/axis/trunk/java/modules/deployment/maven.xml
webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentEngine.java
webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentParser.java
webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/repository/utill/HDFileItem.java
Modified: webservices/axis/trunk/java/modules/deployment/maven.xml
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/deployment/maven.xml?view=diff&r1=157877&r2=157878
==============================================================================
--- webservices/axis/trunk/java/modules/deployment/maven.xml (original)
+++ webservices/axis/trunk/java/modules/deployment/maven.xml Wed Mar 16 19:31:00 2005
@@ -11,6 +11,7 @@
<j:jelly xmlns="jelly:ant">
<!-- <ant:ant antfile="build.xml" inheritall="true" inheritrefs="true" dir="src/samples/deployment/service1"/> -->
<ant:ant antfile="build.xml" inheritall="true" inheritrefs="true" dir="src/samples/deployment/service2"/>
+ <ant:ant antfile="build.xml" inheritall="true" inheritrefs="true" dir="src/samples/deployment/OutService"/>
<ant:ant antfile="build.xml" inheritall="true" inheritrefs="true" dir="src/samples/deployment/module1"/>
<ant:ant antfile="build.xml" inheritall="true" inheritrefs="true" dir="src/samples/deployment/module2"/>
</j:jelly>
Modified: webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentEngine.java?view=diff&r1=157877&r2=157878
==============================================================================
--- webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentEngine.java (original)
+++ webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentEngine.java Wed Mar 16 19:31:00 2005
@@ -23,17 +23,8 @@
import org.apache.axis.deployment.scheduler.DeploymentIterator;
import org.apache.axis.deployment.scheduler.Scheduler;
import org.apache.axis.deployment.scheduler.SchedulerTask;
-import org.apache.axis.description.AxisGlobal;
-import org.apache.axis.description.AxisModule;
-import org.apache.axis.description.AxisService;
-import org.apache.axis.description.Flow;
-import org.apache.axis.description.HandlerMetadata;
-import org.apache.axis.description.Parameter;
-import org.apache.axis.engine.AxisFault;
-import org.apache.axis.engine.EngineRegistry;
-import org.apache.axis.engine.EngineRegistryImpl;
-import org.apache.axis.engine.Handler;
-import org.apache.axis.engine.Provider;
+import org.apache.axis.description.*;
+import org.apache.axis.engine.*;
import org.apache.axis.phaseresolver.PhaseException;
import org.apache.axis.phaseresolver.PhaseResolver;
import org.apache.commons.logging.Log;
@@ -41,19 +32,13 @@
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import java.util.HashMap;
public class DeploymentEngine implements DeploymentConstants {
@@ -111,6 +96,15 @@
this(RepositaryName,"server.xml");
}
+ /**
+ * this constructor is used to deploy a web service programatically, by using classLoader
+ * and InputStream
+ * @param engineRegistry
+ */
+ public DeploymentEngine(EngineRegistry engineRegistry) {
+ this.engineRegistry = engineRegistry;
+ }
+
public DeploymentEngine(String RepositaryName, String serverXMLFile) throws DeploymentException {
this.folderName = RepositaryName;
File repository = new File(RepositaryName);
@@ -267,84 +261,74 @@
private void addnewService(AxisService serviceMetaData) throws AxisFault, PhaseException {
+ currentFileItem.setClassLoader();
+ serviceMetaData = getRunnerbleService(serviceMetaData);
+ engineRegistry.addService(serviceMetaData);
+ Parameter para = serviceMetaData.getParameter("OUTSERVICE");
+ if(para != null ){
+ String value = (String) para.getValue();
+ if("true".equals(value)){
+ Class temp = serviceMetaData.getServiceClass();
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
-
- loadServiceClass(serviceMetaData,classLoader);
-
+ }
+ }
+ }
+ /**
+ * This method is used to fill the axis service , it dose loading service class and also the provider class
+ * and it will also load the service handlers
+ * @param serviceMetaData
+ * @return
+ * @throws AxisFault
+ * @throws PhaseException
+ */
+ private AxisService getRunnerbleService(AxisService serviceMetaData) throws AxisFault, PhaseException {
+ loadServiceClass(serviceMetaData);
Flow inflow = serviceMetaData.getInFlow();
if(inflow != null ){
- addFlowHandlers(inflow,classLoader);
+ addFlowHandlers(inflow);
}
Flow outFlow = serviceMetaData.getOutFlow();
if(outFlow != null){
- addFlowHandlers(outFlow,classLoader);
+ addFlowHandlers(outFlow);
}
Flow faultFlow = serviceMetaData.getFaultFlow();
if(faultFlow != null) {
- addFlowHandlers(faultFlow,classLoader);
+ addFlowHandlers(faultFlow);
}
PhaseResolver reolve = new PhaseResolver(engineRegistry,serviceMetaData);
reolve.buildchains();
- engineRegistry.addService(serviceMetaData);
+ serviceMetaData.setClassLoader(currentFileItem.getClassLoader());
+ return serviceMetaData;
}
- private void loadServiceClass(AxisService service, ClassLoader parent) throws AxisFault{
- File file = currentFileItem.getFile();
- Class serviceclass = null;
- URLClassLoader loader1 = null;
- if (file != null) {
- URL[] urlsToLoadFrom = new URL[0];
- try {
- if (!file.exists()) {
- throw new RuntimeException("file not found !!!!!!!!!!!!!!!");
- }
- urlsToLoadFrom = new URL[]{file.toURL()};
- loader1 = new URLClassLoader(urlsToLoadFrom, parent);
- service.setClassLoader(loader1);
-
- String readInClass = currentFileItem.getClassName();
-
- if(readInClass != null && !"".equals(readInClass)){
- serviceclass = Class.forName(currentFileItem.getClassName(), true, loader1);
- }
- service.setServiceClass(serviceclass);
- String readInProviderName = currentFileItem.getProvideName();
- if(readInProviderName != null && ! "".equals(readInProviderName)){
- Class provider =Class.forName(currentFileItem.getProvideName(), true, loader1);
- service.setProvider((Provider)provider.newInstance());
- }
- } catch (MalformedURLException e) {
- throw new AxisFault(e.getMessage(),e);
- } catch (Exception e) {
- throw new AxisFault(e.getMessage(),e);
+ private void loadServiceClass(AxisService service) throws AxisFault{
+ Class serviceclass = null;
+ ClassLoader loader1 = currentFileItem.getClassLoader();
+ try{
+ service.setClassLoader(loader1);
+ String readInClass = currentFileItem.getClassName();
+ if(readInClass != null && !"".equals(readInClass)){
+ serviceclass = Class.forName(currentFileItem.getClassName(), true, loader1);
}
-
+ service.setServiceClass(serviceclass);
+ String readInProviderName = currentFileItem.getProvideName();
+ if(readInProviderName != null && ! "".equals(readInProviderName)){
+ Class provider =Class.forName(currentFileItem.getProvideName(), true, loader1);
+ service.setProvider((Provider)provider.newInstance());
+ }
+ } catch (Exception e) {
+ throw new AxisFault(e.getMessage(),e);
}
}
- private void addFlowHandlers(Flow flow, ClassLoader parent) throws AxisFault {
+ private void addFlowHandlers(Flow flow) throws AxisFault {
int count = flow.getHandlerCount();
- File file = currentFileItem.getFile();
- URLClassLoader loader1 = null;
- if (file != null) {
- URL[] urlsToLoadFrom = new URL[0];
- try {
- if (!file.exists()) {
- throw new RuntimeException("file not found !!!!!!!!!!!!!!!");
- }
- urlsToLoadFrom = new URL[]{file.toURL()};
- } catch (MalformedURLException e) {
- throw new AxisFault(e.getMessage());
- }
- loader1 = new URLClassLoader(urlsToLoadFrom, parent);
- }
-
+ ClassLoader loader1 = currentFileItem.getClassLoader();
for (int j = 0; j < count; j++) {
//todo handle exception in properway
HandlerMetadata handlermd = flow.getHandler(j);
@@ -366,7 +350,7 @@
}
- public Class getHandlerClass(String className, URLClassLoader loader1) throws AxisFault {
+ public Class getHandlerClass(String className, ClassLoader loader1) throws AxisFault {
Class handlerClass = null;
try {
@@ -379,17 +363,16 @@
private void addNewModule(AxisModule moduelmetada) throws AxisFault {
-
- ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ currentFileItem.setClassLoader();
Flow inflow = moduelmetada.getInFlow();
- addFlowHandlers(inflow,classLoader);
+ addFlowHandlers(inflow);
Flow outFlow = moduelmetada.getOutFlow();
- addFlowHandlers(outFlow,classLoader);
+ addFlowHandlers(outFlow);
Flow faultFlow = moduelmetada.getFaultFlow();
- addFlowHandlers(faultFlow,classLoader);
+ addFlowHandlers(faultFlow);
engineRegistry.addMdoule(moduelmetada);
}
@@ -439,7 +422,7 @@
serviceStatus = "Error:\n" + e.getMessage();
} finally {
if(serviceStatus.startsWith("Error:")) {
- engineRegistry.getFaulytServices().put(getAxisServiceName(currentFileItem.getName()),serviceStatus);
+ engineRegistry.getFaulytServices().put(getAxisServiceName(currentFileItem.getName()),serviceStatus);
}
currentFileItem = null;
}
@@ -479,7 +462,7 @@
engineRegistry.removeService(new QName(serviceName));
log.info("UnDeployement WS Name " + wsInfo.getFilename());
}
- engineRegistry.getFaulytServices().remove(serviceName);
+ engineRegistry.getFaulytServices().remove(serviceName);
}
}
@@ -508,6 +491,25 @@
return value;
}
return fileName;
+ }
+
+ public AxisService deployService(ClassLoader classLoder , InputStream serviceStream ,String servieName) throws DeploymentException {
+ AxisService service = null;
+ try {
+ currentFileItem = new HDFileItem(SERVICE,servieName);
+ currentFileItem.setClassLoader(classLoder);
+ service = new AxisService();
+ DeploymentParser schme = new DeploymentParser(serviceStream, this, "");
+ schme.parseServiceXML(service);
+ service = getRunnerbleService(service);
+ } catch (XMLStreamException e) {
+ throw new DeploymentException(e.getMessage());
+ } catch (PhaseException e) {
+ throw new DeploymentException(e.getMessage());
+ } catch (AxisFault axisFault) {
+ throw new DeploymentException(axisFault.getMessage());
+ }
+ return service;
}
Modified: webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentParser.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentParser.java?view=diff&r1=157877&r2=157878
==============================================================================
--- webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentParser.java (original)
+++ webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/DeploymentParser.java Wed Mar 16 19:31:00 2005
@@ -104,7 +104,7 @@
String ST = pullparser.getLocalName();
if (ST.equals(SERVICEXMLST)) {
procesServiceXML(axisService);
- axisService.setName(new QName(getAxisServiceName(dpengine.getCurrentFileItem().getFile().getName())));
+ axisService.setName(new QName(getAxisServiceName(dpengine.getCurrentFileItem().getServiceName())));
}
//processStartElement();
break;//todo this has to be chenfed only for testng
Modified: webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/repository/utill/HDFileItem.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/repository/utill/HDFileItem.java?view=diff&r1=157877&r2=157878
==============================================================================
--- webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/repository/utill/HDFileItem.java (original)
+++ webservices/axis/trunk/java/modules/deployment/src/java/org/apache/axis/deployment/repository/utill/HDFileItem.java Wed Mar 16 19:31:00 2005
@@ -1,22 +1,28 @@
/*
- * Copyright 2004,2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
package org.apache.axis.deployment.repository.utill;
+import org.apache.axis.engine.Provider;
+import org.apache.axis.engine.AxisFault;
+
import java.io.File;
+import java.net.URLClassLoader;
+import java.net.URL;
+import java.net.MalformedURLException;
/**
* HDFileItem = Hot Deployment File Item , to store infromation of the module or servise
@@ -24,10 +30,17 @@
*/
public class HDFileItem {
- private File file;
+ private ClassLoader classLoader;
+ private File file = null;
private int type;
private String className;
private String provideName;
+ private String name;
+
+ public HDFileItem(int type , String name) {
+ this.type = type;
+ this.name = name ;
+ }
public String getClassName() {
return className;
@@ -54,6 +67,13 @@
return file.getName();
}
+ public String getServiceName(){
+ if(file!= null){
+ return file.getName();
+ } else
+ return name;
+ }
+
public String getAbsolutePath() {
return file.getAbsolutePath();
}
@@ -64,5 +84,32 @@
public File getFile() {
return file;
+ }
+
+ public ClassLoader getClassLoader() {
+ return classLoader;
+ }
+
+ public void setClassLoader(ClassLoader classLoader) {
+ this.classLoader = classLoader;
+ }
+
+ public void setClassLoader() throws AxisFault {
+ ClassLoader parent = Thread.currentThread().getContextClassLoader();
+ if (file != null) {
+ URL[] urlsToLoadFrom = new URL[0];
+ try {
+ if (!file.exists()) {
+ throw new RuntimeException("file not found !!!!!!!!!!!!!!!");
+ }
+ urlsToLoadFrom = new URL[]{file.toURL()};
+ classLoader = new URLClassLoader(urlsToLoadFrom, parent);
+
+ } catch (MalformedURLException e) {
+ throw new AxisFault(e.getMessage(),e);
+ } catch (Exception e) {
+ throw new AxisFault(e.getMessage(),e);
+ }
+ }
}
}