0

我无法在客户端和服务器环境中返回字符串数组。当我编译客户端应用程序时,我得到的结果是什么。

服务器应用程序

public String[] getFlight() throws Exception {

     AvailableFlights todayFlight = new AvailableFlights();
    List<Flight> flights_today =  todayFlight.getFlightDetail();

    List<String> flights = new ArrayList<String>(); 

    try {
        flights_today = this.unmarshal(new File("Flights.xml"));

            for (Flight flight : flights_today) {
        String flightDetail = flight.getJourney() 
                    + " " + flight.getAirline() 
                    + " "+ String.valueOf(flight.getConnections())
                    + " "+ String.valueOf(flight.getCost())
                    + " "+ flight.getDestination()
                    + " "+ flight.getOrigin()
                    + " "+ String.valueOf(flight.getSeats()); 
                flights.add(flightDetail);
                System.out.println(flightDetail);
                }

      } catch (Exception e) {

      }

    return (String[]) flights.toArray();
 }

客户端 Java 应用程序

import org.me.kettravel.*;


public class JavaApplication5 {   

    public static void main(String[] args) {

        try {
    System.out.println(getFlight());
        } catch (Throwable ex) {          
        }   
    }

    private static java.util.List<java.lang.String> getFlight() throws Exception_Exception {
        org.me.kettravel.ReadFlightService service = new org.me.kettravel.ReadFlightService();
        org.me.kettravel.ReadFlight port = service.getReadFlightPort();
        return port.getFlight();
    }

此外,我在服务器应用程序上尝试了一个像下面的“hello”的小实验,它运行良好,所以我知道网络服务运行良好,但我似乎无法将航班字符串数组传递/返回给客户端应用程序。

String i = "hello"; 
return i;

PS:当我尝试使用public static void main (String[] args) {构造函数运行服务器应用程序且不返回时,该应用程序从解组 xml 中完美打印出 arraylist 并将其转换为 arraylist 并执行system.out.print.

如果有人能提供一些启示,我将不胜感激,因为我真的坚持这一点。谢谢。

2012 年 4 月 1 日(19:16) - Genzer 建议进行调整,客户端应用程序仍未收到服务器应用程序的任何响应。

2012 年 4 月 1 日(23:24) - Bohemian 建议进行调整,如下所示,客户端应用程序现在进行错误检查javax.xml.ws.soap.SOAPFaultException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

public static void main(String[] args) {
    try {
        Object obj = getFlight();
System.out.println(obj);
    } catch (Throwable ex) { 
        System.out.println(ex);
    }   
}

06/01/2013 (16:20) - 我刚刚解决了我的错误,因为 XML 文件从测试到测试都是空的,但是现在 xml 文件中有数据。我刚刚创建了一个测试类,以查看 readFlight 是否将任何内容返回给它在同一个项目/源包中的类。结果是成功的......真的没有想法了=/因为我已经通过向客户端应用程序发送一个简单的hello字符串来测试Web服务并且没有问题。

测试类 公共类测试{

public static void main(String[] args) {

readFlight rF = new readFlight();

    try {
System.out.println(rF.getFlight());
    } catch (Throwable ex) { 
        System.out.println(ex);
    }       
}

}

测试类的输出: [London to Amsterdam KLM 1 200.0 Amsterdam London 100, London to Kuala Lumper Malaysia Airline 1 750.0 Kuala Lumper London 100, London to Manchester British Airway 1 50.0 Manchester London 56]

10/01/2013 (18:13) - 问题已解决。您必须为解组文件提供完整目录。例子:C:/Users/User/Documents/NetBeansProjects/WebService/booking.xml

4

3 回答 3

1

问题是您有两个不同的变量名为flights. 您填充一个并返回另一个。

于 2013-01-04T15:42:12.590 回答
0

您已经提交了“不不”,这可能隐藏了问题:

catch (Exception e) {
}

你不应该(嗯,很少)捕获异常。特别是当您的 catch 块为空时。

可能会在循环中抛出未经检查的异常,例如 NullPointerException,但您不会知道。

尝试删除捕获并仅留下声明为抛出的特定异常(如果有)。

如果其中一种方法被声明为抛出异常,那么至少,你应该这样做:

catch (Exception e) {
    System.out.println(e);
}
于 2013-01-04T19:24:11.783 回答
0

您可以像这样删除public static String[] flights和修改该方法:

public List<String> getFlight() throws Exception {

    Flight nextFlight = new Flight();
    AvailableFlights todayFlight = new AvailableFlights();
    List<Flight> flights_today =  todayFlight.getFlightDetail();

    // Since you you List for Flight, why not here
    List<String> flights = new ArrayList<String>(); 

    try {
        flights_today = readFlight.unmarshal(new File("Flights.xml"));

        for (Flight flight : flights_today) {
            String flightDetail = flight.getJourney() 
                    + " " + flight.getAirline() 
                    + " "+ String.valueOf(flight.getConnections())
                    + " "+ String.valueOf(flight.getCost())
                    + " "+ flight.getDestination()
                    + " "+ flight.getOrigin()
                    + " "+ String.valueOf(flight.getSeats());
            flights.add(flightDetail);
        }
      } catch (Exception e) {

      }

    return flights;
 }
于 2013-01-04T16:23:09.490 回答