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.providers.ejb;
059:
060: import java.security.AccessController;
061: import java.security.PrivilegedAction;
062: import java.util.Iterator;
063: import java.util.List;
064:
065: import javax.wsdl.Binding;
066: import javax.wsdl.Definition;
067: import javax.wsdl.Port;
068: import javax.wsdl.Service;
069:
070: import org.apache.wsif.WSIFException;
071: import org.apache.wsif.WSIFPort;
072: import org.apache.wsif.logging.Trc;
073: import org.apache.wsif.providers.WSIFDynamicTypeMap;
074: import org.apache.wsif.spi.WSIFProvider;
075: import org.apache.wsif.wsdl.extensions.ejb.EJBBinding;
076:
077: /**
078: * EJB specific provider of dynamic WSDL invocations.
079: *
080: * @author <a href="mailto:gpfau@de.ibm.com">Gerhard Pfau</a>
081: * Based on DynamicWSIFProvider_ApacheSOAP by Aleksander Slominski
082: * @author Owen Burroughs <owenb@apache.org>
083: * @author Jeremy Hughes <hughesj@apache.org>
084: */
085: public class WSIFDynamicProvider_EJB implements WSIFProvider {
086:
087: private static final String ejb = "http://schemas.xmlsoap.org/wsdl/ejb/";
088: private static String[] bindings = new String[0];
089: private static String[] addresses = new String[0];
090: private static boolean setUpBindings = false;
091: private static boolean setUpAddresses = false;
092:
093: public WSIFDynamicProvider_EJB() {
094: Trc.entry(this );
095: if (!setUpBindings) {
096: setUpBindingNamespaceURIs();
097: }
098: if (!setUpAddresses) {
099: setUpAddressNamespaceURIs();
100: }
101: Trc.exit();
102: }
103:
104: /**
105: * Check if WSDL port has EJB binding and if successful try
106: * to create EJB port instance.
107: */
108: public WSIFPort createDynamicWSIFPort(Definition def,
109: Service service, Port port, WSIFDynamicTypeMap typeMap)
110: throws WSIFException {
111: Trc.entry(this , def, service, port, typeMap);
112:
113: // check that Port binding has EJB binding extensibility element
114: Binding binding = port.getBinding();
115: List exs = binding.getExtensibilityElements();
116: for (Iterator i = exs.iterator(); i.hasNext();) {
117: Object o = i.next();
118: if (o instanceof EJBBinding) {
119: // if so try to create EJB dynamic port instance
120: WSIFPort wp = new WSIFPort_EJB(def, port, typeMap);
121: Trc.exit(wp);
122: return wp;
123: }
124: }
125:
126: // otherwise return null (so other providers can be checked)
127: Trc.exit();
128: return null;
129: }
130:
131: /**
132: * Returns the WSDL namespace URIs of any bindings this provider supports.
133: * @return an array of all binding namespaces supported by this provider
134: */
135: public String[] getBindingNamespaceURIs() {
136: Trc.entry(this );
137: Trc.exit(bindings);
138: return bindings;
139: }
140:
141: /**
142: * Returns the WSDL namespace URIs of any port addresses this provider supports.
143: * @return an array of all address namespaces supported by this provider
144: */
145: public String[] getAddressNamespaceURIs() {
146: Trc.entry(this );
147: Trc.exit(addresses);
148: return addresses;
149: }
150:
151: private void setUpBindingNamespaceURIs() {
152: // check if the ejb classes are available, if not then we cannot
153: // support ejb bindings!
154: Class cls = (Class) AccessController
155: .doPrivileged(new PrivilegedAction() {
156: public Object run() {
157: try {
158: return Class.forName("javax.ejb.EJBHome",
159: true, Thread.currentThread()
160: .getContextClassLoader());
161: } catch (Throwable ignored) {
162: Trc.ignoredException(ignored);
163: }
164: return null;
165: }
166: });
167: if (cls != null) {
168: bindings = new String[] { ejb };
169: }
170: setUpBindings = true;
171: }
172:
173: private void setUpAddressNamespaceURIs() {
174: // check if the ejb classes are available, if not then we cannot
175: // support ejb addresses!
176: Class cls = (Class) AccessController
177: .doPrivileged(new PrivilegedAction() {
178: public Object run() {
179: try {
180: return Class.forName("javax.ejb.EJBHome",
181: true, Thread.currentThread()
182: .getContextClassLoader());
183: } catch (Throwable ignored) {
184: Trc.ignoredException(ignored);
185: }
186: return null;
187: }
188: });
189:
190: if (cls != null) {
191: addresses = new String[] { ejb };
192: }
193: setUpAddresses = true;
194: }
195: }
|