jadeite100
Programmer
Hi All:
I am using Tomcat 5.5, Axis 1.4, and myEclipse 5.5.
I am new to java web services and Axis.
I am trying an example from the book "Beginning Java Web Services" by
Henry Bequet. This is the Stock Quote example on Chapter 3 page
113.
When I tried the following
url:
It gives me a list of web services deployed.
There is a link:
List -View the list of deployed Web Services
Here is the source code for StockCore.java:
Here is the client code that calls the method getQuote in the StockCore.java
class. I passed the parameter "IBM" to the StockQuote class below:
Before I ran the client code that calls the web service. I needed to tell Axis that
StockQuote is a valid web service. This is done with the help of a deployment
descriptor and the Axis AdminClient(make sure that Tomcat is running before launching these commands).
Here is the value of the StockQuote.wsdd:
Here is the command I ran:
C:\Beginning_JWS_Examples\Chp03\StockQuote\src>java org.apache.axis.client.AdminClient ..\StockQuote.wsdd
Processing file ..\StockQuote.wsdd
<Admin>Done processing</Admin>
Here is the error message I get when I called the client code StockQuote.java :
StockQuote.main: java.lang.reflect.InvocationTargetException
AxisFault
faultCode: { faultSubcode:
faultString: java.lang.reflect.InvocationTargetException
faultActor:
faultNode:
faultDetail:
{
java.lang.reflect.InvocationTargetException
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.wrox.jws.stockquote.StockQuote.main(StockQuote.java:45)
Any hint would be greatly appreciated.
Yours,
Frustrated.
I am using Tomcat 5.5, Axis 1.4, and myEclipse 5.5.
I am new to java web services and Axis.
I am trying an example from the book "Beginning Java Web Services" by
Henry Bequet. This is the Stock Quote example on Chapter 3 page
113.
When I tried the following
url:
It gives me a list of web services deployed.
There is a link:
List -View the list of deployed Web Services
Here is the source code for StockCore.java:
package com.wrox.jws.stockcore;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Attr;
import org.w3c.dom.NodeList;
import org.apache.xerces.parsers.DOMParser;
import org.xml.sax.InputSource;
public class StockCore
{
private static final String STOCK_FILE = "stock_quote.xml";
private Document doc;
public Document getDocument() { return doc; }
public StockCore() throws Exception
{
InputSource in = new InputSource(
getClass().getClassLoader().getResourceAsStream(STOCK_FILE));
DOMParser domParser = new DOMParser();
domParser.parse(in);
doc = domParser.getDocument();
System.out.println("New");
}
public static void main(String args[]) throws Exception
{
if(args.length != 1)
{
System.out.println("Usage: java dom.StockCore <symbol>");
System.exit(0);
}
StockCore stockCore = new StockCore();
System.out.println("The ask price for " + args[0] + " is " +
stockCore.getQuote(args[0]));
}
public String getQuote(String symbol) throws Exception
{
Element root = doc.getDocumentElement();
NodeList stockList = root.getElementsByTagName("stock_quote");
for(int i = 0;i < stockList.getLength();i++)
{
Element stockQuoteEl = (Element)stockList.item(i);
Element symbolEl =
(Element)stockQuoteEl.getElementsByTagName("symbol").item(0);
if(!symbolEl.getFirstChild().getNodeValue().equals(symbol))
continue;
NodeList priceList = stockQuoteEl.getElementsByTagName("price");
for(int j = 0;j < priceList.getLength(); j++)
{
Element priceEl = (Element)priceList.item(0);
if(priceEl.getAttribute("type").equals("ask"))
return priceEl.getAttribute("value");
}
}
return"";
}
Here is the client code that calls the method getQuote in the StockCore.java
class. I passed the parameter "IBM" to the StockQuote class below:
package com.wrox.jws.stockquote;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;
import javax.xml.rpc.ParameterMode;
import javax.xml.namespace.QName;
import com.wrox.jws.stockcore.StockCore;
public class StockQuote {
public String getQuote(String ticker) throws Exception {
StockCore stockcore = new StockCore();
return stockcore.getQuote(ticker);
}
public static void main(String [] args) {
final String methodName = "StockQuote.main";
try {
if(args.length != 1) {
System.err.println("StockQuote Client");
System.err.println(
"Usage: java com.wrox.jws.stockquote.StockQuote" +
" <ticker-symbol>");
System.err.println(
"Example: java com.wrox.jws.stockquote.StockQuote sunw");
System.exit(1);
}
// Replace the following URL with what is suitable for
// your environment String endpointURL = " Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpointURL));
call.setOperationName(new QName("StockQuote", "getQuote"));
call.addParameter("ticker", XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
String ret = (String)call.invoke(new Object[] { args[0] });
System.out.println("The value of " + args[0]
+ " is: " + ret);
} catch (Exception exception) {
System.err.println(methodName + ": " + exception.toString());
exception.printStackTrace();
}
}
}
Before I ran the client code that calls the web service. I needed to tell Axis that
StockQuote is a valid web service. This is done with the help of a deployment
descriptor and the Axis AdminClient(make sure that Tomcat is running before launching these commands).
Here is the value of the StockQuote.wsdd:
<deployment xmlns=" xmlns:java=" <service name="StockQuote" provider="java:RPC">
<parameter name="className" value="com.wrox.jws.stockquote.StockQuote"/>
<parameter name="allowedMethods" value="getQuote"/>
</service>
</deployment>
Here is the command I ran:
C:\Beginning_JWS_Examples\Chp03\StockQuote\src>java org.apache.axis.client.AdminClient ..\StockQuote.wsdd
Processing file ..\StockQuote.wsdd
<Admin>Done processing</Admin>
Here is the error message I get when I called the client code StockQuote.java :
StockQuote.main: java.lang.reflect.InvocationTargetException
AxisFault
faultCode: { faultSubcode:
faultString: java.lang.reflect.InvocationTargetException
faultActor:
faultNode:
faultDetail:
{
java.lang.reflect.InvocationTargetException
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.wrox.jws.stockquote.StockQuote.main(StockQuote.java:45)
Any hint would be greatly appreciated.
Yours,
Frustrated.