如何用Java进行SOAP调用

时间:2010-01-27 17:38:12

标签: java soap

这似乎应该很简单,但也许我错过了一些东西。我只想用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

2 个答案:

答案 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);