BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 08 июл 2025, 00:43

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 27 окт 2014, 12:20 
Не в сети

Зарегистрирован: 29 ноя 2009, 23:37
Сообщения: 33
Карма: 0
Знаю что разработчики очень любят 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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2014, 14:56 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Попробуйте указать для getCid() @XmlAttribute:
Код:
@XmlAttribute
public String getCid()


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2014, 16:40 
Не в сети

Зарегистрирован: 29 ноя 2009, 23:37
Сообщения: 33
Карма: 0
Amir писал(а):
Попробуйте указать для getCid() @XmlAttribute:
Код:
@XmlAttribute
public String getCid()


Спасибо, помогло!
Это необходимо для всех свойств класса добавлять?

Кстати попутный вопрос - а как правильнее будет массив вернуть в 1С?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 окт 2014, 16:48 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Цитата:
Это необходимо для всех свойств класса добавлять?
По умолчанию значение поля передается так: <billingContract><cid>1</cid></billingContract>
@XmlAttribute указывает что значение должно быть в атрибуте, т.е. так: <billingContract cid="1"></billingContract>

Видимо 1C не умеет брать обычную строку из элемента дерева, ждет что она будет в атрибуте.
Для многих, но не для всех - число, строку и другие подобные объекты в атрибуте передать можно (и, в принципе, логично), а сложный объект - нет.

Цитата:
Кстати попутный вопрос - а как правильнее будет массив вернуть в 1С?
Тут я не знаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 07 фев 2015, 21:59 
Не в сети
Клиент

Зарегистрирован: 24 дек 2014, 17:07
Сообщения: 12
Откуда: Север
Карма: 0
Для возврата массива используйте 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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.034s | 27 Queries | GZIP : On ]