Нашел ли какой-нибудь язык или библиотека способ реализовать SOAP-клиент без тонны и тонны сгенерированного кода? - PullRequest
1 голос
/ 18 января 2012

Я из мира .NET и Java, и у меня сложилось впечатление, что SOAP всегда включает в себя множество и много сгенерированного стандартного кода.Это априори необходимо?Или другие языки или библиотеки нашли способ покончить с этим?

Ответы [ 3 ]

0 голосов
/ 19 января 2012

С Spring WebServices вы можете использовать только сгенерированные JAXB классы (из XSD) и использовать собственную реализацию, которая просто использует эти классы в качестве параметров метода и типов конечных точек.

Сам SOAPможно рассматривать как громоздкий протокол, который требует дорогих / тяжеловесных инструментов.Его также можно рассматривать как тонкую оболочку полезных нагрузок XML, которая имеет большое преимущество - WSDL как язык описания (который также можно рассматривать как тяжелый или вездесущий), который описывает операции и параметры.

Назад к SpringWeb Services, вот дорожная карта:

  • у вас есть только XSD
  • вы используете XJC (или какой-то плагин maven) для генерации классов
  • вы пишете свою собственную конечную точку сметоды, которые используют эти классы в качестве параметров

вот пример конечной точки:

@PayloadRoot(localPart = "myMethod", namespace = "http://example.com")
@ResponsePayload
public MyResult myMethod(@RequestPayload MyRequest req)
{
}

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

0 голосов
/ 26 января 2019

Если вы хотите внедрить или использовать простые WEB-сервисы и не генерировать тонны DTO-объектов, проверять их и т. Д., Вы можете использовать groovy-wslite .Он изначально предназначен для использования в Groovy, что делает его еще более простым и привлекательным, и вы, конечно, можете использовать его только в Java-приложении.

Простой пример использования клиентского WEB-сервиса:

import wslite.soap.*

def client = new SOAPClient('http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx')
def response = client.send(SOAPAction:'http://www.27seconds.com/Holidays/US/Dates/GetMothersDay') {
    body {
        GetMothersDay('xmlns':'http://www.27seconds.com/Holidays/US/Dates/') {
            year(2011)
        }
    }
}

assert "2011-05-08T00:00:00" == response.GetMothersDayResponse.GetMothersDayResult.text()
assert 200 == response.httpResponse.statusCode
assert "ASP.NET" == response.httpResponse.headers['X-Powered-By']
0 голосов
/ 18 января 2012

Я думаю, что много мусора необходимо для SOAP, но материал RESTFul выглядит многообещающе. Я думаю, что веб-API WCF стоит посмотреть, поскольку он реализует много стандартного http-содержимого, но стороны WCF-устройств данных тоже выглядит круто (OData?).

http://wcf.codeplex.com/wikipage?title=WCF%20HTTP

http://msdn.microsoft.com/en-us/data/bb931106

надеюсь, что это поможет

...