001: /*
002: * The Apache Software License, Version 1.1
003: *
004: *
005: * Copyright (c) 2002 The Apache Software Foundation. All rights
006: * reserved.
007: *
008: * Redistribution and use in source and binary forms, with or without
009: * modification, are permitted provided that the following conditions
010: * are met:
011: *
012: * 1. Redistributions of source code must retain the above copyright
013: * notice, this list of conditions and the following disclaimer.
014: *
015: * 2. Redistributions in binary form must reproduce the above copyright
016: * notice, this list of conditions and the following disclaimer in
017: * the documentation and/or other materials provided with the
018: * distribution.
019: *
020: * 3. The end-user documentation included with the redistribution,
021: * if any, must include the following acknowledgment:
022: * "This product includes software developed by the
023: * Apache Software Foundation (http://www.apache.org/)."
024: * Alternately, this acknowledgment may appear in the software itself,
025: * if and wherever such third-party acknowledgments normally appear.
026: *
027: * 4. The names "WSIF" and "Apache Software Foundation" must
028: * not be used to endorse or promote products derived from this
029: * software without prior written permission. For written
030: * permission, please contact apache@apache.org.
031: *
032: * 5. Products derived from this software may not be called "Apache",
033: * nor may "Apache" appear in their name, without prior written
034: * permission of the Apache Software Foundation.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
040: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: * ====================================================================
049: *
050: * This software consists of voluntary contributions made by many
051: * individuals on behalf of the Apache Software Foundation and was
052: * originally based on software copyright (c) 2001, 2002, International
053: * Business Machines, Inc., http://www.apache.org. For more
054: * information on the Apache Software Foundation, please see
055: * <http://www.apache.org/>.
056: */
057:
058: package org.apache.wsif.base;
059:
060: import java.util.ArrayList;
061: import java.util.Iterator;
062: import java.util.List;
063:
064: import org.apache.wsif.WSIFException;
065: import org.apache.wsif.WSIFConstants;
066: import org.apache.wsif.WSIFMessage;
067: import org.apache.wsif.WSIFPort;
068: import org.apache.wsif.logging.Trc;
069:
070: /**
071: * A DefaultWSIFPort is a default implementation of WSIFPort
072: * all methods are implemented except execute*.
073: *
074: * @author Paul Fremantle
075: * @author Alekander Slominski
076: * @author Matthew J. Duftler
077: * @author Sanjiva Weerawarana
078: * @author Nirmal Mukhi
079: */
080: public abstract class WSIFDefaultPort implements WSIFPort {
081: private static final long serialVersionUID = 1L;
082:
083: private WSIFMessage context;
084:
085: public void close() throws WSIFException {
086: Trc.entry(this );
087: Trc.exit();
088: }
089:
090: public void finalize() throws Throwable {
091: Trc.entry(this );
092: try {
093: close();
094: } catch (WSIFException ex) {
095: Trc.ignoredException(ex);
096: }
097: super .finalize();
098: Trc.exit();
099: }
100:
101: /**
102: * Utility method to return key suitable for hash table.
103: */
104: protected String getKey(String name, String inputName,
105: String outputName) {
106: Trc.entry(this , name, inputName, outputName);
107: String s = name + (inputName != null ? ":" + inputName : "")
108: + (outputName != null ? ":" + outputName : "");
109: Trc.exit(s);
110: return s;
111: }
112:
113: /**
114: * Utility method to retrieve extensibility element from list
115: * checks also that it is exactly one extensibility element.
116: */
117: protected Object getExtElem(Object ctx, Class extType, List extElems)
118: throws WSIFException {
119: Trc.entry(this , ctx, extType, extElems);
120:
121: Object found = null;
122: if (extElems != null) {
123: for (Iterator i = extElems.iterator(); i.hasNext();) {
124: // if so return new
125: Object o = i.next();
126: if (extType.isAssignableFrom(o.getClass())) {
127: if (found != null) {
128: throw new WSIFException(
129: "duplicated extensibility element "
130: + extType.getClass().getName()
131: + " in " + ctx);
132: }
133: found = o;
134: }
135: }
136: }
137: Trc.exit(found);
138: return found;
139: }
140:
141: /**
142: * Utility method to retrieve multiple extensibility elements from a list.
143: */
144: protected List getExtElems(Object ctx, Class extType, List extElems)
145: throws WSIFException {
146: Trc.entry(this , ctx, extType, extElems);
147: List found = new ArrayList();
148: if (extElems != null)
149: for (Iterator i = extElems.iterator(); i.hasNext();) {
150: Object o = i.next();
151: if (extType.isAssignableFrom(o.getClass()))
152: found.add(o);
153: }
154: if (found.size() == 0)
155: return null;
156: Trc.exit(found);
157: return found;
158: }
159:
160: /**
161: * Tests if this port supports synchronous calls to operations.
162: *
163: * @return true by default WSIFPorts do support synchronous calls
164: */
165: public boolean supportsSync() {
166: Trc.entry(this );
167: Trc.exit(true);
168: return true;
169: }
170:
171: /**
172: * Tests if this port supports asynchronous calls to operations.
173: *
174: * @return false by default ports do not support asynchronous calls
175: */
176: public boolean supportsAsync() {
177: Trc.entry(this );
178: Trc.exit(false);
179: return false;
180: }
181:
182: /**
183: * Gets the context information for this WSIFPort.
184: * @return context
185: */
186: public WSIFMessage getContext() throws WSIFException {
187: Trc.entry(this );
188: WSIFMessage contextCopy;
189: if (this .context == null) {
190: // really this should call getContext on the WSIFService but
191: // theres no reference to that so WSIFService must call setContext
192: // on any WSIFPorts it creates.
193: contextCopy = new WSIFDefaultMessage();
194: } else {
195: try {
196: contextCopy = (WSIFMessage) this .context.clone();
197: } catch (CloneNotSupportedException e) {
198: throw new WSIFException(
199: "CloneNotSupportedException cloning context", e);
200: }
201: }
202: Trc.exit(contextCopy);
203: return contextCopy;
204: }
205:
206: /**
207: * Sets the context information for this WSIFPort.
208: * @param WSIFMessage the new context information
209: */
210: public void setContext(WSIFMessage context) {
211: Trc.entry(this , context);
212: if (context == null) {
213: throw new IllegalArgumentException(
214: "context must not be null");
215: }
216: this.context = context;
217: Trc.exit(null);
218: }
219:
220: }
|