2013-03-09 6 views
0

Я пытаюсь узнать, как использовать WSDL для вызова веб-сервисов из проекта Grails. Мне предоставили WSDL и некоторые XML-результаты для справки.Понимание WSDL, SOAP, REST и т. Д.

Я смог сгенерировать Java-код из WSDL, и все, кажется, работает правильно.

Вот 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? Я упускаю/недопонимаю некоторые части головоломки здесь? Для меня это совсем ново.

Edit: Я пытаюсь использовать плагин Grails под названием CXF клиент: 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" 
+0

Вы уверены, что передаете определение wsdl вашему парсеру? –

+0

Я не уверен. Плагин, который я использую, требует wsdl, и я предоставил его в конфигурации. Он использовался для генерации классов Java. Я не знаю, обрабатывает ли он его в любом месте, куда ему нужно идти, но я думаю, что так оно и есть. –

ответ

1

Я думаю, вы только что отправили XML, возвращенный с http://api.geonames.org/postalCodeSearch?placename=MN&username=demo в качестве параметра веб-службы. Очевидно, что из возвращаемого описания WSDL вы можете видеть, что такой элемент не указан geonames, поэтому исключение SOAPFaultException - довольно справедливый результат.

Чтобы исправить это, вы должны обратиться к описанию WSDL тщательно, чтобы убедиться, что метод Invoke имеет правильные параметры работы с тем, что определено в описании тегов USAZipCodeService WSDL как <wsdl:operation> и <wsdl:message>.

Другая проблема: в вашем invoker и Config.groovy были отмечены два разных WSDL. Первый - это служба RESTful, а позже - SOAP. Они работают с различными методами и параметрами invoke, поэтому убедитесь, что ваш код имеет последовательный invoker и параметры.