Hi Marzie, just to proceed I'd recommend to add all jar files located in <tomcat>/webapps/ode/WEB-INF/lib to your project. You can skip those starting with ode-*. This should help and then you can start removing unneeded dependencies. In general, you will need only those required by Axis2, so you could also download an Axis2 binary distro and use it libraries instead.
HTH, Tammo On Mon, Feb 2, 2015 at 5:39 PM, Marzie Dehghanipour < [email protected]> wrote: > Dear Tammo, > > I work with Eclipse, unfortunately I have not worked before with Maven. > I need a java project which can call ODE API deployment service and deploy > the process remotely. I used the "DeploymentWebService.java" + > "ServiceClientUtil.java" + "ODEClient.java"+ "Test.java". > > The first Two classes I only copied from Github into my default package. > But the other two I can copy the code below. I also add some jars which the > classes need and obviously have installed Apache ODE inside Tomcat > Application server. I mean I can see the WSDL file of this service by > calling this: "http://localhost:8080/ode/processes/DeploymentService?wsdl > " > > The problem is that I am not sure that am I am in the right direction or > not as I always get exception? I am new to all these topics and I am not > sure that should I also include other java classes from github or not? > > I do appreciate your kind consideration. > > ODEClient.java : > > import java.io.BufferedInputStream; > import java.io.IOException; > import javax.xml.stream.XMLStreamException; > import org.apache.axiom.om.*; > import org.apache.axiom.om.util.Base64; > import org.apache.axis2.AxisFault; > import org.apache.ode.axis2.service.ServiceClientUtil; > import org.apache.ode.utils.Namespaces; > > import javax.xml.namespace.QName; > import java.io.ByteArrayOutputStream; > import java.io.File; > import java.io.FileInputStream; > import java.io.InputStream; > import java.io.StringBufferInputStream; > import java.net.URL; > import java.util.ArrayList; > import java.util.Iterator; > import org.apache.axiom.om.impl.llom.util.AXIOMUtil; > import org.apache.axiom.soap.SOAPFactory; > import org.apache.ode.bpel.pmapi.ScopeInfoDocument; > import org.apache.ode.tools.sendsoap.cline.HttpSoapSender; > > public class ODEClient { > > public Boolean checkProcess(String packge) throws AxisFault { > // Setup and tear down are doing ost of the job here, just checking > in the middle > ServiceClientUtil client = new ServiceClientUtil(); > > OMElement listRoot = client.buildMessage("listProcesses", new > String[]{"filter", "orderKeys"}, > new String[]{packge, ""}); > OMElement result = client.send(listRoot, " > http://localhost:8080/ode/processes/ProcessManagement?wsdl"); > OMElement child = result.getFirstElement(); > OMElement pid = child.getFirstElement(); > if (pid != null) { > return true; > } > return false; > } > > public OMElement listAllProcesses() throws AxisFault { > ServiceClientUtil client = new ServiceClientUtil(); > OMElement listRoot = client.buildMessage("listProcesses", new > String[]{}, > new String[]{}); > OMElement result = client.send(listRoot, " > http://localhost:8080/ode/processes/ProcessManagement?wsdl"); > return result; > } > private OMFactory _factory; > private ServiceClientUtil _client; > private ArrayList<QName> _deployed = new ArrayList<QName>(); > private String _package; > > public void undeploy(String pakage) throws Exception { > // Prepare undeploy message > _client = new ServiceClientUtil(); > _factory = OMAbstractFactory.getOMFactory(); > OMNamespace depns = > _factory.createOMNamespace(Namespaces.ODE_PMAPI, "deployapi"); > OMElement root = _factory.createOMElement("undeploy", depns); > OMElement part = _factory.createOMElement("packageName", null); > part.setText(pakage); > root.addChild(part); > > // Undeploy > sendToDeployment(root); > } > > public String deploy(String packageName, String path) throws > IOException, XMLStreamException { > String pakage = null; > try { > SOAPFactory factory = OMAbstractFactory.getSOAP11Factory(); > OMNamespace omn = factory.createOMNamespace(" > http://www.apache.org/ode/pmapi", "tns"); > OMNamespace soapnm = factory.createOMNamespace(" > http://schemas.xmlsoap.org/soap/envelope/", "SOAP-ENV"); > OMElement message = factory.createOMElement("Envelope", > soapnm); > OMElement body = factory.createOMElement("Body", soapnm); > message.addChild(body); > OMNamespace depns = > factory.createOMNamespace(Namespaces.ODE_PMAPI, "deployapi"); > OMElement root = factory.createOMElement("deploy", omn); > body.addChild(root); > OMElement namePart = factory.createOMElement("name", depns); > namePart.setText(packageName); > OMElement zipPart = factory.createOMElement("package", depns); > OMElement zipElmt = factory.createOMElement("zip", depns); > System.out.println("zip part :" + zipPart); > System.out.println("zip element :" + zipElmt); > > // Add the zip to deploy > File fileName = new File(path); > InputStream istream = new FileInputStream(fileName); > System.out.println("stream : " + istream); > BufferedInputStream is = new BufferedInputStream(istream); > System.out.println("is :" + is); > ByteArrayOutputStream outputStream = new > ByteArrayOutputStream(); > byte[] buffer = new byte[4096]; > int len; > while ((len = is.read(buffer)) >= 0) { > outputStream.write(buffer, 0, len); > } > String base64Enc = Base64.encode(outputStream.toByteArray()); > OMText zipContent = factory.createOMText(base64Enc, > "application/zip", true); > root.addChild(namePart); > root.addChild(zipPart); > zipPart.addChild(zipElmt); > zipElmt.addChild(zipContent); > System.out.println("root input :" + message); > // Deploy > InputStream instreams = null; > try { > instreams = new > StringBufferInputStream(message.toString()); > } catch (java.lang.Exception e) { > System.out.println("file not found " + e.toString()); > } > String soapresult = HttpSoapSender.doSend(new URL(" > http://127.0.0.1:8080/ode/processes/DeploymentService?wsdl"), instreams, > "1", 0, "admin", "axis2", null); > System.out.println("result :" + soapresult); > AXIOMUtil axutil = new AXIOMUtil(); > org.apache.axiom.om.OMElement result = > axutil.stringToOM(soapresult); > _deployed.clear(); > System.out.println(result); > Iterator iter = result.getChildElements(); > > while (iter.hasNext()) { > OMElement e = (OMElement) iter.next(); > e = > e.getFirstElement().getFirstElement().getFirstElement(); > System.out.println("etext : " + e.getText()); > System.out.println("local name : " + e.getLocalName()); > if (e.getLocalName().equals("name")) { > pakage = e.getText(); > System.out.println("package :" + pakage); > } > if (e.getLocalName().equals("id")) { > _deployed.add(e.getTextAsQName()); > } > } > } catch (Exception e) { > e.printStackTrace(); > } > return pakage; > } > > private OMElement sendToDeployment(OMElement msg) throws AxisFault { > return _client.send(msg, " > http://localhost:8080/ode/processes/DeploymentService?wsdl"); > } > > private OMElement sendToPM(OMElement msg) throws AxisFault { > return _client.send(msg, " > http://localhost:8080/ode/processes/ProcessManagement?wsdl"); > } > } > > Test.java : > > import java.io.IOException; > import javax.xml.stream.XMLStreamException; > public class Test { > > /** > * @param args > * @throws Exception > */ > public static void main(String[] args) throws Exception { > ODEClient client=new ODEClient(); > client.undeploy("DynPartner"); > } > > } > > On Mon, Feb 2, 2015 at 4:41 PM, Tammo van Lessen <[email protected]> > wrote: > > > Hi Marzie, > > > > if that exception occurs, it is very unlikely that it is related to any > ODE > > code. I'm afraid you need to resolve any classpath issues first. Have you > > checked if you included the correct version of Axiom (axiom-common-impl > or > > axiom-impl)? How do you call the main class? Do you use Maven? Eclipse? > > > > Best, > > Tammo > > > > On Mon, Feb 2, 2015 at 2:12 PM, Marzie Dehghanipour < > > [email protected]> wrote: > > > > > Dear Tammo, > > > > > > I always get this exception: > > > > > > Exception in thread "main" > > > > > > > > > java.lang.NoClassDefFoundError:org/apache/axiom/om/impl/AbstractOMMetaFactory > > > > > > > > > I searched on the web but I could not solve the problem. I imported all > > > necessary jars in my project but it seems that at run time it cannot > find > > > them. > > > > > > Best, > > > Marzie > > > > > > On Sun, Feb 1, 2015 at 2:42 PM, Tammo van Lessen <[email protected] > > > > > wrote: > > > > > > > Hi Marzie, > > > > > > > > what exception do you get? Without that information is difficult to > > help. > > > > > > > > Best, > > > > Tammo > > > > > > > > On Sun, Feb 1, 2015 at 8:02 AM, Marzie Dehghanipour < > > > > [email protected]> wrote: > > > > > > > > > Hi, > > > > > Yes I checked it. I also have implemented some codes that use the > > > > > deployment service but it has exception and I worked the whole week > > > but I > > > > > could not solve the problem. > > > > > > > > > > I have basically two classes: deploymentconnection.java > > > > > > > > > > import java.io.ByteArrayOutputStream; > > > > > import java.io.File; > > > > > import java.io.FileInputStream; > > > > > import java.io.FileNotFoundException; > > > > > import java.io.IOException; > > > > > import java.io.InputStream; > > > > > > > > > > import org.apache.axiom.om.OMAbstractFactory; > > > > > import org.apache.axiom.om.OMElement; > > > > > import org.apache.axiom.om.OMFactory; > > > > > import org.apache.axiom.om.OMNamespace; > > > > > import org.apache.axiom.om.OMText; > > > > > import org.apache.axiom.om.util.Base64; > > > > > import org.apache.axis2.AxisFault; > > > > > import org.apache.ode.axis2.service.ServiceClientUtil; > > > > > import org.apache.ode.utils.Namespaces; > > > > > > > > > > public class DeploymentConnection { > > > > > private final String _url; > > > > > private OMFactory _factory; > > > > > private ServiceClientUtil _client; > > > > > private final OMNamespace _pmapi; > > > > > > > > > > public DeploymentConnection(String url) { > > > > > _url = url; > > > > > _factory = OMAbstractFactory.getOMFactory(); > > > > > _client = new ServiceClientUtil(); > > > > > _pmapi = _factory.createOMNamespace(" > > > > > http://www.apache.org/ode/pmapi", > > > > > "pmapi"); > > > > > } > > > > > > > > > > public void deploy(File archive, String name) throws > > > > > FileNotFoundException, IOException { > > > > > > > > > > // Use the factory to create three elements > > > > > OMElement root = _factory.createOMElement("deploy", > _pmapi); > > > > > OMElement namePart = _factory.createOMElement("name", > null); > > > > > namePart.setText(name); > > > > > OMElement zipPart = _factory.createOMElement("package", > > null); > > > > > OMElement zipElmt = _factory.createOMElement("zip", null); > > > > > > > > > > InputStream is = new FileInputStream(archive.getPath()); > > > > > ByteArrayOutputStream outputStream = new > > > > > ByteArrayOutputStream((int) archive.length()); > > > > > byte[] buffer = new byte[4096]; > > > > > int len; > > > > > while ((len = is.read(buffer)) >= 0) { > > > > > outputStream.write(buffer, 0, len); > > > > > } > > > > > > > > > > String base64Enc = > Base64.encode(outputStream.toByteArray()); > > > > > OMText zipContent = > > > > > _factory.createOMText(base64Enc,"application/zip", true); > > > > > root.addChild(namePart); > > > > > root.addChild(zipPart); > > > > > zipPart.addChild(zipElmt); > > > > > zipElmt.addChild(zipContent); > > > > > > > > > > sendToDeployment(root); > > > > > } > > > > > > > > > > public void undeploy(String packageName) throws IOException { > > > > > // Prepare undeploy message > > > > > OMNamespace pmapi = > > > > > _factory.createOMNamespace(Namespaces.ODE_PMAPI,"deployapi"); > > > > > OMElement root = _factory.createOMElement("undeploy", > pmapi); > > > > > OMElement part = _factory.createOMElement("packageName", > > null); > > > > > part.setText(packageName); > > > > > root.addChild(part); > > > > > > > > > > if (packageName != null) { > > > > > part.setText(packageName); > > > > > root.addChild(part); > > > > > sendToDeployment(root); > > > > > } > > > > > } > > > > > > > > > > private OMElement sendToDeployment(OMElement msg) throws > > AxisFault > > > { > > > > > return _client.send(msg, this._url); > > > > > } > > > > > > > > > > } > > > > > > > > > > > > > > > and my main class which uses ServiceClientUtil class for sending > the > > > > > message to Axis2 for calling the deploy function. ServiceClientUtil > > is > > > > the > > > > > class which I found it on Github and this is an interface for > making > > it > > > > > easier to use the API : main.java > > > > > > > > > > > > > > > import java.io.File; > > > > > import java.io.FileNotFoundException; > > > > > import java.io.IOException; > > > > > import java.util.logging.Level; > > > > > import java.util.logging.Logger; > > > > > > > > > > public class Main { > > > > > public static void main(String[] args) throws > > > FileNotFoundException { > > > > > DeploymentConnection con = new DeploymentConnection(" > > > > > http://localhost:8080/ode/processes/DeploymentService"); > > > > > try { > > > > > con.deploy(new File("C:\\temp\\DynPartner.zip"), > > > > "DynPartner"); > > > > > } catch (IOException ex) { > > > > > > > //Logger.getLogger(Main.class.getName()).log(Level.SEVERE, > > > > > null,ex); > > > > > ex.printStackTrace(); > > > > > }}} > > > > > > > > > > I do appreciate if someone can help me. It makes me crazy and I was > > > > working > > > > > the last 2 weeks on it. > > > > > > > > > > On Sun, Feb 1, 2015 at 4:15 AM, Sathwik B P <[email protected]> > > > > wrote: > > > > > > > > > > > Did you check fileupload.jsp > > > > > > > > > > > > On Sat, Jan 31, 2015 at 8:19 PM, Marzie Dehghanipour < > > > > > > [email protected]> wrote: > > > > > > > > > > > > > Dear Sathwik, > > > > > > > > > > > > > > Thanks a lot for your answer. I know already the concept. but I > > > need > > > > > some > > > > > > > implementation sample. > > > > > > > > > > > > > > Thanks > > > > > > > > > > > > > > On Sat, Jan 31, 2015 at 2:29 PM, Sathwik B P < > > [email protected] > > > > > > > > > > wrote: > > > > > > > > > > > > > > > Hi Marzie, > > > > > > > > > > > > > > > > You basically need to read the process artifact (zip file) > and > > > > encode > > > > > > it > > > > > > > > with Base64 and use it as the payload contents for deploy > > > operation > > > > > of > > > > > > > > Deployment Service. > > > > > > > > > > > > > > > > Have a look at fileupload.jsp under ODE webapp. > > > > > > > > > > > > > > > > regards, > > > > > > > > sathwik > > > > > > > > > > > > > > > > On Sat, Jan 31, 2015 at 6:42 PM, Marzie Dehghanipour < > > > > > > > > [email protected]> wrote: > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > I am looking for sample implementation of deploying a > process > > > on > > > > > > Apache > > > > > > > > ODE > > > > > > > > > engine using deployment service API. I want to use the > > > deployment > > > > > API > > > > > > > > > exposed by ODE. This allows for transferring deployment > units > > > > (zip > > > > > > > files > > > > > > > > > containing BPELs, WSDLs, DDs) via SOAP to ODE and starting > > the > > > > > > > > deployment. > > > > > > > > > > > > > > > > > > Any help in this regard would be appreciated. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Tammo van Lessen - http://www.taval.de > > > > > > > > > > > > > > > -- > > Tammo van Lessen - http://www.taval.de > > > -- Tammo van Lessen - http://www.taval.de
