我在客户端和服务器环境中返回字符串数组时遇到问题。当我编译客户端应用程序时,我得到的结果是什么。
服务器应用程序
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”这样的小实验,它工作正常,所以我知道Web服务工作正常,但我似乎无法传递/返回航班字符串数组到客户端应用程序。
String i = "hello";
return i;
PS:当我尝试使用public static void main (String[] args) {
构造函数运行服务器应用程序而没有返回时,应用程序完全从unmarshalling xml打印出arraylist,将其转换为arraylist并执行system.out.print
。
如果有人能说清楚,因为我真的被困在这上面,我将不胜感激。感谢。
04/01/2012(19:16) - Genzer建议进行调整,客户端应用仍未收到服务器应用的任何回复。
04/01/2012(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) - 问题已解决。您必须提供unmarshall文件的完整目录。示例:C:/Users/User/Documents/NetBeansProjects/WebService/booking.xml
答案 0 :(得分:1)
问题是您有两个名为flights
的不同变量。你填充一个并返回另一个。
答案 1 :(得分: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;
}
答案 2 :(得分:0)
你犯了一个“不是”,这可能隐藏了这个问题:
catch (Exception e) {
}
你永远不应该(很少,很少)捕获异常。特别是当你的catch区块是空的时候。
可能有一个未经检查的异常,比如NullPointerException,会在你的循环中抛出,但你不会知道。
尝试删除catch并仅留下声明抛出的特殊异常(如果有)。
如果其中一个方法被声明为抛出异常,那么至少应该这样做:
catch (Exception e) {
System.out.println(e);
}