src/share/classes/com/sun/xml/internal/messaging/saaj/soap/EnvelopeFactory.java

Mon, 04 May 2009 21:10:41 -0700

author
tbell
date
Mon, 04 May 2009 21:10:41 -0700
changeset 50
42dfec6871f6
parent 45
31822b475baa
child 78
860b95cc8d1d
permissions
-rw-r--r--

6658158: Mutable statics in SAAJ (findbugs)
6658163: txw2.DatatypeWriter.BUILDIN is a mutable static (findbugs)
Reviewed-by: darcy

duke@1 1 /*
tbell@45 2 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
duke@1 7 * published by the Free Software Foundation. Sun designates this
duke@1 8 * particular file as subject to the "Classpath" exception as provided
duke@1 9 * by Sun in the LICENSE file that accompanied this code.
duke@1 10 *
duke@1 11 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 14 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 15 * accompanied this code).
duke@1 16 *
duke@1 17 * You should have received a copy of the GNU General Public License version
duke@1 18 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 20 *
duke@1 21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@1 22 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@1 23 * have any questions.
duke@1 24 */
tbell@45 25 /*
tbell@50 26 *
tbell@50 27 *
tbell@50 28 *
tbell@45 29 */
tbell@45 30
tbell@45 31
duke@1 32 package com.sun.xml.internal.messaging.saaj.soap;
duke@1 33
duke@1 34 import java.util.logging.Logger;
duke@1 35
duke@1 36 import javax.xml.parsers.SAXParser;
duke@1 37 import javax.xml.soap.SOAPException;
duke@1 38 import javax.xml.transform.Source;
duke@1 39 import javax.xml.transform.Transformer;
duke@1 40 import javax.xml.transform.dom.DOMResult;
duke@1 41 import javax.xml.transform.sax.SAXSource;
duke@1 42 import javax.xml.transform.stream.StreamSource;
duke@1 43
duke@1 44 import org.xml.sax.InputSource;
duke@1 45 import org.xml.sax.XMLReader;
duke@1 46
duke@1 47 import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
duke@1 48 import com.sun.xml.internal.messaging.saaj.util.*;
duke@1 49
duke@1 50 import com.sun.xml.internal.messaging.saaj.util.transform.EfficientStreamingTransformer;
duke@1 51
duke@1 52 /**
duke@1 53 * EnvelopeFactory creates SOAP Envelope objects using different
duke@1 54 * underlying implementations.
duke@1 55 */
duke@1 56 public class EnvelopeFactory {
duke@1 57
tbell@50 58 protected static final Logger
duke@1 59 log = Logger.getLogger(LogDomainConstants.SOAP_DOMAIN,
duke@1 60 "com.sun.xml.internal.messaging.saaj.soap.LocalStrings");
duke@1 61
duke@1 62 private static ParserPool parserPool = new ParserPool(5);
duke@1 63
duke@1 64 public static Envelope createEnvelope(Source src, SOAPPartImpl soapPart)
duke@1 65 throws SOAPException
duke@1 66 {
duke@1 67 // Insert SAX filter to disallow Document Type Declarations since
duke@1 68 // they are not legal in SOAP
duke@1 69 SAXParser saxParser = null;
duke@1 70 if (src instanceof StreamSource) {
duke@1 71 if (src instanceof JAXMStreamSource) {
duke@1 72 try {
duke@1 73 ((JAXMStreamSource) src).reset();
duke@1 74 } catch (java.io.IOException ioe) {
duke@1 75 log.severe("SAAJ0515.source.reset.exception");
duke@1 76 throw new SOAPExceptionImpl(ioe);
duke@1 77 }
duke@1 78 }
duke@1 79 try {
duke@1 80 saxParser = parserPool.get();
duke@1 81 } catch (Exception e) {
duke@1 82 log.severe("SAAJ0601.util.newSAXParser.exception");
duke@1 83 throw new SOAPExceptionImpl(
duke@1 84 "Couldn't get a SAX parser while constructing a envelope",
duke@1 85 e);
duke@1 86 }
duke@1 87 InputSource is = SAXSource.sourceToInputSource(src);
duke@1 88 XMLReader rejectFilter;
duke@1 89 try {
duke@1 90 rejectFilter = new RejectDoctypeSaxFilter(saxParser);
duke@1 91 } catch (Exception ex) {
duke@1 92 log.severe("SAAJ0510.soap.cannot.create.envelope");
duke@1 93 throw new SOAPExceptionImpl(
duke@1 94 "Unable to create envelope from given source: ",
duke@1 95 ex);
duke@1 96 }
duke@1 97 src = new SAXSource(rejectFilter, is);
duke@1 98 }
duke@1 99
duke@1 100 try {
duke@1 101 Transformer transformer =
duke@1 102 EfficientStreamingTransformer.newTransformer();
duke@1 103 DOMResult result = new DOMResult(soapPart);
duke@1 104 transformer.transform(src, result);
duke@1 105
duke@1 106 Envelope env = (Envelope) soapPart.getEnvelope();
duke@1 107 if (saxParser != null) {
duke@1 108 parserPool.put(saxParser);
duke@1 109 }
duke@1 110 return env;
duke@1 111 } catch (Exception ex) {
duke@1 112 if (ex instanceof SOAPVersionMismatchException) {
duke@1 113 throw (SOAPVersionMismatchException) ex;
duke@1 114 }
duke@1 115 log.severe("SAAJ0511.soap.cannot.create.envelope");
duke@1 116 throw new SOAPExceptionImpl(
duke@1 117 "Unable to create envelope from given source: ",
duke@1 118 ex);
duke@1 119 }
duke@1 120 }
duke@1 121 }

mercurial