Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / соап такой соап. хелп :) / 21 сообщений из 21, страница 1 из 1
26.11.2019, 11:58
    #39894371
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
В общем, попросили меня написать клиента для соапа. а я вообще этого никогда не делал. смотрю тонны древней доки и чот не очень въезжаю. простые примеры понятны а сложные уже не очень.

в общем суть в следующем (да, вопрос наверное тупой для тех кто в теме) - у меня есть два файла - wsdl и xsd
через всдл я сгенерил джава код (или скала код - без разницы), вытащил через консамерсервис - сервиспорт. а там единственный метод гетЧтоТоТам. туда надо положить объект getЧтоТоТамRequest
а в этом объекте поле message, в котором метод setElement и всё.

собссно у меня есть XSD из которой я сделал класс того что надо послать в сервис. но это обычный такой ДТО класс. как мне его превратить в Element или что я делаю не так? там кажется что то с маршалёром надо мутить или что? :) спасибо за ответ заранее.
...
Рейтинг: 0 / 0
26.11.2019, 12:00
    #39894372
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
  @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "any"
    })
    public static class Message {

        @XmlAnyElement
        protected Element any;

        /**
         * Gets the value of the any property.
         * 
         * @return
         *     possible object is
         *     {@link Element }
         *     
         */
        public Element getAny() {
            return any;
        }

        /**
         * Sets the value of the any property.
         * 
         * @param value
         *     allowed object is
         *     {@link Element }
         *     
         */
        public void setAny(Element value) {
            this.any = value;
        }

    }
...
Рейтинг: 0 / 0
26.11.2019, 12:01
    #39894373
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
а вот что мне надо отправить:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "authAppInfo"
})
@XmlRootElement(name = "AuthRequest", namespace = "urn://******/AuthService/types/1.0")
public class AuthRequest {

    @XmlElement(name = "AuthAppInfo", namespace = "urn://*******/AuthService/types/1.0", required = true)
    protected AuthAppInfo authAppInfo;

    /**
     * Gets the value of the authAppInfo property.
     * 
     * @return
     *     possible object is
     *     {@link AuthAppInfo }
     *     
     */
    public AuthAppInfo getAuthAppInfo() {
        return authAppInfo;
    }
...
Рейтинг: 0 / 0
26.11.2019, 12:35
    #39894400
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT,
Нужно сделать правильный примерчик на правильном сервисе.
Например,
https://wiki.cdyne.com/index.php/CDYNE_Weather
А потом смотреть ваше легаси. В чем отличия.
...
Рейтинг: 0 / 0
26.11.2019, 12:41
    #39894406
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT,
(Хорошо,что в основном мио переходит на rest ибо soap это отдельный головняк)
Ну вообще запуск сгенерированного средой soap где-то такой
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
import java.io.FileOutputStream;
import java.io.IOException;

import java.net.MalformedURLException;
import java.net.URL;

import java.nio.charset.Charset;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
 public static void main(String[] args) {
        Service service = Service.create(
String url="Ваш IP или доменное имя"
                        new URL(url+"/webserviceService/webservice?wsdl"/*Путь к wsdl*/),
                        new QName("urn:HolldataIntf-IXmldata", "webserviceService"/*Ваше namespace описанное в wsdl */));
        Webservice websoap=service.getPort(Webservice.class/*Сгенерированный класс вашего сервиса*/);
/*Дальше ваши методы у меня так*/
         GetTable table=new GetTable();
         table.setPreparecount(0);
         table.setQueryname("dcontentssoapshop");
/*У Вас типа  посложнее*/
Message message=new Message();
message.setAny()

/*У меня*/
          GetTableResponse result=websoap.getTable(table);
          String s=result.getReturn();
/*У Вас своё надо смотреть wsdl и сгенерированные заглушки*/

}
...
Рейтинг: 0 / 0
26.11.2019, 12:42
    #39894407
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT
а там единственный метод гетЧтоТоТам
у нормального soap не один метод с одним параметром, а 50 штук с методами дата, строка, рубли, числа и т.д.
Прям прошлый век какой то.
...
Рейтинг: 0 / 0
26.11.2019, 12:44
    #39894409
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
irbis_al
основном мио переходит на rest ибо soap это отдельный головняк)
головняк в java из за класса Message.
В шарпе у MS все отлично.
...
Рейтинг: 0 / 0
26.11.2019, 13:49
    #39894470
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
...
Рейтинг: 0 / 0
26.11.2019, 14:57
    #39894521
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT,

В общем вся "жопа" из-за "Any".
Убивать надо тех, кто использует этот тип в SOAP-сервисах.

Я решал проблему так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RequestData", propOrder = {
    "data"
})
@XmlSeeAlso({DataClass1.class, DataClass2.class})
public class RequestData {

    protected Object data;

    public Object getData() {
        return data;
    }

    public void setData(Object value) {
        this.data = value;
    }

}



В аннотации @XmlSeeAlso - перечисляются все типы которые могут быть в "data"
...
Рейтинг: 0 / 0
27.11.2019, 02:13
    #39894793
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
mad_nazgul,
Да. Видел примеры. Где типизация там хорошо. А тут вот не очень. Да. Это сервис одной гос. Организации. Начинается на ф (не путать с кгб). Как написан так написан. Надо к нему конвектор написать.
В общем, сделал через жакс-би. Вот сюда написал и сразу разобрался :) ну сделать сделал но это какой то трэш и угар этот жакс-би ощущение чем ему лет двадцать. Он такой весь мутабельный с сайд эффектами и тп. Дичь. Сделал и стёр. Выдрал нужные методы, хмл-ки запросов и ответов и сделал тупо обычный веб клиент где в качестве бади уходит хмл постом. Получается респонзом оно же и распарсивается. Все хорошо все работает. Знаю что не правильно но для сервиса где есть только один метод где можно слать всё - пойдет.
...
Рейтинг: 0 / 0
27.11.2019, 02:15
    #39894794
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
А да. В ответ мне приходит хмл внутри которой джейсон. Шах и мат, Илон Маск.
...
Рейтинг: 0 / 0
27.11.2019, 05:53
    #39894805
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT
А да. В ответ мне приходит хмл внутри которой джейсон. Шах и мат, Илон Маск.


Так еще лучше. :-)
Указываете тип String, а потом Gson'ом десерелизуете.
...
Рейтинг: 0 / 0
27.11.2019, 06:26
    #39894811
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT
А да. В ответ мне приходит хмл внутри которой джейсон. Шах и мат, Илон Маск.
Действительно, колхоз какой-то, нормальные пацаны обычно вместо json кладут zip с кодировкой каталога cp866, а внутри файл с кириллическим именем.
...
Рейтинг: 0 / 0
27.11.2019, 10:26
    #39894875
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
Андрей Панфилов
andreykaT
А да. В ответ мне приходит хмл внутри которой джейсон. Шах и мат, Илон Маск.
Действительно, колхоз какой-то, нормальные пацаны обычно вместо json кладут zip с кодировкой каталога cp866, а внутри файл с кириллическим именем.


чо уж там zip это обыденно, нет бы какой arj да еще и в KOIR8
...
Рейтинг: 0 / 0
28.11.2019, 00:59
    #39895311
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
да. там русский в ср866.

я вот думаю насколько я не прав, если для создания запросов я заюзал шаблонизатор плея twirl вместо xsd сконверченной в класс. хотя куда уж хуже то.
...
Рейтинг: 0 / 0
28.11.2019, 01:01
    #39895313
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
вообще. хотел заюзать скаловский функционал работы с хмл, имея шаблон в текстовом виде, который следом подгружается как объект хмл. а потом просто меняя значения полей. легко и просто да. ну как в джейсоне. а потом как увидал синтаксис этого скаловского родного фреймворка чтоб сделать банальную замену значения через путь и мне плохо стало. дерьмо какое-то. зачем всё усложнять так то? это тупо нечитабельно и неюзабельно если у тебя уровень вложенности выше 1.
...
Рейтинг: 0 / 0
28.11.2019, 05:50
    #39895329
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT
вообще. хотел заюзать скаловский функционал работы с хмл, имея шаблон в текстовом виде, который следом подгружается как объект хмл. а потом просто меняя значения полей. легко и просто да. ну как в джейсоне. а потом как увидал синтаксис этого скаловского родного фреймворка чтоб сделать банальную замену значения через путь и мне плохо стало. дерьмо какое-то. зачем всё усложнять так то? это тупо нечитабельно и неюзабельно если у тебя уровень вложенности выше 1.


Это Scala детка. Привыкай.

А так старый добрый JAXB или Apache CXF должны помочь.
...
Рейтинг: 0 / 0
28.11.2019, 08:35
    #39895354
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT
вообще. хотел заюзать скаловский функционал
по крупному, у тебя клиент не должен работать с xml.
MS генерит прокси классы в отдельную папку.
А у клиента только методы обычные.
listUsers = servis.дайДолжников(датаНачала, датаКонца)
...
Рейтинг: 0 / 0
28.11.2019, 10:56
    #39895429
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
Ну так и жаксби так же работает. И это было бы правильно использовать его. Но есть нюансы, борьба с которыми по ходу займет больше времени чем написание сервиса.

На пока я заюзал сериализатор с хмл в плее, по виду точно так же работает как плеевсий джейсон десер.
Тут логика работы как с обычным сервисом который отдает джейсоны. А на отправку вот сложнее. Строить хмл из элементов это адище то еще. Юзать хсд не вариант. Поэтому заюзал шаблонизатор с плейсхолдерами. Выглядит очень кастом но но работает . Одно меня заботит - могут же в теории в плейсхолдер при сунуть XSS инъекции.
...
Рейтинг: 0 / 0
28.11.2019, 11:02
    #39895434
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
PetroNotC Sharp
andreykaT
вообще. хотел заюзать скаловский функционал
по крупному, у тебя клиент не должен работать с xml.
MS генерит прокси классы в отдельную папку.
А у клиента только методы обычные.
listUsers = servis.дайДолжников(датаНачала, датаКонца)

Я уже чуть выше показал что обмен там через один метод сенд-мессадж, а у мессаджа одно единственное поле - элемент.
Ну в той схеме да суть работы на уровне текста хотя бы отсутствует.

Здесь тоже ее бы не было не будь этого шаблонизатора.
Не пойму неужели замена элемента в объекте такая нетривиальная задача?
...
Рейтинг: 0 / 0
28.11.2019, 11:27
    #39895456
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
соап такой соап. хелп :)
andreykaT
через один метод сенд-мессадж, а у мессаджа одно единственное поле - элемент.
я помню. У меня отличная память.
Просто зашел разговор о скале.
И если делать правильно, то я как _прикладник_ конечно приветствую код как я выше написал.
А получится так или нет я не в курсе.
Наверно проще просить доплату за работу с извратным сервер API.
Чё тут думать.
Закрывай топик и сделай красиво не на Г. Легаси коде.
Имхо
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / соап такой соап. хелп :) / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]