powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / соап такой соап. хелп :)
21 сообщений из 21, страница 1 из 1
соап такой соап. хелп :)
    #39894371
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, попросили меня написать клиента для соапа. а я вообще этого никогда не делал. смотрю тонны древней доки и чот не очень въезжаю. простые примеры понятны а сложные уже не очень.

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

собссно у меня есть XSD из которой я сделал класс того что надо послать в сервис. но это обычный такой ДТО класс. как мне его превратить в Element или что я делаю не так? там кажется что то с маршалёром надо мутить или что? :) спасибо за ответ заранее.
...
Рейтинг: 0 / 0
соап такой соап. хелп :)
    #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
соап такой соап. хелп :)
    #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
соап такой соап. хелп :)
    #39894400
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT,
Нужно сделать правильный примерчик на правильном сервисе.
Например,
https://wiki.cdyne.com/index.php/CDYNE_Weather
А потом смотреть ваше легаси. В чем отличия.
...
Рейтинг: 0 / 0
соап такой соап. хелп :)
    #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
соап такой соап. хелп :)
    #39894407
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
а там единственный метод гетЧтоТоТам
у нормального soap не один метод с одним параметром, а 50 штук с методами дата, строка, рубли, числа и т.д.
Прям прошлый век какой то.
...
Рейтинг: 0 / 0
соап такой соап. хелп :)
    #39894409
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_al
основном мио переходит на rest ибо soap это отдельный головняк)
головняк в java из за класса Message.
В шарпе у MS все отлично.
...
Рейтинг: 0 / 0
соап такой соап. хелп :)
    #39894470
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
соап такой соап. хелп :)
    #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
соап такой соап. хелп :)
    #39894793
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
Да. Видел примеры. Где типизация там хорошо. А тут вот не очень. Да. Это сервис одной гос. Организации. Начинается на ф (не путать с кгб). Как написан так написан. Надо к нему конвектор написать.
В общем, сделал через жакс-би. Вот сюда написал и сразу разобрался :) ну сделать сделал но это какой то трэш и угар этот жакс-би ощущение чем ему лет двадцать. Он такой весь мутабельный с сайд эффектами и тп. Дичь. Сделал и стёр. Выдрал нужные методы, хмл-ки запросов и ответов и сделал тупо обычный веб клиент где в качестве бади уходит хмл постом. Получается респонзом оно же и распарсивается. Все хорошо все работает. Знаю что не правильно но для сервиса где есть только один метод где можно слать всё - пойдет.
...
Рейтинг: 0 / 0
соап такой соап. хелп :)
    #39894794
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А да. В ответ мне приходит хмл внутри которой джейсон. Шах и мат, Илон Маск.
...
Рейтинг: 0 / 0
соап такой соап. хелп :)
    #39894805
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaT
А да. В ответ мне приходит хмл внутри которой джейсон. Шах и мат, Илон Маск.


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


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

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


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

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

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

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

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


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