Author: boisvert Date: Mon May 21 09:11:47 2007 New Revision: 540186 URL: http://svn.apache.org/viewvc?view=rev&rev=540186 Log: Fix ODE-130: Deploying document style wsdl to Axis2 results in empty wsdl types element
Modified: incubator/ode/trunk/Rakefile incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java Modified: incubator/ode/trunk/Rakefile URL: http://svn.apache.org/viewvc/incubator/ode/trunk/Rakefile?view=diff&rev=540186&r1=540185&r2=540186 ============================================================================== --- incubator/ode/trunk/Rakefile (original) +++ incubator/ode/trunk/Rakefile Mon May 21 09:11:47 2007 @@ -94,7 +94,7 @@ WS_COMMONS = struct( :axiom =>AXIOM, :neethi =>"org.apache.ws.commons.neethi:neethi:jar:2.0", - :xml_schema =>"org.apache.ws.commons.schema:XmlSchema:jar:1.2" + :xml_schema =>"org.apache.ws.commons.schema:XmlSchema:jar:1.3.1" ) XBEAN = group("xbean-classloader", "xbean-kernel", "xbean-server", "xbean-spring", :under=>"org.apache.xbean", :version=>"2.8") @@ -133,9 +133,10 @@ compile.with projects("bpel-api", "bpel-connector", "bpel-dao", "bpel-epr", "bpel-runtime", "bpel-scheduler-quartz", "bpel-schemas", "bpel-store", "utils"), AXIOM, AXIS2, COMMONS.logging, COMMONS.collections, DERBY, GERONIMO.kernel, GERONIMO.transaction, - JAVAX.activation, JAVAX.servlet, JAVAX.stream, JAVAX.transaction, JENCKS, WSDL4J, XMLBEANS + JAVAX.activation, JAVAX.servlet, JAVAX.stream, JAVAX.transaction, JENCKS, WSDL4J, WS_COMMONS.xml_schema, + XMLBEANS - test.with project("tools"), XERCES, WOODSTOX, AXIOM, WS_COMMONS.xml_schema, JAVAX.javamail + test.with project("tools"), XERCES, WOODSTOX, AXIOM, JAVAX.javamail test.exclude '*' package :jar Modified: incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java?view=diff&rev=540186&r1=540185&r2=540186 ============================================================================== --- incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java (original) +++ incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/BindingContextImpl.java Mon May 21 09:11:47 2007 @@ -30,6 +30,7 @@ import org.apache.ode.bpel.iapi.Endpoint; import org.apache.ode.bpel.iapi.EndpointReference; import org.apache.ode.bpel.iapi.PartnerRoleChannel; +import org.apache.ode.bpel.iapi.ProcessConf; import org.apache.ode.bpel.iapi.ProcessStore; /** @@ -50,11 +51,12 @@ public EndpointReference activateMyRoleEndpoint(QName processId, Endpoint myRoleEndpoint) { try { - Definition wsdl = _store.getProcessConfiguration(processId).getDefinitionForService(myRoleEndpoint.serviceName); + ProcessConf pconf = _store.getProcessConfiguration(processId); + Definition wsdl = pconf.getDefinitionForService(myRoleEndpoint.serviceName); if (wsdl == null) throw new ContextException("Unable to access WSDL definition to activate MyRole endpoint for service " + myRoleEndpoint.serviceName + " and port " + myRoleEndpoint.portName); - ODEService svc = _server.createService(wsdl, myRoleEndpoint.serviceName, myRoleEndpoint.portName); + ODEService svc = _server.createService(pconf, myRoleEndpoint.serviceName, myRoleEndpoint.portName); return svc.getMyServiceRef(); } catch (AxisFault axisFault) { throw new ContextException("Could not activate endpoint for service " + myRoleEndpoint.serviceName Modified: incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java?view=diff&rev=540186&r1=540185&r2=540186 ============================================================================== --- incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java (original) +++ incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/ODEServer.java Mon May 21 09:11:47 2007 @@ -19,6 +19,19 @@ package org.apache.ode.axis2; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.StringTokenizer; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.sql.DataSource; +import javax.transaction.TransactionManager; +import javax.wsdl.Definition; +import javax.xml.namespace.QName; + import org.apache.axis2.AxisFault; import org.apache.axis2.description.AxisOperation; import org.apache.axis2.description.AxisService; @@ -47,18 +60,6 @@ import org.apache.ode.store.ProcessStoreImpl; import org.apache.ode.utils.fs.TempFileManager; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.sql.DataSource; -import javax.transaction.TransactionManager; -import javax.wsdl.Definition; -import javax.xml.namespace.QName; -import java.io.File; -import java.io.FileNotFoundException; -import java.util.StringTokenizer; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - /** * Server class called by our Axis hooks to handle all ODE lifecycle management. * @@ -291,13 +292,10 @@ } } - public ODEService createService(Definition def, QName serviceName, String portName) throws AxisFault { - if (_services.get(serviceName, portName) != null) { - AxisService service = ((ODEService) _services.get(serviceName, portName)).getAxisService(); - _axisConfig.removeService(service.getName()); - } - AxisService axisService = ODEAxisService.createService(_axisConfig, def, serviceName, portName); - ODEService odeService = new ODEService(axisService, def, serviceName, portName, _server, _txMgr); + public ODEService createService(ProcessConf pconf, QName serviceName, String portName) throws AxisFault { + destroyService(serviceName); + AxisService axisService = ODEAxisService.createService(_axisConfig, pconf, serviceName, portName); + ODEService odeService = new ODEService(axisService, pconf.getDefinitionForService(serviceName), serviceName, portName, _server, _txMgr); if (_odeConfig.isReplicateEmptyNS()) { __log.debug("Setting service with empty namespace replication"); odeService.setReplicateEmptyNS(true); @@ -340,12 +338,14 @@ public void destroyService(QName serviceName) { __log.debug("Destroying service " + serviceName); + ODEService service = (ODEService) _services.remove(serviceName); + if (service != null) { try { - _axisConfig.removeService(serviceName.getLocalPart()); + _axisConfig.removeService(service.getAxisService().getName()); } catch (AxisFault axisFault) { __log.error("Couldn't destroy service " + serviceName); } - _services.remove(serviceName); + } } public ODEService getService(QName serviceName, String portName) { Modified: incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java?view=diff&rev=540186&r1=540185&r2=540186 ============================================================================== --- incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java (original) +++ incubator/ode/trunk/axis2/src/main/java/org/apache/ode/axis2/hooks/ODEAxisService.java Mon May 21 09:11:47 2007 @@ -19,13 +19,11 @@ package org.apache.ode.axis2.hooks; -import org.apache.axis2.AxisFault; -import org.apache.axis2.description.AxisOperation; -import org.apache.axis2.description.AxisService; -import org.apache.axis2.description.WSDL11ToAxisServiceBuilder; -import org.apache.axis2.engine.AxisConfiguration; -import org.apache.axis2.engine.MessageReceiver; -import org.apache.ode.axis2.OdeFault; +import java.io.InputStream; +import java.net.URI; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; import javax.wsdl.Definition; import javax.wsdl.Operation; @@ -34,24 +32,50 @@ import javax.wsdl.Service; import javax.wsdl.extensions.soap.SOAPAddress; import javax.xml.namespace.QName; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; + +import org.apache.axis2.AxisFault; +import org.apache.axis2.description.AxisOperation; +import org.apache.axis2.description.AxisService; +import org.apache.axis2.description.WSDL11ToAxisServiceBuilder; +import org.apache.axis2.engine.AxisConfiguration; +import org.apache.axis2.engine.MessageReceiver; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.ode.axis2.OdeFault; +import org.apache.ode.axis2.util.Axis2UriResolver; +import org.apache.ode.axis2.util.Axis2WSDLLocator; +import org.apache.ode.bpel.iapi.ProcessConf; /** - * Implementation of Axis Service used by ODE iapi to enlist itself - * its service. Allows us to build the service using a WSDL definition - * using our own receiver. + * Implementation of Axis Service used by ODE iapi to enlist itself its service. Allows us to build the service using a + * WSDL definition using our own receiver. */ public class ODEAxisService extends AxisService { - public static AxisService createService(AxisConfiguration axisConfig, Definition wsdlDefinition, - QName wsdlServiceName, String portName) throws AxisFault { + private static final Log LOG = LogFactory.getLog(ODEAxisService.class); + + public static AxisService createService(AxisConfiguration axisConfig, ProcessConf pconf, QName wsdlServiceName, + String portName) throws AxisFault { + Definition wsdlDefinition = pconf.getDefinitionForService(wsdlServiceName); String serviceName = extractServiceName(wsdlDefinition, wsdlServiceName, portName); - WSDL11ToAxisServiceBuilder serviceBuilder = - new WSDL11ToAxisServiceBuilder(wsdlDefinition, wsdlServiceName, portName); + if (LOG.isDebugEnabled()) { + LOG.debug("Create AxisService:" + +" service="+wsdlServiceName + +" port="+portName + +" WSDL="+wsdlDefinition.getDocumentBaseURI() + +" BPEL="+pconf.getBpelDocument()); + } + + try { + URI baseUri = pconf.getBaseURL().toURI().resolve(wsdlDefinition.getDocumentBaseURI()); + InputStream is = baseUri.toURL().openStream(); + WSDL11ToAxisServiceBuilder serviceBuilder = new WSDL11ToAxisServiceBuilder(is, wsdlServiceName, portName); + serviceBuilder.setBaseUri(baseUri.toString()); + serviceBuilder.setCustomResolver(new Axis2UriResolver()); + serviceBuilder.setCustomWSLD4JResolver(new Axis2WSDLLocator(baseUri)); serviceBuilder.setServerSide(true); + AxisService axisService = serviceBuilder.populateService(); axisService.setName(serviceName); axisService.setWsdlFound(true); @@ -70,12 +94,14 @@ } } return axisService; + } catch (Exception e) { + throw new AxisFault(e); + } } public static AxisService createService(AxisConfiguration axisConfig, QName serviceQName, String port, String axisName, Definition wsdlDef, MessageReceiver receiver) throws AxisFault { - WSDL11ToAxisServiceBuilder serviceBuilder = - new WSDL11ToAxisServiceBuilder(wsdlDef, serviceQName, port); + WSDL11ToAxisServiceBuilder serviceBuilder = new WSDL11ToAxisServiceBuilder(wsdlDef, serviceQName, port); AxisService axisService = serviceBuilder.populateService(); axisService.setName(axisName); axisService.setWsdlFound(true); @@ -90,35 +116,34 @@ return axisService; } - - private static String extractServiceName(Definition wsdlDefinition, QName wsdlServiceName, String portName) throws AxisFault { + private static String extractServiceName(Definition wsdlDefinition, QName wsdlServiceName, String portName) + throws AxisFault { String url = null; Service service = wsdlDefinition.getService(wsdlServiceName); if (service == null) { - throw new OdeFault("Unable to find service " + wsdlServiceName + " from service WSDL definition " + wsdlDefinition.getDocumentBaseURI()); + throw new OdeFault("Unable to find service " + wsdlServiceName + " from service WSDL definition " + + wsdlDefinition.getDocumentBaseURI()); } Port port = service.getPort(portName); for (Object oext : port.getExtensibilityElements()) { if (oext instanceof SOAPAddress) - url = ((SOAPAddress)oext).getLocationURI(); + url = ((SOAPAddress) oext).getLocationURI(); } if (url == null) { - throw new OdeFault("Could not extract any soap:address from service WSDL definition " + wsdlServiceName + - " (necessary to establish the process target address)!"); + throw new OdeFault("Could not extract any soap:address from service WSDL definition " + wsdlServiceName + + " (necessary to establish the process target address)!"); } String serviceName = parseURLForService(url); if (serviceName == null) { - throw new OdeFault("The soap:address used for service WSDL definition " + wsdlServiceName + - " and port " + portName + " should be of the form http://hostname:port/ode/processes/myProcessEndpointName"); + throw new OdeFault("The soap:address used for service WSDL definition " + wsdlServiceName + " and port " + + portName + " should be of the form http://hostname:port/ode/processes/myProcessEndpointName"); } return serviceName; } /** - * Obtain the service name from the request URL. The request URL is - * expected to use the path "/processes/" under which all processes - * and their services are listed. Returns null if the path does not - * contain this part. + * Obtain the service name from the request URL. The request URL is expected to use the path "/processes/" under + * which all processes and their services are listed. Returns null if the path does not contain this part. */ protected static String parseURLForService(String path) { int index = path.indexOf("/processes/"); @@ -139,10 +164,10 @@ return null; } - private static void declarePartsElements(Definition wsdlDefinition, QName wsdlServiceName, - String axisServiceName, String portName) { - List wsldOps = wsdlDefinition.getService(wsdlServiceName).getPort(portName) - .getBinding().getPortType().getOperations(); + private static void declarePartsElements(Definition wsdlDefinition, QName wsdlServiceName, String axisServiceName, + String portName) { + List wsldOps = wsdlDefinition.getService(wsdlServiceName).getPort(portName).getBinding().getPortType() + .getOperations(); for (Object wsldOp : wsldOps) { Operation wsdlOp = (Operation) wsldOp; Collection parts = wsdlOp.getInput().getMessage().getParts().values(); @@ -151,9 +176,11 @@ Part part = (Part) parts.iterator().next(); // Parts are types, it's rpc/enc, no mapping needs to be declared if (part.getElementName() != null) - ODEAxisDispatcher.addElmtToOpMapping(axisServiceName, wsdlOp.getName(), part.getElementName().getLocalPart()); + ODEAxisDispatcher.addElmtToOpMapping(axisServiceName, wsdlOp.getName(), part.getElementName() + .getLocalPart()); } } } + } Modified: incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java?view=diff&rev=540186&r1=540185&r2=540186 ============================================================================== --- incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java (original) +++ incubator/ode/trunk/bpel-api/src/main/java/org/apache/ode/bpel/iapi/ProcessConf.java Mon May 21 09:11:47 2007 @@ -18,17 +18,19 @@ */ package org.apache.ode.bpel.iapi; -import org.apache.ode.bpel.evt.BpelEvent.TYPE; -import org.w3c.dom.Node; - -import javax.wsdl.Definition; -import javax.xml.namespace.QName; import java.io.File; import java.io.InputStream; +import java.net.URL; import java.util.Date; import java.util.List; import java.util.Map; +import javax.wsdl.Definition; +import javax.xml.namespace.QName; + +import org.apache.ode.bpel.evt.BpelEvent; +import org.w3c.dom.Node; + /** * Deployed process configuration. IMPORTANT: Implementations of this class <em>MUST BE IMMUTABLE</em>, * otherwise the engine will get confused. @@ -74,6 +76,11 @@ String getBpelDocument(); /** + * Get the base URL for resolving resources. + */ + URL getBaseURL(); + + /** * Get the date of deployment. * @return */ @@ -139,6 +146,6 @@ */ Map<String, Endpoint> getInvokeEndpoints(); - boolean isEventEnabled(List<String> scopeNames, TYPE type); + boolean isEventEnabled(List<String> scopeNames, BpelEvent.TYPE type); } Modified: incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java?view=diff&rev=540186&r1=540185&r2=540186 ============================================================================== --- incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java (original) +++ incubator/ode/trunk/bpel-store/src/main/java/org/apache/ode/store/ProcessConfImpl.java Mon May 21 09:11:47 2007 @@ -23,6 +23,8 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -191,6 +193,14 @@ } } + public URL getBaseURL() { + try { + return _du.getDeployDir().toURL(); + } catch (MalformedURLException except) { + throw new RuntimeException(except); + } + } + public ProcessState getState() { return _state; } @@ -330,4 +340,5 @@ if (relative.startsWith(File.separator)) relative = relative.substring(1); return relative; } + }