001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: */
019:
020: package org.apache.axis2.description;
021:
022: import org.apache.axis2.AxisFault;
023: import org.apache.commons.logging.Log;
024: import org.apache.commons.logging.LogFactory;
025: import org.apache.woden.wsdl20.Endpoint;
026: import org.apache.woden.wsdl20.Service;
027:
028: import java.io.InputStream;
029: import java.util.ArrayList;
030: import java.util.List;
031:
032: /**
033: * Extends the WSDL20ToAxisServiceBuilder class to provide functionality to return
034: * multiple AxisService objects; one for each endpoint on each service in the WSDL 2.0 file.
035: */
036: public class WSDL20ToAllAxisServicesBuilder extends
037: WSDL20ToAxisServiceBuilder {
038: protected static final Log log = LogFactory
039: .getLog(WSDL20ToAllAxisServicesBuilder.class);
040:
041: private ArrayList axisServices = null;
042:
043: /**
044: * Class constructor.
045: *
046: * @param in - Contains the wsdl 2.0 file
047: */
048: public WSDL20ToAllAxisServicesBuilder(InputStream in) {
049: super (in, null, null);
050: axisServices = new ArrayList(); // create an empty ArrayList
051: }
052:
053: /**
054: * Public method to access the wsdl 2.0 file and create a List of AxisService objects.
055: * For each endpoint on each service in the wsdl, an AxisService object is created and
056: * added to the List. The name of the AxisService is changed from the service name
057: * to the the following: <service name>#<endpoint name>. Note that the endpoint name
058: * is not unique to a wsdl 2.0 file. Multiple services in the file may have endpoints
059: * with the same name. Therefore the name of the AxisService needs to be a combination
060: * of service/endpoint name to be unique to the wsdl.
061: *
062: * @return A List containing one AxisService object for each port in the wsdl file.
063: * The name of the AxisService is modified to uniquely represent the service/endpoint
064: * pair. The format of the name is "<wsdl service name>#<wsdl endpoint name>"
065: * @throws AxisFault
066: */
067: public List populateAllServices() throws AxisFault {
068: try {
069: if (log.isDebugEnabled()) {
070: log.debug("Entry: populateAllServices");
071: }
072: setup(); // setup contains code with gathers non-service specific info
073: // from the WSDL. This only needs to be done once per WSDL.
074: if (description == null) {
075: if (log.isDebugEnabled()) {
076: log
077: .debug("Exit: populateAllServices. wsdl description is null!");
078: }
079: return null; // can't go any further without the wsdl
080: }
081: Service[] services = description.getServices();
082: for (int i = 0; i < services.length; i++) {
083: Service service = services[i];
084: // set the serviceName on the parent to setup call to populateService
085: serviceName = service.getName();
086: this .axisService = new AxisService();
087: AxisService retAxisService = populateService();
088: if (retAxisService != null) {
089: axisServices.add(retAxisService);
090: } // end if axisService was returned
091: } // end for all ports of a service
092: if (log.isDebugEnabled()) {
093: log.debug("Exit: populateAllServices.");
094: }
095: return axisServices;
096: } catch (AxisFault e) {
097: throw e; // just rethrow any AxisFaults
098: } catch (Exception e) {
099: if (log.isDebugEnabled()) {
100: log
101: .debug("populateAllServices caught Exception. Converting to AxisFault. "
102: + e.toString());
103: }
104: throw AxisFault.makeFault(e);
105: }
106: }
107:
108: }
|