2009-05-29 4 views
0

웹 애플리케이션을 구현해야하지만, 관계형 데이터베이스를 사용하는 대신 다른 SOAP 웹 서비스를 백엔드로 사용해야합니다. 응용 프로그램의 중요한 부분은 웹 서비스 만 호출하고 그 결과를 표시합니다. 웹 서비스는 조작의 형태로 명확하게 정의 되었기 때문에 매개 변수 및 리턴 유형에서 기본 GUI는 도메인 엔티티를 기반으로하는 스 캐 폴딩의 경우처럼 쉽게 구성 될 수 있습니다.Grails에서 웹 서비스 스캐 폴딩

예를 들어 SearchProducts 웹 서비스 작업의 경우 검색 매개 변수를 입력해야하므로 검색 페이지를 구성 할 수 있습니다. 작업은 제품 목록을 반환하므로이 목록을 일종의 테이블에 표시 할 페이지가 필요합니다.

이것을 달성 할 수있는 라이브러리가 이미 grails에 있습니까? 그렇지 않다면, 당신은 어떻게 하나에 대해 만들겠습니까?

답변

0

XFire 또는 CXF 플러그인을 사용할 수 있습니다. 자동 스캐 폴딩의 경우, 스캐 폴딩 템플릿에서 Controller.groovy 템플릿을 수정하여 필요한 메소드를 자동 생성합니다.

1

아마도 가장 쉬운 방법은 WSDL 파일에서 wsimport를 사용하여 클라이언트 측 스텁을 생성하는 것입니다. 그런 다음 Groovy에서 스텁의 메서드를 Java에서 호출 한 것처럼 호출 할 수 있습니다.

예를 들어, Microsoft의 TerraServer에 대한 WSDL 파일은 http://terraservice.net/TerraService.asmx?wsdl입니다. 그렇다면

wsimport -d src -keep http://terraservice.net/TerraService.asmx?WSDL 

과 같이 실행합니다. 그러면 컴파일 된 모든 스텁이 src 디렉토리에 저장됩니다. 당신이 웹 서비스를 많이 액세스 그들 모두에 대한 스텁을 생성하려는 경우 다음 당신은

import com.terraserver_usa.terraserver.*; 

TerraServiceSoap sei = new TerraService().getTerraServiceSoap() 
Place home = new Place(city:'Boston',state:'MA',country:'US') 
def pt = sei.convertPlaceToLonLatPt(home) 
println "$pt.lat, $pt.lon" 
assert Math.abs(pt.lat - 42.360000) < 0.001 
assert Math.abs(pt.lon - -71.05000) < 0.001 

같은 그루비 코드를 작성할 수 있습니다. 또는 대신 동적 프록시를 사용할 수 있습니다.

결론은 Java가 이미 잘 수행하도록하고 Groovy를 사용하면 쉽게 사용할 수 있습니다.

+0

매우 포괄적 인 답변입니다. –

관련 문제