2013-03-09 4 views
0

WSDL을 사용하여 Grails 프로젝트에서 웹 서비스를 호출하는 방법을 배우려고합니다. 필자는 WSDL과 일부 XML 결과를 제공 받았다.WSDL, SOAP, REST 등 이해하기

WSDL에서 Java 코드를 생성 할 수 있었고 모든 것이 올바르게 작동하는 것 같습니다. 여기

는 WSDL의 : http://www.restfulwebservices.net/rest/USAZipCodeService.svc?wsdl

그리고 여기에 XML입니다 : http://api.geonames.org/postalCodeSearch?placename=MN&username=demo

내 프로젝트에서이 예외를 수신하고 있습니다 :

ERROR client.WebServiceClientFactoryImpl $ WSClientInvocationHandler - "GeoNames을"에 네임 스페이스를 요소. javax.xml.ws.soap.SOAPFaultException : "geonames"요소에 네임 스페이스가 없습니다.

반환 된 XML이 SOAP에 유효하지 않다고 말하는 것 같습니다. 퍼즐 조각을 놓치거나 잘못 이해합니까? 그것은 나에게 꽤 새로운 것이다.

편집 : https://github.com/ctoestreich/cxf-client

그것은 Config.groovy 파일에서 다음과 같이 구성되어 있습니다 (뭔가 잘못 될 수는/여기 실종?) :

wsdl = "http://www.restfulwebservices.net/wcf/USAZipCodeService.svc?wsdl" 
namespace = "cxf.client.postalcode" 
clientInterface = "cxf.client.postalcode.IPostalCodeService" 
serviceEndpointAddress = "http://api.geonames.org/postalCodeSearch" 
나는 CXF 클라이언트라는 Grails의 플러그인을 사용하려고
+0

파서에 wsdl 정의를 전달 하시겠습니까? –

+0

잘 모르겠습니다. 내가 사용하고있는 플러그인은 wsdl을 원하며 구성에 제공했습니다. 이것은 Java 클래스를 생성하는 데 사용되었습니다. 나는 그것이 다른 곳으로 가야 할 필요가있는 곳을 지나가는 것을 처리하는지는 모르지만 나는 생각한다. –

답변

1

웹 서비스의 매개 변수로 http://api.geonames.org/postalCodeSearch?placename=MN&username=demo에서 반환 된 XML을 보낸 것 같습니다. 분명히 WSDL 설명에서 geonames이라는 요소가 없다는 것을 알 수 있으므로 SOAPFaultException 예외는 상당히 공정한 결과입니다.

는 문제를 해결하려면, 당신은 반드시 호출 방법은 올바른 매개 변수와 함께 작동되게합니다 신중하게 WSDL 설명을 참조 할 필요가 <wsdl:operation><wsdl:message> 같은 USAZipCodeService WSDL 설명 태그에 정의 된대로.

또 다른 문제 : 귀하의 호출자와 Config.groovy에서 2 가지 WSDL이 사용되었습니다. 전자는 RESTful 서비스이고 나중에는 SOAP입니다. 다른 invoke 메소드와 매개 변수를 사용하므로 코드에 일관성있는 호출자와 매개 변수가 있는지 확인하십시오.