public List<SelectOption> currencies { get { map<String, String> currmap = new map<String, String>(); List<Selectoption> lstcurr = new List<Selectoption>(); DOM.Document doc = new DOM.Document(); doc.load('http://api2.aacb.com/get-exchange-rate/?date=20140930'); DOM.XMLNode root = doc.getRootElement(); if (root.getNodeType() == DOM.XMLNodeType.ELEMENT && root.getName() == 'CustomExchangeRates') { for (Dom.XMLNode child: root.getChildElements()) { if (child.getNodeType() == DOM.XMLNodeType.ELEMENT && child.getName() == 'Currencies') { String nameSt = child.getChildElement('Name', NULL).getText().trim(); String currSt = child.getChildElement('ExchangeRate', NULL).getText().trim(); currmap.put(nameSt,currSt); } } } for(String a: currmap.keyset()) { lstcurr.add(new Selectoption(currmap.get(a),a)); } return lstcurr; } set; }
Ошибка Failed to parse XML due to: only whitespace content allowed before start tag and not h (position: START_DOCUMENT seen h... @1:1) Есть подозрение что я просто не так беру Элеметы по структуре. Но не знаю как по другому.
Зачем? Есть же сериализацию/десериализацию в JSON. Отлично работает А для интеграции с API которые кушают XML все равно придется каждый раз подстраиваться.
С того что не всегда салесфорс кушает WSDL и генерит правильный прокси класс.
Вопрос то был совсем не про wsdl
Ок. Объясню развернуто. Предположим нужно общаться с внешним вебсервисом, который отдает тебе XML. Тут есть 2 варианта развития событий : 1. вебсервис имеет WSDL 2. вебсервис не имеет WSDL
В первом случае тоже имеем 2 варианта. 1. Салесфорс создал прокси класс 2. Салесфорс не смог создать прокси класс
Рассмотрим второй случай. Вэтом случае просто придется писать парсер для ответа внешнего сервера. И чем больше методов имеет этот сервис тем больше гемороя отгребаем (если не написать конечно универсальный парсер).
я читал, что что JAVA, что .net веб-сервисы могут сами генерить WSDLы описывающие их интерфейс, т.е. сделать WSDL просто. Другое дело что иногда подсовывают устаревшие (необновленные) WSDL...
2. Салесфорс не смог создать прокси класс
в каких случаях Салесфорс не может создать класс-клиент из WSDL? - когда WSDL слишком большой. - слышал на форуме что когда <soap:body use="literal"/> use не литеральный. - когда еще?
другое дело что и сгенеренные класс-клиент нужно допиливать, они даже могут не сохраняться сразу после генерации из-за напрмер повторов в названии полей.
Тут человек как раз парсит вручную, а предлагаю написать сериализацию/десериализацию Наверно, это удобнее или ты со мной не согласен?
Не согласен, потому как это не универсальный подход.
Именно вот про это я и писал тут. Сам недавно писал ручками парсер xml от hh.ru потому что wsdl не парсился. Не уверен что эта задача подпадает под общие методы и ее можно описать какими-то сериализаторами.
А для интеграции с API которые кушают XML все равно придется каждый раз подстраиваться.
я читал, что что JAVA, что .net веб-сервисы могут сами генерить WSDLы описывающие их интерфейс, т.е. сделать WSDL просто. Другое дело что иногда подсовывают устаревшие (необновленные) WSDL...
2. Салесфорс не смог создать прокси класс
в каких случаях Салесфорс не может создать класс-клиент из WSDL? - когда WSDL слишком большой. - слышал на форуме что когда <soap:body use="literal"/> use не литеральный. - когда еще?
другое дело что и сгенеренные класс-клиент нужно допиливать, они даже могут не сохраняться сразу после генерации из-за напрмер повторов в названии полей.
Попадется WSDL, который имеет кучу инклудов сторонних xsd-схем размазанных по разным нэймспейсам - это точно никак не переварить
Потому что, если я правильно понимаю сериализация в XML нужна чтобы из объекта Salesforce получить валидный XML который поймет какой-нибудь сервис (чтобы не составлять этот XML ручками). Собственно для этого и предназначен WSDL, поэтому его тут все и упоминают. А как еще написать сериализатор который удовлетворит потребности всех сервисов которые кушают XML. Как посмотришь у всех абсолютно разные XML на выходе получаются. Или мы про разные вещи говорим?
Я говорю про SOAP сервисы, которые умеют работать только с xml, ну и удобно соответственно использовать десериализацию, чтобы рабоатть с объектами. WSDL - язык описания веб сервисов, основанный на хml