这似乎应该很简单,但也许我错过了一些东西。我只想用Java进行SOAP调用,最好只使用内置的API。在Java文档中查看javax.xml.soap包时,我有点不知所措。我试过搜索谷歌,但似乎所有的结果都是从2000年到2002年,他们都在讨论可以用于SOAP调用的库(我猜想在构建SOAP库之前)。
我不需要处理SOAP请求;只做一个。 This site有一个非常简单的例子,但它没有使用内置的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
答案 0 :(得分:4)
现在更常见的做法是使用wsdl2java工具从服务的WSDL描述生成客户端API。这将为您提供一个漂亮,干净的API来调用。
Apache CXF是这样做的一个地方。
一个附带条件是rpc /编码。如果您正在处理旧服务,它可能是rpc / encoded,在这种情况下,您最好的选择是Apache Axis 1.x.其他一切都远离了rpc / encoded。
答案 1 :(得分:1)
最简单的方法是soap-ws库: https://github.com/reficio/soap-ws
SoapClient client = SoapClient.builder()
.endpointUrl("http://rpc.middleearth.com")
.build();
client.post(envelope);