Hey folks,
               apologies for sending such a long mail, I've this web service
that keeps throwing this really annoying
java.lang.reflect.InvocationTargetException and would really appreciate it if
someone could help me put my finger on whats going wrong cause I'm at my wits
end. This is the error I keep getting back:

HTTP/1.1 500 Internal Server Error
Set-Cookie: JSESSIONID=AD9B5C8B6BB70316879AE7CF8219794E; Path=/axis
Content-Type: text/xml;charset=utf-8
Date: Thu, 02 Jun 2005 19:39:10 GMT
Server: Apache-Coyote/1.1
Connection: close

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server.userException</faultcode><faultstring>java.lang.reflect.InvocationTargetException</faultstring><detail><ns1:hostname
xmlns:ns1="http://xml.apache.org/axis/";>taylorjw</ns1:hostname></detail></soapenv:Fault></soapenv:Body></soapenv:Envelope>

...the web service takes a list of flights in the form and makes an xml string
out of them using DOM. I know the xml stuff works on its own but I think thats
where the error is somehow happening but I cant for the life of me figure out
where. The code for the web service is

package flightCompany.rpcservice;

import java.util.Iterator;
import java.util.LinkedList;

import flightCompany.xmlHelper.DOMGetFlightsXMLImpl;
import flightCompany.xmlHelper.GetFlightsXMLIF;
import flightCompany.model.Flight;

/**
 * A JAX-RPC Web service that takes a date and returns a xml String of flights
 * available on that date.
 * Created on 11-May-2005
 * @author James Taylor
 * @version 1.1
*/

public class FlightInfoService implements FlightInfoServiceIF{

          /**
           * returns as string representation of a list of available flights.
           * @param date date of flights to search for.
           * @return xml String of available flights
           * @throws ava.rmi.RemoteException
           */
          public String getFlights(String date) throws java.rmi.RemoteException{
                Flight f = new Flight();
                Flight fl = new Flight();
                LinkedList flights = new LinkedList();
                flights.add( f );
                flights.add( fl );
            //  Instantiate the XMLHelper
            GetFlightsXMLIF xmlHelper = new DOMGetFlightsXMLImpl();
            System.out.println("about to convert to string");
        //turn list to xml
            String result = xmlHelper.getFlightListAsXMLString( 
flights.iterator() );
            System.out.println("Got me xml shit");
        return result;
         }


}

....the code for a flight object is your ordinary bean kinda stuff

/*
 * Created on 11-May-2005
 */
package flightCompany.model;



/**
 * Data model of a FlightInfo table entry, mapping the database model and the
xml we receive.
 * @author James Taylor
 * @version 1.1
 */
public class Flight{
        private int flightNum;
        private String sourceAirport;
        private String destAirport;
        private String flightDate;
        private int seatsAvailible;
        private int seatPrice;
        private String numberOfSeatsToBook;
        private int bookingNumber;

        /**
         * Default constructor used in xml mapping, it just initialises and 
creates
instance variables
         */
        public Flight() {
                this.sourceAirport = "";
                this.destAirport = "";
                this.flightDate = "";
                this.seatPrice = 0;
                this.seatsAvailible = 0;
                this.flightNum = 0;
                this.numberOfSeatsToBook = "";
                bookingNumber = 0;
            }

        /**
         * constructor used to map the database model
         * @param ID flight id
         * @param src source airport
         * @param dest destination airport
         * @param date date of flight
         * @param seatsAv number of seats available
         * @param price price of a seat
         */
        public Flight(int ID, String src, String dest, String date, int 
seatsAv, int
price) {
                flightNum = ID;
                sourceAirport = src;
                destAirport = dest;
                flightDate = date;
                seatsAvailible = seatsAv;
                seatPrice = price;
                this.numberOfSeatsToBook = "";
                bookingNumber = 0;
            }

        public void setNumberOfSeatsToBook(String n){ numberOfSeatsToBook = n; }
        public String getNumberOfSeatsToBook(){ return numberOfSeatsToBook; }

        public void setFlightNum(int n){ flightNum = n; }
        public int getFlightNum(){ return flightNum; }

        public void setSourceAirport(String src){ sourceAirport = src; }
        public String getSourceAirport(){ return sourceAirport; }

        public void setDestAirport(String src){ destAirport = src; }
        public String getDestAirport(){ return destAirport; }

        public void setFlightDate(String src){ flightDate = src; }
        public String getFlightDate(){ return flightDate; }

        public void setSeatsAvailible(int n){ seatsAvailible = n; }
        public int getSeatsAvailible(){ return seatsAvailible; }

        public void setSeatPrice(int n){ seatPrice = n; }
        public int getSeatPrice(){ return seatPrice; }

        public void setBookingNumber(int n){ bookingNumber = n; }
        public int getBookingNumber(){ return bookingNumber; }

        public void print()   {
                                System.out.println("Flight num          : " 
+flightNum);
                                System.out.println("\nLeaving                   
: "+sourceAirport);
                                System.out.println("\nArriving in       : " 
+destAirport);
                                System.out.println("\nDate                      
: "+flightDate);
                                System.out.println("\nAvailable seats   : 
"+seatsAvailible);
                                System.out.println(     "\nSeat price           
: "+ seatPrice );
                                System.out.println( "\nNo of seats requested    
: " +numberOfSeatsToBook );
                                System.out.println( "\nBooking no               
: "+bookingNumber );
             }

        public String toString(){
                StringBuffer sb = new StringBuffer();
                sb.append( "Flight num          : " );
                sb.append( String.valueOf( flightNum ) );
                sb.append( "\nLeaving           : " );
                sb.append( sourceAirport );
                sb.append( "\nArriving in       : " );
                sb.append( destAirport );
                sb.append( "\nDate                      : " );
                sb.append( flightDate );
                sb.append( "\nAvailable seats: " );
                sb.append( String.valueOf( seatsAvailible ) );
                sb.append("\nSeat price         : ");
                sb.append( String.valueOf( seatPrice ) );
                sb.append( "\nNo of seats requested     : " );
                sb.append( numberOfSeatsToBook );
                sb.append( "\nBooking no        : " );
                sb.append( String.valueOf(bookingNumber) );
                sb.trimToSize();
                return sb.toString();
        }
}

...and the code for the DOM xml class is as follows, follwed by the xml error
class and the client code I'm using. This class is the crux of my problem I
think, but it runs on its own fine.

/*
 * Created on 10-5-2005
 */

package flightCompany.xmlHelper;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;



import javax.xml.transform.dom.DOMSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.stream.StreamResult;


import java.io.StringWriter;
import java.util.Iterator;
import java.util.LinkedList;

import flightCompany.exceptions.XMLException;
import flightCompany.model.*;


/**
 * This helper provides XML & XML String object mapping the DAO methods  and the
 * database model to xml.
 * @author James Taylor
 * @version 1.2
 */

public class DOMGetFlightsXMLImpl {

         private Document doc;
         private Element root;


                /**
             * Instantiate class members by creating a DOM document and a root 
tag
element for it.
             * using a root tag.
             * @param rootTagName root tag for document
             * @throws throws XMLException
             */
            protected void createXMLDocument(String rootTagName) throws 
XMLException{

                DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
                try {
                    factory.setNamespaceAware(true);
                    DocumentBuilder builder = factory.newDocumentBuilder();
                    doc = builder.newDocument();
                    root = doc.createElementNS("FlightList.xsd", rootTagName);
                    //add root tag
                    doc.appendChild(root);
                } catch (ParserConfigurationException e) {
                        throw new XMLException("XMLExcepion in
DOMGetFlightsXMLImpl.createXMLDocument() " + e.getMessage() );
                }
            }

         /*
          * Given a list of flight objects this returns a xml string 
representation of
them
          * @param flights list of flights to  put in xml form
          * @throws XMLException
          */
         public String getFlightListAsXMLString(Iterator flights){
                try{
                        System.out.println("============Getting XML 
String=====================");
                        System.out.println("Creating xml dom doc");
                        createXMLDocument("FlightList");
                }catch( XMLException xmle ){
                        String result = "<Error> Error creating the xml 
document "+
xmle.getMessage() +" </Error>";
                        System.out.println( result);
                        return result;
                }
                if (!flights.hasNext() )
                return "<Result> Couldn't find any flights to parse into 
xml</Result>";
                try{
                        System.out.println("about to head into loop to parse 
list");
                    while (flights.hasNext()) {
                        Flight f = (Flight)flights.next();
                        addFlightNode(root, f);
                    }
                    System.out.println("left the loop");
                }catch( Exception e ){
                        String result = "<Error> Error making adding nodes to 
the xml doc "+
e.getMessage() +" </Error>";
                        System.out.println( result);
                        return result;
                }
            try{
                System.out.println("About to turn dom to string");
                return transformDOMtoString(doc);
            }catch( XMLException xmle ){
                        String result = "<Error> Error making string 
representation on xml doc "+
xmle.getMessage() +" </Error>";
                        System.out.println( result);
                        return result;
                }
    }

         /**
          * Add XML data mapping from Flight objs to XML by populating the DOM 
document
object
          * @param parent root tag
          * @param f flight object to be parsed to xml
          * @throws XMLException
          */
         protected void addFlightNode(Node parent, Flight f) throws 
XMLException{
                try{
                //add <Flight> element
                Element flElem = doc.createElement("Flight");
                parent.appendChild(flElem);

                //  Make <FlightNum> element and add it
                Element elem = doc.createElement( "FlightNum"  );
                elem.appendChild(doc.createTextNode( String.valueOf( 
f.getFlightNum() )
));
                flElem.appendChild(elem);


                //  Make <SourceAirport> element and add it
                elem = doc.createElement("SourceAirport");
                elem.appendChild(doc.createTextNode( f.getSourceAirport() ));
                flElem.appendChild(elem);

                //  Make <DestAirport> element and add it
                elem = doc.createElement( "DestAirport" );
                elem.appendChild(doc.createTextNode( f.getDestAirport() ));
                flElem.appendChild(elem);

                //  Make <FlightDate> element and add it
                elem = doc.createElement( "FlightDate" );
                elem.appendChild(doc.createTextNode( f.getFlightDate() ));
                flElem.appendChild(elem);

                //Make <SeatsAvailible> element and add it
                elem = doc.createElement( "SeatsAvailible"  );
                elem.appendChild(doc.createTextNode( String.valueOf(
f.getSeatsAvailible() ) ));
                flElem.appendChild(elem);

                //Make <SeatsAvailible> element and add it
                elem = doc.createElement( "SeatPrice"  );
                elem.appendChild(doc.createTextNode( String.valueOf( 
f.getSeatPrice() )
));
                flElem.appendChild(elem);
                }catch (Exception e) {
                throw new XMLException("XMLExcepion in
DOMGetFlightsXMLImpl.addFlightNode() " + e.getMessage() );
        }
    }



         /**
          *
          * @param xDoc Dom document object to convert to a string
          * @return a string representation of a DOM document object
          * @throws XMLException
          */
         protected String transformDOMtoString(Document xDoc) throws 
XMLException{
            try {
                // Use a Transformer for String output
                TransformerFactory tFactory = TransformerFactory.newInstance();
                Transformer transformer = tFactory.newTransformer();
                DOMSource source = new DOMSource(xDoc);
                StringWriter sw = new StringWriter();
                transformer.transform(source, new StreamResult(sw));
                return sw.toString();
                }catch (TransformerConfigurationException tce) {
                        throw new XMLException("XMLExcepion in
DOMGetFlightsXMLImpl.transformDOMtoString() " + tce.getMessageAndLocation() );
                }catch (TransformerException te) {
                        throw new XMLException("XMLExcepion in
DOMGetFlightsXMLImpl.transformDOMtoString() " + te.getMessage() );
                }
           }


         /**
          * Just to test the imlementation
          */
         public static void main(String[] arg) {
                DOMGetFlightsXMLImpl helper = new DOMGetFlightsXMLImpl();
                try{
                        LinkedList flights = new LinkedList();
                        Flight f = new Flight();
                        Flight fl = new Flight();
                        flights.add( f );
                        flights.add( fl );
                        Iterator iter = flights.iterator();
                System.out.println(helper.getFlightListAsXMLString(iter) );
                }
                catch ( Exception saxe ){
                throw new XMLException("Error in parsing xml"+ 
saxe.getMessage() );
                }
         }
}

/*
 * Created on 15-05-2005
 */


package flightCompany.exceptions;

/**
 *
 * @author James Taylor
 * @version 1.1
 */

public class XMLException extends RuntimeException {

    /**
     * Constructor
     * @param str    a string that explains what the exception condition is
     */
    public XMLException (String str) {
        super(str);
    }

    /**
     * Default constructor. Takes no arguments
     */
    public XMLException () {
        super();

    }

   public String toString()
   {
       return "XMLException: "+super.toString();
   }
}


package flightCompany.rpcservice.client;

import org.apache.axis.AxisFault;
import java.net.URL;

/**
 * A client that uses the Dynamic Proxy method to communicate with a Web service
 * using JAX-RPC.
 * @author James Taylor
 * @version 1.1
 */

public class FlightCompanyClient {

  // helper class - To fetch the ACME Catalog information

    public String getFlightsFromWSService(String date) throws Exception {
     String REMOTE_ENDPOINT_URL =
"http://localhost:7070/axis/services/flightservice";;
     String namespace = "flightservice";
     String portName = "FlightInfoServiceIF";
     String servicename = "flightservice";

     //make a service
     FlightInfoServiceIFService service = new
FlightInfoServiceIFServiceLocator();
     //get a stub to the service
     FlightInfoServiceIF flightSvc = service.getflightservice( new URL(
REMOTE_ENDPOINT_URL ));

     //make a call
     return flightSvc.getFlights(date);
    }

  public static void main(String args[]) {
    try {
        String date = "2005-05-23";
        FlightCompanyClient fclient = new FlightCompanyClient();
        String flights = fclient.getFlightsFromWSService( date );
        System.out.println("Avasilable flights: " + flights);
    }
    catch( Exception e ) {
        if ( e instanceof AxisFault ) {
            System.err.println( ((AxisFault)e).dumpToString() );
        } else
            e.printStackTrace();
    }
  }

}

--
Between the question and the answer lies free will

Reply via email to