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/