|
1C 8.3 Web-сервис + клиент на Java | ☑ | ||
---|---|---|---|---|
0
satoru
11.01.17
✎
00:27
|
Есть web-сервис написанный на 1С 8.3.9 и опубликованный на Apache2.2 (localhost/wsTest/ws/test.1cws?wsdl). Необходимо написать на Java клиента, который будет работать с данной ws-ссылкой. Брал пример с сайта ИТС Использование web-сервисов совместно с Java и .Net, получить данные через метод удалось, но как отключится от web-сервиса, чтобы Apache отключился от базы?. Помогите разобраться с данным вопросом.
Код Java: private void getOS() { lbOS.setText("Подключение"); // Создаем Jax-WS прокси на демо web-сервис 1С:Предприятия wsTest ws = new wsTest(); // Получаем порт для вызова операции web-сервиса wsTestPortType portType = ws.getTestSoap(); // Выполняем вызов web-сервиса String verOS = portType.take(); //отключаем portType = null; lbOS.setText(verOS); } lbOS - это надпись на форме, в которую выводится результат. Так же интересует, если в базе есть пользователи, как провести авторизацию? |
|||
1
Юрий Лазаренко
11.01.17
✎
00:29
|
Через 20 минут после последнего запроса сам отключится.
|
|||
2
satoru
11.01.17
✎
00:31
|
(1) 20 мин. слишком долго. Когда подключаюсь к ws-ссылке через 1С и после вызова метода присваиваю переменной значение Неопределено блокировка сразу снимается.
|
|||
3
satoru
11.01.17
✎
22:03
|
а что насчет авторизации?
|
|||
4
satoru
11.01.17
✎
23:27
|
На счет авторизации разобрался, помогла статья (https://toster.ru/q/352777 ответ №1).
|
|||
5
satoru
11.01.17
✎
23:32
|
Осталась проблема с отключением от web-сервиса. И раз подключение с web-сервисом можно отключить в 1С 8 присвоив Неопределено, думаю есть способ и для Java/
|
|||
6
Gary417
12.01.17
✎
00:33
|
должно быть чтототам.close
вообще посмотрел код...бл наркоманы чёртовы...ява код с русским языком |
|||
7
satoru
12.01.17
✎
00:41
|
(6) К сожалению данного метода нет.
|
|||
8
Torquader
12.01.17
✎
00:53
|
С Java фокус может не пройти, так как соединение живо, пока жив объект, его вызвавший, но, в Java у нас есть только сборка мусора, и объект будет жить, пока его не уберут - соответственно, соединение будет оставаться рабочим.
P.S. если в объекте можно поменять настройки соединения, то нужно попробовать - после изменения настроек он отключится. Как вариант, покопаться в конфигурации Apache и запретить его Keep-Alive, чтобы после получения ответа соединение сразу рвалось. |
|||
9
Fram
12.01.17
✎
00:58
|
(8) +1 попробуй присовить null, потом вызвать сборку мусора принудительно Runtime.getRuntime().gc()
|
|||
10
Fram
12.01.17
✎
00:59
|
(1) а откуда эти 20 мин?
|
|||
11
satoru
12.01.17
✎
11:39
|
Проблема с отключение не воспроизводится, если база 1С серверная.
|
|||
12
satoru
12.01.17
✎
11:47
|
И ещё в метод take на web-сервисе добавил два параметра:
param1 (string входящий); param2 (string выходящий). И соответственно Java выдает ошибку: Exception in thread "AWT-EventQueue-0" com.sun.xml.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: SOAP message parsing error: unknown parameter. Please see the server log to find more detail regarding exact cuase of the failure. at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193) at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:126) at com.sun.xml.ws.client.sei.StubHandler.readResponse(StubHandler.java:247) at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:177) at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:256) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:128) at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102) at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151) at com.sun.proxy.$Proxy27.GetLicensed(Unknown Source) at webservice.testWS.getOS(testWS.java:123) at webservice.testWS.btnConnectActionPerformed(testWS.java:102) at webservice.testWS.access$000(testWS.java:16) at webservice.testWS$1.actionPerformed(testWS.java:52) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6533) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6298) at java.awt.Container.processEvent(Container.java:2236) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2294) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at java.awt.Container.dispatchEventImpl(Container.java:2280) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) Код Java: lbOS.setText("Подключение"); // Создаем Jax-WS прокси на демо web-сервис 1С:Предприятия Authenticator auth = new Authenticator() { Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("admin", "1".toCharArray()); } }; // Создаем Jax-WS прокси на демо web-сервис 1С:Предприятия Authenticator.setDefault(auth); wsTest ws = new wsTest(); // Получаем порт для вызова операции web-сервиса wsTestPortType portType = ws.getTestSoap(); // Выполняем вызов web-сервиса String error = ""; String verOS = portType.take("1234",error); //отключаем lbOS.setText(verOS); } |
|||
13
satoru
12.01.17
✎
18:08
|
up
|
|||
14
Fram
12.01.17
✎
19:24
|
не уверен, но может надо апач рестартануть после обновления вебсервиса?
|
|||
15
satoru
12.01.17
✎
20:43
|
(14) Заново опубликовал и перезапустил, таже ошибка.
|
|||
16
alexhtn
12.01.17
✎
21:43
|
Почитай на ИТС или в документации описание файла default.vrd, в нем можно сделать элемент pool и уменьшить maxAge, который по умолчанию равен 20 минутам.
|
|||
17
satoru
12.01.17
✎
22:09
|
(16) данный вопрос решен, проблема, если метод на веб-сервисе с параметрами (12)
|
|||
18
satoru
13.01.17
✎
12:55
|
up!
|
|||
19
Юрий Лазаренко
13.01.17
✎
17:38
|
(10) В параметрах публикации базы 1С. По дефоллту 20 минут, но можно поставить свое значение.
|
|||
20
satoru
14.01.17
✎
20:08
|
Народ, ещё раз - вопрос с завершением сеанса РЕШЕН! Сейчас необходимо решить вопрос (12).
|
|||
21
Неверный Параметр И
14.01.17
✎
20:27
|
(20) Уменьши время жизни сеанса в пуле.
|
|||
22
Неверный Параметр И
14.01.17
✎
20:28
|
И расскажи классу wsTest про твои новые параметры
|
|||
23
Курцвейл
14.01.17
✎
21:12
|
(20) На класс порта поставь throw WebServiceException
На take try { String verOS = portType.take("1234",error); } catch(Exception e) { String s = e.getMessage(); System.out.println(s); } |
|||
24
satoru
14.01.17
✎
22:01
|
(23) Это не класс, а интерфейс:
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package webservice; import javax.jws.WebMethod; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.ws.RequestWrapper; import javax.xml.ws.ResponseWrapper; /** * * @author SERGEYRYLSKIY-PC */ @WebService(name = "wsTestPortType", targetNamespace = "test") @XmlSeeAlso({ ObjectFactory.class }) public interface wsTestPortType { @WebMethod(operationName = "Take") @WebResult(targetNamespace = "test") @RequestWrapper(localName = "Take", targetNamespace = "test", className = "wsdemo.client.Take") @ResponseWrapper(localName = "TakeResponse", targetNamespace = "test", className = "wsdemo.client.TakeResponse") public String Take(String param1, String param2); } |
|||
25
satoru
14.01.17
✎
22:07
|
(22) И как это сделать?
|
|||
26
Курцвейл
14.01.17
✎
22:21
|
(24) может объясните отличие интерфейса от абстрактного класса?:)
дело то не в этом, а в том что расследование подобных ситуаций начинают с try catch и подкласс интерфейс этого не запрещает. |
|||
27
satoru
15.01.17
✎
14:06
|
(23) Сделал и что дальше?
private void getOS() throws WebServiceException { lbOS.setText("Подключение..."); // Создаем Jax-WS прокси на демо web-сервис 1С:Предприятия Authenticator auth = new Authenticator() { Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("Admin", "1".toCharArray()); } }; // Создаем Jax-WS прокси на демо web-сервис 1С:Предприятия Authenticator.setDefault(auth); wsTest ws = new wsTest(); // Получаем порт для вызова операции web-сервиса wsTestPortType portType = ws.getTestSoap(); // Выполняем вызов web-сервиса String error = ""; String verOS = ""; try { verOS = portType.take("1234",error); } catch(Exception e) { String s = e.getMessage(); System.out.println(s); verOS = "Ошибка подключения!"; } lbOS.setText(verOS); } |
|||
28
Курцвейл
15.01.17
✎
19:02
|
(27) И какую ошибку выдает?
|
|||
29
satoru
15.01.17
✎
19:06
|
Client received SOAP Fault from server: SOAP message parsing error: unknown parameter. Please see the server log to find more detail regarding exact cuase of the failure.
|
|||
30
Mauser
15.01.17
✎
19:09
|
(28) См 12. Неожиданно, не правда-ли?
|
|||
31
Mauser
15.01.17
✎
19:10
|
(29) На ИТС русским по белому написано:
Если необходимо перегенерировать прокси web-сервиса, удалите каталог src/wsdemo/client и выполните следующую команду:
|
|||
32
satoru
15.01.17
✎
20:16
|
(31) Попробовал. Выдаёт ошибку:
"wsimport" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. |
|||
33
satoru
16.01.17
✎
10:47
|
up
|
|||
34
Serginio1
16.01.17
✎
11:30
|
Да и потом говорят, что .Net отстой
|
|||
35
satoru
17.01.17
✎
10:23
|
Проблему решил. Используя NetBeans IDE 8.2 добавил в проект новый файл "Веб службы - клиент веб-службы" и платформа сама сгенерировала все необходимые классы и интерфейсы.
Тема закрыта. Всё, кто помогал, спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |