Source code: multibinding/service/StockQuoteService.java
1 /*
2 * The Apache Software License, Version 1.1
3 *
4 *
5 * Copyright (c) 2001 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 "AXIS" 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. For more
52 * information on the Apache Software Foundation, please see
53 * <http://www.apache.org/>.
54 */
55
56 package multibinding.service;
57
58 import org.w3c.dom.Document;
59 import org.w3c.dom.Element;
60 import org.w3c.dom.NodeList;
61
62 import javax.xml.parsers.DocumentBuilder;
63 import javax.xml.parsers.DocumentBuilderFactory;
64 import java.net.URL;
65
66 /**
67 *
68 * @author Sanjiva Weerawarana (sanjiva@watson.ibm.com)
69 * @author Doug Davis (dug@us.ibm.com)
70 */
71 public class StockQuoteService {
72 public float getQuote (String symbol) throws Exception {
73 // get a real (delayed by 20min) stockquote from
74 // http://www.xmltoday.com/examples/stockquote/. The IP addr
75 // below came from the host that the above form posts to ..
76
77 if ( symbol.equals("XXX") ) return( (float) 55.25 );
78
79 URL url = new URL( "http://services.xmethods.net/" +
80 "axis/getQuote?s="+symbol );
81
82 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
83 DocumentBuilder db = dbf.newDocumentBuilder();
84
85 Document doc = db.parse( url.toExternalForm() );
86 Element elem = doc.getDocumentElement();
87 NodeList list = elem.getElementsByTagName( "stock_quote" );
88
89 if ( list != null && list.getLength() != 0 ) {
90 elem = (Element) list.item(0);
91 list = elem.getElementsByTagName( "price" );
92 elem = (Element) list.item(0);
93 String quoteStr = elem.getAttribute("value");
94 try {
95 return Float.valueOf(quoteStr).floatValue();
96 } catch (NumberFormatException e1) {
97 // maybe its an int?
98 try {
99 return Integer.valueOf(quoteStr).intValue() * 1.0F;
100 } catch (NumberFormatException e2) {
101 return -1.0F;
102 }
103 }
104 }
105 return( 0 );
106 }
107 }