KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > soap > server > ServerUtils


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 2000 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 "SOAP" 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) 2000, 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.soap.server;
59
60 import java.io.*;
61 import java.util.*;
62 import java.lang.reflect.*;
63 import javax.activation.*;
64 import javax.mail.BodyPart JavaDoc;
65 import javax.mail.MessagingException JavaDoc;
66 import javax.mail.internet.*;
67 import javax.servlet.*;
68 import javax.xml.parsers.*;
69 import org.w3c.dom.* ;
70 import org.apache.soap.*;
71 import org.apache.soap.rpc.*;
72 import org.apache.soap.server.http.*;
73 import org.apache.soap.util.*;
74 import org.apache.soap.util.xml.*;
75 import org.apache.soap.util.mime.*;
76 import org.apache.soap.transport.EnvelopeEditor;
77 import org.apache.soap.transport.TransportMessage;
78
79 /**
80  * Any utility stuff for transport type-independent SOAP stuff.
81  *
82  * @author Sanjiva Weerawarana
83  * @author Wouter Cloetens
84  */

85 public class ServerUtils {
86     /**
87      * Read in stuff from the request stream and return the envelope.
88      * Returns null (and sets the error on the response stream) if a
89      * transport level thing is wrong and throws a SOAPException if a
90      * SOAP level thing is wrong.
91      *
92      * @return Envelope containing the SOAP envelope found in the request
93      *
94      * @exception SOAPException if a SOAP level thing goes wrong
95      */

96     public static Envelope readEnvelopeFromInputStream (DocumentBuilder xdb,
97                                                         InputStream is,
98                                                         int contentLength,
99                                                         String JavaDoc contentType,
100                                                         EnvelopeEditor editor,
101                                                         SOAPContext ctx)
102         throws SOAPException, IOException,
103         IllegalArgumentException JavaDoc, MessagingException JavaDoc {
104         // Read input stream.
105
TransportMessage reqMsg = new TransportMessage(is, contentLength,
106                                                        contentType, ctx,
107                                                        null);
108         // Extract envelope and SOAPContext
109
reqMsg.read();
110         // Check Content-Type of root part of request to see if it's
111
// consistent with a SOAP envelope (text/xml).
112
MimeBodyPart rootPart = ctx.getRootPart();
113         if (!rootPart.isMimeType(Constants.HEADERVAL_CONTENT_TYPE))
114             throw new SOAPException(Constants.FAULT_CODE_PROTOCOL,
115                 "Unsupported content type \"" +
116                 rootPart.getContentType() + "\", must be: \"" +
117                 Constants.HEADERVAL_CONTENT_TYPE + "\".");
118         // Apply Transport-Hook-Extension
119
reqMsg.editIncoming(editor);
120         // Parse into Envelope.
121
return reqMsg.unmarshall(xdb);
122     }
123
124     public static Provider loadProvider(DeploymentDescriptor dd,
125                                         SOAPContext ctxt)
126                                           throws SOAPException {
127         String JavaDoc className ;
128         Class JavaDoc c ;
129         Object JavaDoc newObj ;
130
131         className = dd.getServiceClass();
132         if (className == null)
133             return null;
134
135         if (className.equals("java"))
136             className = "org.apache.soap.providers.RPCJavaProvider";
137         else if (className.equals("script"))
138             className = "org.apache.soap.providers.RPCJavaProvider";
139
140         try {
141           c = ctxt.loadClass( className );
142           newObj = c.newInstance();
143         } catch(Exception JavaDoc exp) {
144             throw new SOAPException(Constants.FAULT_CODE_SERVER,
145                                     "Can't load provider '" + className + "'",
146                                     exp);
147         }
148
149         if (!(newObj instanceof Provider))
150             throw new SOAPException(Constants.FAULT_CODE_SERVER,
151                                     "'" + className + "' isn't a provider");
152
153         return (Provider)newObj;
154     }
155 }
156
Popular Tags