Как сделать 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);