/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package javax.xml.soap; /** * <code>SOAPFactory</code> is a factory for creating various objects that exist in the SOAP XML * tree. * <p/> * <code>SOAPFactory</code> can be used to create XML fragments that will eventually end up in the * SOAP part. These fragments can be inserted as children of the <code>SOAPHeaderElement</code> or * <code>SOAPBodyElement</code> or <code>SOAPEnvelope</code>. * <p/> * <code>SOAPFactory</code> also has methods to create <code>javax.xml.soap.Detail</code> objects as * well as <code>java.xml.soap.Name</code> objects. */ public abstract class SOAPFactory { public SOAPFactory() { } /** * Create a <code>SOAPElement</code> object initialized with the given <code>Name</code> * object. * * @param name a <code>Name</code> object with the XML name for the new element * @return the new <code>SOAPElement</code> object that was created * @throws SOAPException if there is an error in creating the <code>SOAPElement</code> object */ public abstract SOAPElement createElement(Name name) throws SOAPException; /** * Create a <code>SOAPElement</code> object initialized with the given local name. * * @param localName a <code>String</code> giving the local name for the new element * @return the new <code>SOAPElement</code> object that was created * @throws SOAPException if there is an error in creating the <code>SOAPElement</code> object */ public abstract SOAPElement createElement(String localName) throws SOAPException; /** * Create a new <code>SOAPElement</code> object with the given local name, prefix and uri. * * @param localName a <code>String</code> giving the local name for the new element * @param prefix the prefix for this <code>SOAPElement</code> * @param uri a <code>String</code> giving the URI of the namespace to which the new * element belongs * @return the new <code>SOAPElement</code> object that was created * @throws SOAPException if there is an error in creating the <code>SOAPElement</code> object */ public abstract SOAPElement createElement(String localName, String prefix, String uri) throws SOAPException; /** * Creates a new <code>Detail</code> object which serves as a container for * <code>DetailEntry</code> objects. * <p/> * This factory method creates <code>Detail</code> objects for use in situations where it is not * practical to use the <code>SOAPFault</code> abstraction. * * @return a <code>Detail</code> object * @throws SOAPException if there is a SOAP error */ public abstract Detail createDetail() throws SOAPException; /** * Creates a new <code>Name</code> object initialized with the given local name, namespace * prefix, and namespace URI. * <p/> * This factory method creates <code>Name</code> objects for use in situations where it is not * practical to use the <code>SOAPEnvelope</code> abstraction. * * @param localName a <code>String</code> giving the local name * @param prefix a <code>String</code> giving the prefix of the namespace * @param uri a <code>String</code> giving the URI of the namespace * @return a <code>Name</code> object initialized with the given local name, namespace prefix, * and namespace URI * @throws SOAPException if there is a SOAP error */ public abstract Name createName(String localName, String prefix, String uri) throws SOAPException; /** * Creates a new <code>Name</code> object initialized with the given local name. * <p/> * This factory method creates <code>Name</code> objects for use in situations where it is not * practical to use the <code>SOAPEnvelope</code> abstraction. * * @param localName a <code>String</code> giving the local name * @return a <code>Name</code> object initialized with the given local name * @throws SOAPException if there is a SOAP error */ public abstract Name createName(String localName) throws SOAPException; /** * Creates a new instance of <code>SOAPFactory</code>. * * @return a new instance of a <code>SOAPFactory</code> * @throws SOAPException if there was an error creating the default <code>SOAPFactory</code> */ public static SOAPFactory newInstance() throws SOAPException { try { SOAPFactory factory = (SOAPFactory)FactoryFinder.find(SOAPFactory.class, null); if (factory == null) { factory = newInstance(SOAPConstants.SOAP_1_1_PROTOCOL); } return factory; } catch (Exception exception) { throw new SOAPException("Unable to create SOAPFactory: " + exception.getMessage(), exception); } } /** * Creates a new SOAPFactory object that is an instance of the specified implementation, this * method uses the SAAJMetaFactory to locate the implementation class and create the SOAPFactory * instance. * * @param protocol - a string constant representing the protocol of the specified SOAP factory * implementation. May be either DYNAMIC_SOAP_PROTOCOL, DEFAULT_SOAP_PROTOCOL * (which is the same as) SOAP_1_1_PROTOCOL, or SOAP_1_2_PROTOCOL. Returns: a * new instance of a SOAPFactory * @return javax.xml.soap.SOAPFactory * @throws SOAPException - if there is an error creating the specified SOAPFactory * @see <CODE>SAAJMetaFactory</CODE> */ public static SOAPFactory newInstance(String protocol) throws SOAPException { return SAAJMetaFactory.getInstance().newSOAPFactory(protocol); } /** * Creates a SOAPElement object from an existing DOM Element. If the DOM Element that is passed * in as an argument is already a SOAPElement then this method must return it unmodified without * any further work. Otherwise, a new SOAPElement is created and a deep copy is made of the * domElement argument. The concrete type of the return value will depend on the name of the * domElement argument. If any part of the tree rooted in domElement violates SOAP rules, a * SOAPException will be thrown. * * @param domElement - the Element to be copied. * @return a new SOAPElement that is a copy of domElement. * @throws SOAPException - if there is an error in creating the SOAPElement object * @see SOAPFactoryImpl * @since SAAJ 1.3 */ public SOAPElement createElement(org.w3c.dom.Element element) throws SOAPException { //see SOAPFactoryImpl return null; } /** * Creates a SOAPElement object initialized with the given QName object. The concrete type of * the return value will depend on the name given to the new SOAPElement. For instance, a new * SOAPElement with the name {http://www.w3.org/2003/05/soap-envelope}Envelope} Envelope would * cause a SOAPEnvelope that supports SOAP 1.2 behavior to be created. * * @param qname - a QName object with the XML name for the new element * @return the new SOAPElement object that was created * @throws SOAPException - if there is an error in creating the SOAPElement object * @see SOAPFactoryImpl */ public SOAPElement createElement(javax.xml.namespace.QName qname) throws SOAPException { return null; } public abstract SOAPFault createFault() throws SOAPException; public abstract SOAPFault createFault(java.lang.String reasonText, javax.xml.namespace.QName faultCode) throws SOAPException; }