forum.bitel.ru http://forum.bitel.ru/ |
|
[6.0] Подскажите по custom API http://forum.bitel.ru/viewtopic.php?f=19&t=9063 |
Страница 1 из 1 |
Автор: | Phricker [ 19 мар 2014, 22:35 ] |
Заголовок сообщения: | [6.0] Подскажите по custom API |
Снова добрался до стыковки биллинга с внешними системами (в частности 1С). Расковырял PaymentManager.class для тестов. Слепил вот такую поделку Код: package api.ru.ellcom.bgbilling.service.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.jws.WebService; import ru.bitel.bgbilling.common.BGException; import ru.bitel.bgbilling.kernel.container.service.server.AbstractService; import bitel.billing.server.contract.bean.Payment; @WebService(targetNamespace="ellcom") public class ContractServiceImpl extends AbstractService { public List<Payment> getPaymentList(int contractId) throws BGException { List result = new ArrayList(); StringBuilder query = new StringBuilder("SELECT * FROM contract_payment WHERE cid=? ORDER BY dt"); try{ PreparedStatement ps = getConnection().prepareStatement(query.toString()); ps.setInt(1, contractId); ResultSet rs = ps.executeQuery(); while (rs.next()) { result.add(getPaymentFromRs(rs)); } rs.close(); ps.close(); } catch (SQLException e) { throw new BGException(e); } return result; } private Payment getPaymentFromRs(ResultSet rs) throws SQLException { Payment payment = new Payment(); payment.setId(rs.getInt("id")); payment.setContractId(rs.getInt("cid")); payment.setComment(rs.getString("comment")); payment.setDate(rs.getDate("dt")); payment.setTypeId(rs.getInt("pt")); payment.setSum(rs.getBigDecimal("summa")); payment.setUserId(rs.getInt("uid")); payment.setTimeChange(rs.getString("lm")); return payment; } } Пытаюсь получить данные из вебсервиса. Все светится ![]() Прикручиваю к 1Су и засада. Код: {Форма.Форма.Форма(8)}: Ошибка при вызове конструктора (WSОпределения) Определение = Новый WSОпределения(ВыбПутьПубликацииСервиса); по причине: Ошибка проверки модели XDTO: xdto-objectType-3.1.2 тип: payment пакет: ellcom Дублирование имени свойства 'contractId' 1C не видит разницы между contractID и contractId. Можно ли как-то повлиять на это? Не отдавать устаревшие методы или еще как-то? Подскажите нубу ![]() |
Автор: | skn [ 20 мар 2014, 00:27 ] |
Заголовок сообщения: | Re: [6.0] Подскажите по custom API |
как вариант создать свой bean (например MyPayment) и туда перекладывать данные из Payment |
Автор: | Phricker [ 20 мар 2014, 17:25 ] |
Заголовок сообщения: | Re: [6.0] Подскажите по custom API |
Решил пойти от обратного (тем более не всегда будут возвращаться сущности биллинга. Может какие то списки или т.п.) Сократил до Код: @WebService(targetNamespace="ellcom") public class ContractServiceImpl extends AbstractService { public List<HashMap<String, String>> getPaymentList(int contractId) throws BGException { List<HashMap<String, String>> result = new ArrayList<HashMap<String, String>>(); HashMap<String, String> map = new HashMap<String, String>(); map.put("start","1"); map.put("text","yes"); result.add(map); map = new HashMap<String, String>(); map.put("start","2"); map.put("text","no"); result.add(map); return result; } } Теперь вообще ничего не возвращается. Вот что возвращалось из примера в первом сообщении Код: <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:getPaymentListResponse xmlns:ns2="ellcom"> <return> <comment/> <contractID>4</contractID> <contractId>4</contractId> <date>2014-02-19T00:00:00+04:00</date> <ID>3</ID> <id>3</id> <paymentDate>2014-02-19T00:00:00+04:00</paymentDate> <paymentTypeID>1</paymentTypeID> <sum>20.00</sum> <summa>20.00</summa> <timeChange>2014-02-19 16:34:15.0</timeChange> <typeId>1</typeId> <typeTitle/> <userID>2</userID> <userId>2</userId> </return> </ns2:getPaymentListResponse> </S:Body> </S:Envelope> А вот что возвращается теперь Код: <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:getPaymentListResponse xmlns:ns2="ellcom"> <return/> <return/> </ns2:getPaymentListResponse> </S:Body> </S:Envelope> Не подскажете в чем трабл? Данные вроде простейшие. |
Автор: | Phricker [ 20 мар 2014, 17:28 ] |
Заголовок сообщения: | Re: [6.0] Подскажите по custom API |
В тоже время для допустим вот такого вот Код: public List getPaymentList(int contractId) throws BGException { List result = new ArrayList(); result.add("blablabla"); result.add("blablabla"); result.add("blablabla"); return result; } приходит Код: <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body> <ns2:getPaymentListResponse xmlns:ns2="ellcom"> <return xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">blablabla</return> <return xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">blablabla</return> <return xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">blablabla</return> </ns2:getPaymentListResponse> </S:Body> </S:Envelope> |
Автор: | skn [ 21 мар 2014, 01:10 ] |
Заголовок сообщения: | Re: [6.0] Подскажите по custom API |
мапы лучше не использовать, они не дружат с веб-сервисами самое безопасное возвращать строку или массив строк в массив строк можно закодировать мап (нечетные элементы массива ключи, четные - значения), типа ["key1", "value1", "key2", "value2", ... ] или возвращать json-строку |
Автор: | Phricker [ 21 мар 2014, 01:23 ] |
Заголовок сообщения: | Re: [6.0] Подскажите по custom API |
А можно пару примеров если это возможно? |
Автор: | skn [ 21 мар 2014, 01:26 ] |
Заголовок сообщения: | Re: [6.0] Подскажите по custom API |
Phricker писал(а): А можно пару примеров если это возможно? примеров чего? |
Автор: | Phricker [ 21 мар 2014, 10:41 ] |
Заголовок сообщения: | Re: [6.0] Подскажите по custom API |
Готового кода конечно же `(*∩_∩*)′ Для JSON строк |
Автор: | skn [ 21 мар 2014, 11:12 ] |
Заголовок сообщения: | Re: [6.0] Подскажите по custom API |
Phricker писал(а): Готового кода конечно же `(*∩_∩*)′ Для JSON строк вы сначала выясните сможете ли json на 1с раскодировать а примеры json - http://www.json.org/java/index.html |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |