001    /*
002     * Copyright 2001-2004 The Apache Software Foundation.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     *      http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package javax.xml.soap;
017    
018    /**
019     * <code>SOAPFactory</code> is a factory for creating various objects
020     * that exist in the SOAP XML tree.
021     *
022     * <code>SOAPFactory</code> can be
023     * used to create XML fragments that will eventually end up in the
024     * SOAP part. These fragments can be inserted as children of the
025     * <code>SOAPHeaderElement</code> or <code>SOAPBodyElement</code> or
026     * <code>SOAPEnvelope</code>.
027     *
028     * <code>SOAPFactory</code> also has methods to create
029     * <code>javax.xml.soap.Detail</code> objects as well as
030     * <code>java.xml.soap.Name</code> objects.
031     *
032     */
033    public abstract class SOAPFactory {
034    
035        public SOAPFactory() {}
036    
037        /**
038         * Create a <code>SOAPElement</code> object initialized with the
039         * given <code>Name</code> object.
040         *
041         * @param name a <code>Name</code> object with the XML name for
042         *        the new element
043         * @return  the new <code>SOAPElement</code> object that was
044         *    created
045         * @throws SOAPException if there is an error in creating the
046         *       <code>SOAPElement</code> object
047         */
048        public abstract SOAPElement createElement(Name name) throws SOAPException;
049    
050        /**
051         * Create a <code>SOAPElement</code> object initialized with the
052         * given local name.
053         *
054         * @param localName a <code>String</code> giving the local name for
055         *       the new element
056         * @return the new <code>SOAPElement</code> object that was
057         *    created
058         * @throws SOAPException if there is an error in creating the
059         *       <code>SOAPElement</code> object
060         */
061        public abstract SOAPElement createElement(String localName) throws SOAPException;
062    
063        /**
064         * Create a new <code>SOAPElement</code> object with the given
065         * local name, prefix and uri.
066         *
067         * @param localName a <code>String</code> giving the local name
068         *            for the new element
069         * @param prefix the prefix for this <code>SOAPElement</code>
070         * @param uri a <code>String</code> giving the URI of the
071         *      namespace to which the new element belongs
072         * @return the new <code>SOAPElement</code> object that was
073         *    created
074         * @throws SOAPException if there is an error in creating the
075         *      <code>SOAPElement</code> object
076         */
077        public abstract SOAPElement createElement(String localName, String prefix, String uri)
078            throws SOAPException;
079    
080        /**
081         * Creates a new <code>Detail</code> object which serves as a container
082         * for <code>DetailEntry</code> objects.
083         * <p>
084         * This factory method creates <code>Detail</code> objects for use in
085         * situations where it is not practical to use the <code>SOAPFault</code>
086         * abstraction.
087         *
088         * @return a <code>Detail</code> object
089         * @throws SOAPException if there is a SOAP error
090         */
091        public abstract Detail createDetail() throws SOAPException;
092    
093        /**
094         * Creates a new <code>Name</code> object initialized with the
095         * given local name, namespace prefix, and namespace URI.
096         * <p>
097         * This factory method creates <code>Name</code> objects for use in
098         * situations where it is not practical to use the <code>SOAPEnvelope</code>
099         * abstraction.
100         *
101         * @param localName a <code>String</code> giving the local name
102         * @param prefix a <code>String</code> giving the prefix of the namespace
103         * @param uri a <code>String</code> giving the URI of the namespace
104         * @return a <code>Name</code> object initialized with the given
105         *   local name, namespace prefix, and namespace URI
106         * @throws SOAPException if there is a SOAP error
107         */
108        public abstract Name createName(String localName, String prefix, String uri)
109            throws SOAPException;
110    
111        /**
112         * Creates a new <code>Name</code> object initialized with the
113         * given local name.
114         * <p>
115         * This factory method creates <code>Name</code> objects for use in
116         * situations where it is not practical to use the <code>SOAPEnvelope</code>
117         * abstraction.
118         *
119         * @param localName a <code>String</code> giving the local name
120         * @return a <code>Name</code> object initialized with the given
121         *    local name
122         * @throws SOAPException if there is a SOAP error
123         */
124        public abstract Name createName(String localName) throws SOAPException;
125    
126        /**
127         * Creates a new instance of <code>SOAPFactory</code>.
128         *
129         * @return a new instance of a <code>SOAPFactory</code>
130         * @throws SOAPException if there was an error creating the
131         *       default <code>SOAPFactory</code>
132         */
133        public static SOAPFactory newInstance() throws SOAPException {
134    
135            try {
136                return (SOAPFactory) FactoryFinder.find(SF_PROPERTY, DEFAULT_SF);
137            } catch (Exception exception) {
138                throw new SOAPException("Unable to create SOAP Factory: "
139                                        + exception.getMessage());
140            }
141        }
142    
143        private static final String SF_PROPERTY = "javax.xml.soap.SOAPFactory";
144    
145        private static final String DEFAULT_SF =
146            "org.apache.axis.soap.SOAPFactoryImpl";
147    }