开发者

How to make a SOAP call in Java

开发者 https://www.devze.com 2022-12-18 10:43 出处:网络
This seems like it should be simple, but maybe I\'m missing something. I just want to make a SOAP call in Java, preferrably using only built-in APIs. I\'m a little overwhelmed looking at javax.xml.soa

This seems like it should be simple, but maybe I'm missing something. I just want to make a SOAP call in Java, preferrably using only built-in APIs. I'm a little overwhelmed looking at javax.xml.soap package in the Java documentation. I have tried searching Google, but it seems like all the results are from 2000-2002, and they are all talking about libraries that can be used for SOAP calls (before SOAP libraries were built in, I guess).

I don't need to handle the SOAP request; only make one. This site has an example that is pretty simple, but it doesn't use the built-in Java SOAP libraries. How would I do basically the same thing using core Java?

// Create the parameters
Vector params = new Vector(  );
params.addElement(
    new Parameter("flightNumber", Int开发者_开发技巧eger.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


Soap has changed a lot since the early days. You can do things like what you describe, but it is not common.

A more common practice now is to use a wsdl2java tool to generate a client API from a WSDL description of the service. That will give you a nice, clean, API to call.

Apache CXF is one place to go for this sort of thing.

One proviso is rpc/encoded. If you are dealing with an old service, it might be rpc/encoded, and in that case your best bet is Apache Axis 1.x. Everything else has run away from rpc/encoded.


The simplest way is soap-ws library: https://github.com/reficio/soap-ws

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

   client.post(envelope);
0

精彩评论

暂无评论...
验证码 换一张
取 消