Coverage Report - net.wotonomy.web.xml.XMLRPCDecoder
 
Classes in this File Line Coverage Branch Coverage Complexity
XMLRPCDecoder
0% 
0% 
8
 
 1  
 /*
 2  
 Wotonomy: OpenStep design patterns for pure Java applications.
 3  
 Copyright (C) 2000 Intersect Software Corporation
 4  
 
 5  
 This library is free software; you can redistribute it and/or
 6  
 modify it under the terms of the GNU Lesser General Public
 7  
 License as published by the Free Software Foundation; either
 8  
 version 2.1 of the License, or (at your option) any later version.
 9  
 
 10  
 This library is distributed in the hope that it will be useful,
 11  
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 13  
 Lesser General Public License for more details.
 14  
 
 15  
 You should have received a copy of the GNU Lesser General Public
 16  
 License along with this library; if not, see http://www.gnu.org
 17  
 */
 18  
 
 19  
 package net.wotonomy.web.xml;
 20  
 
 21  
 import java.io.IOException;
 22  
 import java.io.InputStream;
 23  
 import java.net.URL;
 24  
 
 25  
 import javax.xml.parsers.ParserConfigurationException;
 26  
 import javax.xml.parsers.SAXParser;
 27  
 import javax.xml.parsers.SAXParserFactory;
 28  
 
 29  
 import net.wotonomy.foundation.internal.WotonomyException;
 30  
 import net.wotonomy.foundation.xml.XMLDecoder;
 31  
 
 32  
 import org.xml.sax.SAXException;
 33  
 
 34  
 /**
 35  
 * An implementation of XMLDecoder that reads objects from 
 36  
 * XMLRPC format. 
 37  
 * This implementation is not thread-safe, so a new instances
 38  
 * should be created to accomodate multiple threads.
 39  
 */
 40  0
 public class XMLRPCDecoder implements XMLDecoder
 41  
 {
 42  0
     XMLRPCDecoderHelper helper = new XMLRPCDecoderHelper();
 43  
     
 44  
     /**
 45  
     * Decodes an object in XML-RPC format from the specified input stream.
 46  
     * @param anInputStream The input stream from which to read.
 47  
     * The stream will be read fully.
 48  
     * @param aDescription A description to accompany error messages
 49  
     * for the stream, typically a file name.
 50  
     * @param aURL A URL against which relative references within the
 51  
     * XML will be resolved.
 52  
     * @return The object that was constructed from the XML content,
 53  
     * or null if no object could be constructed.
 54  
     */ 
 55  
     public Object decode( 
 56  
         InputStream anInputStream, String aDescription, URL aURL )
 57  
     {
 58  0
             Object result = null;
 59  
             
 60  
         try {
 61  0
                 SAXParser sparser = SAXParserFactory.newInstance().newSAXParser();
 62  0
                 sparser.parse(anInputStream,helper,aURL.toExternalForm());
 63  0
                 result = helper.getResult();
 64  0
         } catch (ParserConfigurationException e) {
 65  0
             throw new WotonomyException("Problem in parser configuration", e );
 66  0
         } catch (IOException e) {
 67  0
             throw new WotonomyException("IOException thrown while parsing", e );
 68  0
         } catch (SAXException e) {
 69  0
             throw new WotonomyException("SAXException thrown while parsing", e );
 70  0
         }
 71  0
         helper.reset();
 72  0
         return result;
 73  
     }
 74  
 
 75  
     /**
 76  
     * Decodes an XML-RPC message from the specified input stream.
 77  
     * Stand-alone values not wrapped in "methodCall" or "param"
 78  
     * tags will be treated as a response.
 79  
     * @param anInputStream The input stream from which to read.
 80  
     * The stream will be read fully.
 81  
     * @param aReceiver an XMLRPCReceiver that will be invoked with
 82  
     * the appropriate method: request, response, or fault.
 83  
     */ 
 84  
     public void decode( 
 85  
         InputStream anInputStream, XMLRPCReceiver aReceiver )
 86  
     {
 87  
         try
 88  
         {
 89  0
                 SAXParser sparser = SAXParserFactory.newInstance().newSAXParser();
 90  0
                 sparser.parse(anInputStream,helper);
 91  
                 
 92  0
             if ( helper.isRequest() )
 93  
             {
 94  0
                 aReceiver.request( helper.getMethodName(), helper.getParameters() );
 95  0
             }
 96  
             else
 97  0
             if ( helper.isFault() )
 98  
             {
 99  0
                 aReceiver.fault( helper.getFaultCode(), helper.getFaultString() );
 100  0
             }
 101  
             else // all else is considered a response
 102  
             {
 103  0
                 aReceiver.response( helper.getResult() );
 104  
             }
 105  0
             } catch (ParserConfigurationException e) {
 106  0
                 throw new WotonomyException("Problem in parser configuration", e );
 107  0
             } catch (IOException e) {
 108  0
                 throw new WotonomyException("IOException thrown while parsing", e );
 109  0
             } catch (SAXException e) {
 110  0
                 throw new WotonomyException("SAXException thrown while parsing", e );
 111  0
         }
 112  0
         helper.reset();
 113  0
     }
 114  
 }