KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > wsif > providers > ejb > WSIFDynamicProvider_EJB


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2002 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Apache Software Foundation (http://www.apache.org/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "WSIF" and "Apache Software Foundation" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact apache@apache.org.
31  *
32  * 5. Products derived from this software may not be called "Apache",
33  * nor may "Apache" appear in their name, without prior written
34  * permission of the Apache Software Foundation.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  * ====================================================================
49  *
50  * This software consists of voluntary contributions made by many
51  * individuals on behalf of the Apache Software Foundation and was
52  * originally based on software copyright (c) 2001, 2002, International
53  * Business Machines, Inc., http://www.apache.org. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  */

57
58 package org.apache.wsif.providers.ejb;
59
60 import java.security.AccessController JavaDoc;
61 import java.security.PrivilegedAction JavaDoc;
62 import java.util.Iterator JavaDoc;
63 import java.util.List JavaDoc;
64
65 import javax.wsdl.Binding;
66 import javax.wsdl.Definition;
67 import javax.wsdl.Port;
68 import javax.wsdl.Service;
69
70 import org.apache.wsif.WSIFException;
71 import org.apache.wsif.WSIFPort;
72 import org.apache.wsif.logging.Trc;
73 import org.apache.wsif.providers.WSIFDynamicTypeMap;
74 import org.apache.wsif.spi.WSIFProvider;
75 import org.apache.wsif.wsdl.extensions.ejb.EJBBinding;
76
77 /**
78  * EJB specific provider of dynamic WSDL invocations.
79  *
80  * @author <a HREF="mailto:gpfau@de.ibm.com">Gerhard Pfau</a>
81  * Based on DynamicWSIFProvider_ApacheSOAP by Aleksander Slominski
82  * @author Owen Burroughs <owenb@apache.org>
83  * @author Jeremy Hughes <hughesj@apache.org>
84  */

85 public class WSIFDynamicProvider_EJB implements WSIFProvider {
86
87     private static final String JavaDoc ejb = "http://schemas.xmlsoap.org/wsdl/ejb/";
88     private static String JavaDoc[] bindings = new String JavaDoc[0];
89     private static String JavaDoc[] addresses = new String JavaDoc[0];
90     private static boolean setUpBindings = false;
91     private static boolean setUpAddresses = false;
92
93     public WSIFDynamicProvider_EJB() {
94         Trc.entry(this);
95         if (!setUpBindings) {
96             setUpBindingNamespaceURIs();
97         }
98         if (!setUpAddresses) {
99             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(
109         Definition def,
110         Service service,
111         Port port,
112         WSIFDynamicTypeMap typeMap)
113         throws WSIFException {
114         Trc.entry(this, def, service, port, typeMap);
115
116         // check that Port binding has EJB binding extensibility element
117
Binding binding = port.getBinding();
118         List JavaDoc exs = binding.getExtensibilityElements();
119         for (Iterator JavaDoc i = exs.iterator(); i.hasNext();) {
120             Object JavaDoc o = i.next();
121             if (o instanceof EJBBinding) {
122                 // if so try to create EJB dynamic port instance
123
WSIFPort wp = new WSIFPort_EJB(def, port, typeMap);
124                 Trc.exit(wp);
125                 return wp;
126             }
127         }
128
129         // otherwise return null (so other providers can be checked)
130
Trc.exit();
131         return null;
132     }
133
134     /**
135      * Returns the WSDL namespace URIs of any bindings this provider supports.
136      * @return an array of all binding namespaces supported by this provider
137      */

138     public String JavaDoc[] getBindingNamespaceURIs() {
139         Trc.entry(this);
140         Trc.exit(bindings);
141         return bindings;
142     }
143
144     /**
145      * Returns the WSDL namespace URIs of any port addresses this provider supports.
146      * @return an array of all address namespaces supported by this provider
147      */

148     public String JavaDoc[] getAddressNamespaceURIs() {
149         Trc.entry(this);
150         Trc.exit(addresses);
151         return addresses;
152     }
153
154     private void setUpBindingNamespaceURIs() {
155         // check if the ejb classes are available, if not then we cannot
156
// support ejb bindings!
157
Class JavaDoc cls =
158             (Class JavaDoc) AccessController.doPrivileged(new PrivilegedAction JavaDoc() {
159             public Object JavaDoc run() {
160                 try {
161                     return Class.forName(
162                         "javax.ejb.EJBHome",
163                         true,
164                         Thread.currentThread().getContextClassLoader());
165                 } catch (Throwable JavaDoc ignored) {
166                     Trc.ignoredException(ignored);
167                 }
168                 return null;
169             }
170         });
171         if (cls != null) {
172             bindings = new String JavaDoc[] { ejb };
173         }
174         setUpBindings = true;
175     }
176
177     private void setUpAddressNamespaceURIs() {
178         // check if the ejb classes are available, if not then we cannot
179
// support ejb addresses!
180
Class JavaDoc cls =
181             (Class JavaDoc) AccessController.doPrivileged(new PrivilegedAction JavaDoc() {
182             public Object JavaDoc run() {
183                 try {
184                     return Class.forName(
185                         "javax.ejb.EJBHome",
186                         true,
187                         Thread.currentThread().getContextClassLoader());
188                 } catch (Throwable JavaDoc ignored) {
189                     Trc.ignoredException(ignored);
190                 }
191                 return null;
192             }
193         });
194                 
195         if (cls != null) {
196             addresses = new String JavaDoc[] { ejb };
197         }
198         setUpAddresses = true;
199     }
200 }
Popular Tags