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 2006/08/16 22:01:54 UTC
svn commit: r432013 - in
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description:
WSDL11ToAllAxisServicesBuilder.java WSDL20ToAllAxisServicesBuilder.java
Author: dims
Date: Wed Aug 16 13:01:54 2006
New Revision: 432013
URL: http://svn.apache.org/viewvc?rev=432013&view=rev
Log:
Fix for AXIS2-965 - Need a way to build AxisServices for all ports/services in a wsld.
Added:
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL20ToAllAxisServicesBuilder.java
Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java?rev=432013&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAllAxisServicesBuilder.java Wed Aug 16 13:01:54 2006
@@ -0,0 +1,139 @@
+/*
+ * 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.axis2.description;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.Service;
+import javax.wsdl.WSDLException;
+import javax.xml.namespace.QName;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Extends the WSDL11ToAxisServiceBuilder class to provide functionality to return
+ * multiple AxisService objects; one for each port on each service in the WSDL 1.1 file.
+ *
+ */
+public class WSDL11ToAllAxisServicesBuilder extends WSDL11ToAxisServiceBuilder {
+ protected static final Log log =
+ LogFactory.getLog(WSDL11ToAllAxisServicesBuilder.class);
+
+ public static final String WSDL_SERVICE_QNAME = "WSDL_SERVICE_QNAME";
+
+ public static final String WSDL_PORT = "WSDL_PORT";
+
+ private ArrayList axisServices = null;
+
+ /**
+ * Class constructor.
+ * @param in - Contains the wsdl 1.1 file
+ */
+ public WSDL11ToAllAxisServicesBuilder(InputStream in) {
+ super(in);
+ axisServices = new ArrayList(); // create an empty ArrayList
+ }
+
+ /**
+ * Public method to access the wsdl 1.1 file and create a List of AxisService objects.
+ * For each port on each service in the wsdl, an AxisService object is created and
+ * added to the List. The name of the AxisService is changed from the service name
+ * to the port name, since port names are unique to the wsdl.
+ * @return A List containing one AxisService object for each port in the wsdl file.
+ * The name of the AxisService is modified from the service name to the port name.
+ * @throws AxisFault
+ */
+ public List populateAllServices() throws AxisFault {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Entry: populateAllServices");
+ }
+
+ setup(); // setup contains code with gathers non-service specific info
+ // from the WSDL. This only needs to be done once per WSDL.
+ if (wsdl4jDefinition == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Exit: populateAllServices. wsdl definition is null!");
+ }
+ return null; // can't go any further without the wsdl
+ }
+ Iterator wsdlServIter = wsdl4jDefinition.getServices().entrySet().iterator();
+
+ while (wsdlServIter.hasNext()) {
+ Entry entry = (Entry) wsdlServIter.next();
+ Service service = (Service) entry.getValue();
+ // set the serviceName on the parent to setup call to populateService
+ serviceName = service.getQName();
+ Iterator wsdlPortIter = service.getPorts().entrySet().iterator();
+ while (wsdlPortIter.hasNext()) {
+ Entry portEntry = (Entry) wsdlPortIter.next();
+ Port port = (Port) portEntry.getValue();
+ portName = port.getName();
+ // start with a fresh axisService
+ this.axisService = new AxisService();
+ // now that serviceName and portName are set, call up to the
+ // parent class to populate this service.
+ AxisService retAxisService = populateService();
+ if (retAxisService != null) {
+ // save off the wsdl service QName as a parameter.
+ Parameter serviceNameParameter = new Parameter();
+ serviceNameParameter.setName(WSDL_SERVICE_QNAME);
+ serviceNameParameter.setValue(serviceName);
+ retAxisService.addParameter(serviceNameParameter);
+ // Also save off the javax.wsdl.Port object that this AxisService
+ // represents.
+ Parameter portParameter = new Parameter();
+ portParameter.setName(WSDL_PORT);
+ portParameter.setValue(port);
+ retAxisService.addParameter(portParameter);
+ // since this AxisService really represents the wsdl
+ // port, change the name
+ // from wsdl service name to port name.
+ retAxisService.setName(portName); // TODO: mangle name????
+
+ axisServices.add(retAxisService);
+ } // end if axisService was returned
+ } // end for all ports of a service
+ } // end for all services in the wsdl
+
+ if (log.isDebugEnabled()) {
+ log.debug("Exit: populateAllServices.");
+ }
+ return axisServices;
+ } catch (AxisFault e) {
+ throw e; // just rethrow any AxisFaults
+ } catch (Exception e) {
+ if (log.isDebugEnabled()) {
+ log.debug("populateAllServices caught Exception. Converting to AxisFault. " + e.toString());
+ }
+ throw new AxisFault(e);
+ }
+ }
+
+}
Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL20ToAllAxisServicesBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL20ToAllAxisServicesBuilder.java?rev=432013&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL20ToAllAxisServicesBuilder.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL20ToAllAxisServicesBuilder.java Wed Aug 16 13:01:54 2006
@@ -0,0 +1,121 @@
+/*
+ * 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.axis2.description;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import org.apache.woden.wsdl20.Description;
+import org.apache.woden.wsdl20.Endpoint;
+import org.apache.woden.wsdl20.Interface;
+import org.apache.woden.wsdl20.Service;
+
+
+import javax.wsdl.WSDLException;
+
+import org.apache.axis2.AxisFault;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Extends the WSDL20ToAxisServiceBuilder class to provide functionality to return
+ * multiple AxisService objects; one for each endpoint on each service in the WSDL 2.0 file.
+ *
+ */
+public class WSDL20ToAllAxisServicesBuilder extends WSDL20ToAxisServiceBuilder {
+ protected static final Log log =
+ LogFactory.getLog(WSDL20ToAllAxisServicesBuilder.class);
+
+ private ArrayList axisServices = null;
+
+ /**
+ * Class constructor.
+ * @param in - Contains the wsdl 2.0 file
+ */
+ public WSDL20ToAllAxisServicesBuilder(InputStream in) {
+ super(in, null, null);
+ axisServices = new ArrayList(); // create an empty ArrayList
+ }
+
+ /**
+ * Public method to access the wsdl 2.0 file and create a List of AxisService objects.
+ * For each endpoint on each service in the wsdl, an AxisService object is created and
+ * added to the List. The name of the AxisService is changed from the service name
+ * to the the following: <service name>#<endpoint name>. Note that the endpoint name
+ * is not unique to a wsdl 2.0 file. Multiple services in the file may have endpoints
+ * with the same name. Therefore the name of the AxisService needs to be a combination
+ * of service/endpoint name to be unique to the wsdl.
+ * @return A List containing one AxisService object for each port in the wsdl file.
+ * The name of the AxisService is modified to uniquely represent the service/endpoint
+ * pair. The format of the name is "<wsdl service name>#<wsdl endpoint name>"
+ * @throws AxisFault
+ */
+ public List populateAllServices() throws AxisFault {
+ try {
+ if (log.isDebugEnabled()) {
+ log.debug("Entry: populateAllServices");
+ }
+ setup(); // setup contains code with gathers non-service specific info
+ // from the WSDL. This only needs to be done once per WSDL.
+ if (description == null) {
+ if (log.isDebugEnabled()) {
+ log.debug("Exit: populateAllServices. wsdl description is null!");
+ }
+ return null; // can't go any further without the wsdl
+ }
+ Service[] services = description.getServices();
+ for (int i = 0; i < services.length; i++) {
+ Service service = services[i];
+ // set the serviceName on the parent to setup call to populateService
+ serviceName = service.getName();
+ Endpoint[] endpoints = service.getEndpoints();
+ for (int j = 0; j < endpoints.length; j++) {
+ interfaceName = endpoints[j].getName().toString();
+ // start with a fresh axisService
+ this.axisService = new AxisService();
+ // now that serviceName and interfaceName are set, call up to the
+ // parent class to populate this service.
+ AxisService retAxisService = populateService();
+ if (retAxisService != null) {
+ // since this AxisService really represents the wsdl
+ // port, change the name
+ // from wsdl service name to port name.
+ // TODO: mangle name?
+ retAxisService.setName(retAxisService.getName() + "$" + interfaceName); // TODO: mangle name????
+ axisServices.add(retAxisService);
+ } // end if axisService was returned
+ } // end for all ports of a service
+ } // end for all services in the wsdl
+ if (log.isDebugEnabled()) {
+ log.debug("Exit: populateAllServices.");
+ }
+ return axisServices;
+ } catch (AxisFault e) {
+ throw e; // just rethrow any AxisFaults
+ } catch (Exception e) {
+ if (log.isDebugEnabled()) {
+ log.debug("populateAllServices caught Exception. Converting to AxisFault. " + e.toString());
+ }
+ throw new AxisFault(e);
+ }
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org