2013-01-04 4 views
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(); 
} 

클라이언트 자바 응용 프로그램

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(); 
    } 

은 또한 I는 서버 응용 프로그램에 아래와 같이 "안녕하세요"와 작은 실험을 시도하고 그렇게, 괜찮 았는데 나는 웹 서비스가 잘 작동하는 것을 알고 있지만, 나는 단지 클라이언트 String 문자열 배열을 전달/리턴하는 것처럼 보이지 않는다.

String i = "hello"; 
return i; 

PS : 나는 public static void main (String[] args) { 생성자를 대가없이 서버 응용 프로그램을 실행하려고하면 응용 프로그램이 완벽하게 정렬 화 XML에서의 ArrayList를 인쇄이 ArrayList를하고 system.out.print을 변환합니다.

누군가 내가 약간의 빛을 비출 수 있다면 정말 고마워 할 것입니다. 감사.

04/01/2012 (19:16) - 클라이언트 응용 프로그램 인 Genzer에서 서버 응용 프로그램의 응답을 아직받지 못했다는 조정이있었습니다.

2012년 4월 1일 (23시 24분) - 조정은 클라이언트 응용 프로그램은 이제 오류 검사를 받고, 아래에 볼 수있는 보헤미안 제안하게 된 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); 
    } 
} 

6월 1일/2013 (16:20) - XML ​​파일이 테스트에서 테스트까지 비어 있었기 때문에 실수를 해결했지만 XML 파일에는 데이터가 포함되어 있습니다. readFlight가 동일한 프로젝트/소스 패키지에있는 클래스에 무엇을 반환하는지 확인하기 위해 테스트 클래스를 만들었습니다. 결과는 성공했습니다 ... 정말 클라이언트 응용 프로그램에 간단한 hello 문자열을 보내 웹 서비스를 테스트하고 아무런 문제도 일으키지 않아 아이디어가 거의 소모되었습니다.

테스트 클래스 공용 클래스 테스트 {

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]

2013년 10월 1일 (18시 13분) - 문제 해결됨. unmarshall 파일에 전체 디렉토리를 제공해야합니다. 예 : C:/Users/User/Documents/NetBeansProjects/WebService/booking.xml

+0

'문자열 []의 항공편 = 새로운 String [] {로 시작하는 코드 블록을 무엇 'for (String s : flights)'로 끝나는가? – amphibient

+0

나는 그 자신의 배열 문자열을 인쇄하여 그 작동 여부를 확인하는 것 같다. 따라서 String을 사용하지 않고 항공편을 인쇄하면 인쇄물이 인쇄됩니다. "[Ljava.lang.String; @ 312a47fe [Ljava.lang.String; @ 4edc8de9 [Ljava.lang.String; @ 71e8e471] – Ket

+0

코드 컴파일 된? 'getFlight()'메서드는'String'을 반환하도록 선언 되었기 때문에'String' ['] 인'flights'을 반환합니다. – Genzer

답변

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; 
} 
+0

클라이언트 측에서 아무 것도 반환하지 않았으며 "[]"이 아님 – Ket

+0

문제의 원인 일 수 있습니까? http://stackoverflow.com/questions/6609770/returning-an-arraylist-from-a-webservice-in-java – Ket

1

두 개의 변수 flights이있는 것이 문제입니다. 하나를 채우고 다른 하나를 반환합니다.잘 (당신은 결코해야

catch (Exception e) { 
} 

:

+0

아,하지만 공용 선언을 제거 할 때 "public static String [] flights;" "귀환 항공편"에 제보가 나타납니다. 하지만 이미 getFlight의 본문에 선언하지 않았습니까? D : – Ket

+0

@Ket :'return'은 그 시간까지 두 번째 변수가 범위를 벗어났기 때문에 그 문자열을 선택하지 않습니다. "String [] flights = new String []" . – NPE

+0

반환 값이 범위를 벗어났습니다. 그래서 나는 public static을 사용해야 만하고, "String [] flights = {nextFlight.getJourney() etc ...}"로 바꿨다. 그러나 어떤 이유로 비행은 공개 된 것을 선택하지 않는다. 내가 위에서 선언 한 "public static String [] flights = new String [] {};" – Ket

0

을 , 드물게) 예외를 붙잡는다. 특히 catch 블록이 비어있을 때.

루프 내에서 NullPointerException과 같은 검사되지 않은 예외가 발생할 수 있지만 알 수 없습니다.

catch를 제거하고 throw되도록 선언 된 비범 한 예외 (있는 경우) 만 남기십시오. 방법 중 하나가 적어도 다음, 예외를 throw로 선언 된 경우

, 당신은이 작업을 수행해야합니다

catch (Exception e) { 
    System.out.println(e); 
} 
+0

입력 해 주셔서 감사합니다, "System.out.println (전자);" 클라이언트 응용 프로그램에서 웹 서비스 참조를 새로 고치고 참조를 다시 추가하고 여전히 아무것도 추가하지 마십시오. 또한 클라이언트 응용 프로그램에 Throwable 인쇄물을 삽입했습니다. 이제 컴파일 할 때 "javax.xml.ws.soap.SOAPFExceptionException : [Ljava.lang.Object; [Ljava.lang.String;에 캐스트 할 수 없습니다. 누구에게도 의미가 있습니까? – Ket

+0

이 오류는 String []이 아닌 Object []가 반환된다는 것을 의미합니다. 클라이언트에서 Object []를 수락하여 내용을 검사하여 진행 상황을 확인하십시오. – Bohemian

+0

제대로했는지 확실하지 않으므로 편집 된 게시물을 확인하십시오. 나는 아직도 같은 메시지를 받고있다. – Ket