forum.bitel.ru http://forum.bitel.ru/ |
|
1С и веб-сервис в биллинге - XDTO проблема http://forum.bitel.ru/viewtopic.php?f=19&t=9866 |
Страница 1 из 1 |
Автор: | rpra [ 27 окт 2014, 12:20 ] |
Заголовок сообщения: | 1С и веб-сервис в биллинге - XDTO проблема |
Знаю что разработчики очень любят 1С ![]() Решил попробовать воспользоваться веб-сервисами биллинга из 1С. Пробую простейший пример: Код: package api.ru.freedom.bgbilling.bean; import java.math.BigDecimal; public class BillingContract { private String cid; public String getCid() { return cid; } public void setCid( String cid ) { this.cid = cid; } } Код: package api.ru.freedom.bgbilling.web.impl; import javax.jws.WebService; import api.ru.freedom.bgbilling.bean.BillingContract; import ru.bitel.bgbilling.kernel.container.service.server.AbstractService; @WebService(targetNamespace = "freedom") public class ContractServiceImpl extends AbstractService{ /** * @param a * @return */ public BillingContract getContract( String a ) { a = "Hello " + a; BillingContract BContract = new BillingContract(); BContract.setCid( a ); return BContract; } } Добавляю WS-ссылку в 1С, пробую вызвать метод: Код: СервисБилинг=WSСсылки.BGBilling.СоздатьWSПрокси("freedom", "ContractServiceImplService", "ContractServiceImplPort"); Список=СервисБилинг.getContract("qq"); Код: Ошибка вызова операции сервиса: {freedom}:ContractServiceImplService:getContract()
по причине: Неизвестная ошибка. Ошибка преобразования данных XDTO: Чтение объекта типа: {freedom}billingContract - [1,129] Проверка дополнительного свойства: форма: Элемент имя: cid по причине: Ошибка преобразования данных XDTO: Чтение объекта типа: {freedom}billingContract - [1,129] Проверка дополнительного свойства: форма: Элемент имя: cid по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: {freedom}billingContract |
Автор: | Amir [ 27 окт 2014, 14:56 ] |
Заголовок сообщения: | Re: 1С и веб-сервис в биллинге - XDTO проблема |
Попробуйте указать для getCid() @XmlAttribute: Код: @XmlAttribute
public String getCid() |
Автор: | rpra [ 27 окт 2014, 16:40 ] |
Заголовок сообщения: | Re: 1С и веб-сервис в биллинге - XDTO проблема |
Amir писал(а): Попробуйте указать для getCid() @XmlAttribute: Код: @XmlAttribute public String getCid() Спасибо, помогло! Это необходимо для всех свойств класса добавлять? Кстати попутный вопрос - а как правильнее будет массив вернуть в 1С? |
Автор: | Amir [ 27 окт 2014, 16:48 ] |
Заголовок сообщения: | Re: 1С и веб-сервис в биллинге - XDTO проблема |
Цитата: Это необходимо для всех свойств класса добавлять? По умолчанию значение поля передается так: <billingContract><cid>1</cid></billingContract>@XmlAttribute указывает что значение должно быть в атрибуте, т.е. так: <billingContract cid="1"></billingContract> Видимо 1C не умеет брать обычную строку из элемента дерева, ждет что она будет в атрибуте. Для многих, но не для всех - число, строку и другие подобные объекты в атрибуте передать можно (и, в принципе, логично), а сложный объект - нет. Цитата: Кстати попутный вопрос - а как правильнее будет массив вернуть в 1С? Тут я не знаю.
|
Автор: | jsoft [ 07 фев 2015, 21:59 ] |
Заголовок сообщения: | Re: 1С и веб-сервис в биллинге - XDTO проблема |
Для возврата массива используйте bean с полем массив/список: Код: @XmlRootElement public class WrapperBean implements Serializable { private List<String> stringList; public WrapperBean() {} public List<String> getStringList() { return stringList; } public void setStringList(Lisr<String> list) { stringList = list; } } и возврат: Код: @WebMethod(operationName = "getStringList") public WrapperBean getStringList() { WrapperBean bean = new WrapperBean(); bean.setStringList(Arrays.asList("One", "Two", "Three")); return bean; } Ставьте аннотацию @XmlRootElement для всех классов, 1с такие классы очень хорошо пережёвывает. Ещё момент описан по ссылке http://www.sql.ru/forum/actualutils.asp ... g=16612010 |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |