Как сделать SOAP-вызов в Java

Кажется, это должно быть просто, но, может быть, я чего-то не хватает. Я просто хочу сделать SOAP-вызов на Java, предпочтительнее использовать только встроенные API. Я немного перегружен, глядя на javax.xml.soap в документации Java. Я попытался найти Google, но, похоже, все результаты получены с 2000-2002 годов, и все они говорят о библиотеках, которые могут использоваться для вызовов SOAP (до тех пор, пока, как я полагаю, не были встроены библиотеки SOAP).

Мне не нужно обрабатывать запрос SOAP; только сделать один. Этот сайт имеет пример, который довольно прост, но он не использует встроенные библиотеки Java SOAP. Как я мог бы сделать в основном то же самое с помощью ядра Java?

// Create the parameters
Vector params = new Vector(  );
params.addElement(
    new Parameter("flightNumber", Integer.class, flightNumber, null));
params.addElement(
    new Parameter("numSeats", Integer.class, numSeats, null));
params.addElement(
    new Parameter("creditCardType", String.class, creditCardType, null));
params.addElement(
    new Parameter("creditCardNumber", Long.class, creditCardNum, null));

// Create the Call object
Call call = new Call(  );
call.setTargetObjectURI("urn:xmltoday-airline-tickets");
call.setMethodName("buyTickets");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setParams(params);

// Invoke
Response res = call.invoke(new URL("http://rpc.middleearth.com"), "");

// Deal with the response

Ответ 1

Мыло сильно изменилось с первых дней. Вы можете делать то, что вы описываете, но это не часто.

В настоящее время более распространенной практикой является использование средства wsdl2java для создания клиентского API из описания службы WSDL. Это даст вам хороший, чистый API для вызова.

Apache CXF - это одно место для такого рода вещей.

Одно условие - rpc/encoded. Если вы имеете дело со старой услугой, это может быть rpc/encoded, и в этом случае ваш лучший выбор - Apache Axis 1.x. Все остальное убежало от rpc/encoded.

Ответ 2

Самый простой способ - это мыльная библиотека: https://github.com/reficio/soap-ws

   SoapClient client = SoapClient.builder()
        .endpointUrl("http://rpc.middleearth.com")
        .build();

   client.post(envelope);