package samples.databinding; | |
import org.apache.axiom.om.OMAbstractFactory; | |
import org.apache.axiom.om.OMDataSource; | |
import org.apache.axiom.om.OMElement; | |
import org.apache.axiom.om.OMFactory; | |
import org.apache.axiom.om.OMOutputFormat; | |
import org.apache.axiom.om.impl.builder.SAXOMBuilder; | |
import org.jdom.Document; | |
import org.jdom.Element; | |
import org.jdom.JDOMException; | |
import org.jdom.input.StAXBuilder; | |
import org.jdom.output.SAXOutputter; | |
import org.jdom.output.StAXOutputter; | |
import org.jdom.output.XMLOutputter; | |
import org.jdom.xpath.XPath; | |
import javax.xml.stream.XMLStreamException; | |
import javax.xml.stream.XMLStreamReader; | |
import javax.xml.stream.XMLStreamWriter; | |
import java.io.IOException; | |
import java.io.OutputStream; | |
import java.io.Writer; | |
public final class StockClient2 { | |
public static void main(String[] args) throws Exception { | |
if (args.length != 2) { | |
System.err.println("Usage: StockClient <url> <symbol>"); | |
return; | |
} | |
final String url = args[0]; | |
final String symbol = args[1]; | |
System.out.println(); | |
System.out.println("Getting Stock Quote for " + symbol); | |
StockQuoteServiceStub stub = | |
new StockQuoteServiceStub(url); | |
stub._getServiceClient().getOptions().setAction("getStockQuote"); | |
Element element1 = new Element( | |
"getStockQuote", "nsl", "http://w3.ibm.com/schemas/services/2002/11/15/stockquote"); | |
Element element2 = new Element("symbol"); | |
element2.addContent(symbol); | |
element1.addContent(element2); | |
OMFactory factory = OMAbstractFactory.getOMFactory(); | |
org.apache.axiom.om.OMDataSource src = new JDOMDataSource(element1); | |
org.apache.axiom.om.OMNamespace appns = factory.createOMNamespace("http://w3.ibm.com/schemas/services/2002/11/15/stockquote", "ns1"); | |
OMElement child = factory.createOMElement(src, "getStockQuote", appns); | |
OMElement response = stub.getStockQuote(child); | |
StAXBuilder builder = new StAXBuilder(); | |
Document doc = builder.build(response.getXMLStreamReader()); | |
XPath path = XPath.newInstance("//price"); | |
Element price = (Element) path.selectSingleNode(doc.getRootElement()); | |
System.out.println("Price = " + price.getText()); | |
} | |
private static class JDOMDataSource implements OMDataSource { | |
private final Element data; | |
private JDOMDataSource(Element data) { | |
this.data = data; | |
} | |
public void serialize(OutputStream output, OMOutputFormat format) throws XMLStreamException { | |
try { | |
XMLOutputter outputter = new XMLOutputter(); | |
outputter.output(data, output); | |
} catch (IOException e) { | |
throw new XMLStreamException(e); | |
} | |
} | |
public void serialize(Writer writer, OMOutputFormat format) throws XMLStreamException { | |
try { | |
XMLOutputter outputter = new XMLOutputter(); | |
outputter.output(data, writer); | |
} catch (IOException e) { | |
throw new XMLStreamException(e); | |
} | |
} | |
public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException { | |
StAXOutputter outputter = new StAXOutputter(xmlWriter); | |
try { | |
outputter.outputFragment(data); | |
} catch (JDOMException e) { | |
throw new XMLStreamException(e); | |
} | |
} | |
public XMLStreamReader getReader() throws XMLStreamException { | |
SAXOMBuilder builder = new SAXOMBuilder(); | |
SAXOutputter outputter = new SAXOutputter(); | |
outputter.setContentHandler(builder); | |
outputter.setEntityResolver(builder); | |
outputter.setDTDHandler(builder); | |
outputter.setEntityResolver(builder); | |
return builder.getRootElement().getXMLStreamReader(); | |
} | |
} | |
} |