2014-02-24 4 views
2

Java에서 웹 서비스를 구현하는 방법을 배우고 있습니다. O'Reilly의 저서 "Learning Java"의 예제에 따라 cdyne.com에서 날씨 서비스 용 WSDL 파일 (http://bit.ly/13moiTh 참조)을 다운로드하고 wsimport 도구를 사용하여 일련의 클래스를 생성했습니다.Java 웹 서비스 클라이언트가 cdyne.com에서 기상 서비스에 액세스 할 수 없음

첫 번째 문제점은 JAR 파일을 생성하여 Eclipse 프로젝트에서 참조 할 때 클래스가 인식되지 않는다는 것입니다. wsimport -keep을 사용하여 모든 소스 파일을 개별적으로 프로젝트에 복사하여 빌드해야했습니다.

다음은 서비스를 사용할 수 있는지 확인하기 위해 책의 코드를 기반으로 간단한 HTTP POST 클라이언트를 구성했습니다. 해당 코드로 getCityWeatherByZIP 서비스에 성공적으로 액세스 할 수 있었기 때문에 연결 또는 인증 문제가 없었습니다.

마지막으로, 자동으로 생성 된 웹 서비스 클라이언트 코드를 사용하여 getCityWeatherByZIP 및 getCityForecastByZIP 서비스에 액세스하려고했습니다. 모두 자동으로() 메소드가 false를 반환하고 모든 응답 필드가 null이었다 isSuccess 즉, 실패는 :

코드를 단계별로에서
Weather service = new Weather(); 
WeatherSoap weatherSoap = service.getWeatherSoap(); 
WeatherReturn weather = weatherSoap.getCityWeatherByZIP(ZIP); 
if (weather.isSuccess()) {  
    System.out.format("%s, %s : %s : Temperature: %s, Wind: %s\n", 
      weather.getCity(), weather.getState(), weather.getDescription(), 
      weather.getTemperature(), weather.getWind()); 
} 
else { 
    System.out.println("Failed to obtain weather"); 
} 

는 getCityWeatherByZIP()에서 나는 다음과 같은 경우는, NoSuchMethodException을 발견 : com.sun.xml.internal 를 .ws.api.message.Packet.setHeaderList (com.sun.xml.internal.ws.api.message.HeaderList) "

이 예외는 (Eclipse의 디버그 퍼스펙티브에서) " SEIStub.invoke (객체, 메서드, 객체 []) 행 : 사용할 수 없음 "

분명히 Packet.setHe 케플러 서비스 릴리스 1, ID를 구축 : 나는 최신 JDK 1.7와 이클립스 버전을 사용하고 https://jax-ws.java.net/nonav/jax-ws-20-fcs/arch/com/sun/xml/ws/api/message/Packet.html

: aderList은 (HeaderList) 방법은 아닌 내부 클래스의 문서에 의해 뒷받침되는, 존재하지 않는 20130919-을 0819.

이 문제를 해결하는 방법을 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다.

+1

문제점 : Eclipse- 프로젝트에서 package-info.java 파일이 누락되었습니다. 이 지침에 따라 패키지에 추가하면 모든 것이 작동하기 시작합니다. http://stackoverflow.com/questions/8405336/how-do-i-use-or-edit-package-info-java – user1408140

답변

0

책의 소스 코드 외에도 컴파일 및 실행을 위해 JAX-WS 웹 서비스 코드 사본이 필요합니다. Eclipse 내부의 빌드 경로를 업데이트하여 JAX-WS 웹 서비스의 모든 jar를 참조하면 Eclipse에 클래스 경로에 사본이없는 것처럼 들린다.

JAX-WS는 사양이지만 참조 구현을 실행하려면 JAX-WS의 실제 구현이 필요합니까?

+0

글쎄, 나 또한이 책의 다른 예제에서 WebService 및 WebMethod 주석을 사용하여 웹 서비스를 구현하는 방법이 매우 간단하며 제대로 실행되는 것 같습니다. 특별한 작업없이 Eclipse에서 프로그램을 시작한 다음 브라우저를 사용하여 실행중인 서버에 액세스 할 수 있습니다. 자동으로 생성 된 WSDL 파일을 얻습니다. 위에 설명 된 클라이언트 코드는 눈에 보이는 예외없이 컴파일되고 실행됩니다 (코드를 단계별로 실행할 때 예외 만 볼 수 있음). 그러나 WeatherReturn 및 ForecastReturn 인스턴스는 단순히 비어 있습니다. 그래서, 나는 무엇을 해야할지 모른다. – user1408140

+0

위키를 본 적이 있습니까 - 위키의 http://wiki.cdyne.com/index.php/CDYNE_Weather#Example_Source_Code - 페이지 하단의 링크와 다른 언어의 샘플이있는 것 같습니다. – mikemil

+0

고마워요.하지만 문제가 해결되지 않습니다.이 책의 코드는 매우 간단하며 cdyne의 WSDL에서 wsimport에 의해 자동 생성 된 클래스가 제공하는 API를 사용합니다. BTW, 이것은 JDK 1.7에 JAX-WS 2.2가 포함되어 있다고 말합니다 : http://docs.oracle.com/javase/7/docs/technotes/guides/xml/jax-ws/ 두 가지를 컴파일하고 실행할 수있는 이유를 설명합니다. Eclipse와 명령 행에서 특별한 것이없는 클라이언트와 서버. – user1408140