java调用WebService服务的四种方法总结

  • Post category:http

Java调用WebService服务的四种方法总结

Web服务是一种基于网络的应用程序,它使用标准化的XML消息格式进行通信。Java可以使用多种方式调用Web服务,包括以下四种方法:

1. 使用JAX-WS API

Java API for XML Web Services(JAX-WS)是Java EE 5规范的一部分,它提供了一种标准的方式来创建和调用Web服务。可以使用以下步骤调用Web服务:

  1. 使用wsimport工具生成客户端代码:
wsimport -keep http://localhost:8080/HelloWorld?wsdl
  1. 创建服务端点接口:
@WebService
public interface HelloWorld {
    @WebMethod
    String sayHello(String name);
}
  1. 创建服务端点实现:
@WebService(endpointInterface = "com.example.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
    public String sayHello(String name) {
        return "Hello, " + name + "!";
    }
}
  1. 发布服务:
Endpoint.publish("http://localhost:8080/HelloWorld", new HelloWorldImpl());
  1. 创建客户端代码:
HelloWorld service = new HelloWorldService().getHelloWorldPort();
String result = service.sayHello("World");

在此示例中,我们使用JAX-WS API调用了一个名为HelloWorld的Web服务。

2. 使用Apache CXF

Apache CXF是一个开源的Web服务框架,它提供了一种简单的方式来创建和调用Web服务。可以使用以下步骤调用Web服务:

  1. 使用wsdl2java工具生成客户端代码:
wsdl2java -d src -p com.example http://localhost:8080/HelloWorld?wsdl
  1. 创建客户端代码:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/HelloWorld");
HelloWorld service = (HelloWorld) factory.create();
String result = service.sayHello("World");

在此示例中,我们使用Apache CXF调用了一个名为HelloWorld的Web服务。

3. 使用Spring Web Services

Spring Web Services是一个基于Spring框架的Web服务框架,它提供了一种简单的方式来创建和调用Web服务。可以使用以下步骤调用Web服务:

  1. 创建服务端点接口:
@Endpoint
public class HelloWorldEndpoint {
    @PayloadRoot(namespace = "http://example.com", localPart = "sayHelloRequest")
    @ResponsePayload
    public SayHelloResponse sayHello(@RequestPayload SayHelloRequest request) {
        SayHelloResponse response = new SayHelloResponse();
        response.setMessage("Hello, " + request.getName() + "!");
        return response;
    }
}
  1. 创建客户端代码:
WebServiceTemplate template = new WebServiceTemplate();
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setContextPath("com.example");
template.setMarshaller(marshaller);
template.setUnmarshaller(marshaller);
SayHelloRequest request = new SayHelloRequest();
request.setName("World");
SayHelloResponse response = (SayHelloResponse) template.marshalSendAndReceive("http://localhost:8080/HelloWorld", request);
String result = response.getMessage();

在此示例中,我们使用Spring Web Services调用了一个名为HelloWorld的Web服务。

4. 使用Axis2

Axis2是一个开源的Web服务框架,它提供了一种简单的方式来创建和调用Web服务。可以使用以下步骤调用Web服务:

  1. 使用wsdl2java工具生成客户端代码:
wsdl2java -d src -p com.example http://localhost:8080/HelloWorld?wsdl
  1. 创建客户端代码:
ServiceClient client = new ServiceClient();
Options options = new Options();
options.setTo(new EndpointReference("http://localhost:8080/HelloWorld"));
client.setOptions(options);
OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace namespace = factory.createOMNamespace("http://example.com", "ns");
OMElement sayHello = factory.createOMElement("sayHello", namespace);
OMElement name = factory.createOMElement("name", namespace);
name.setText("World");
sayHello.addChild(name);
OMElement response = client.sendReceive(sayHello);
String result = response.getFirstChildWithName(new QName("http://example.com", "message")).getText();

在此示例中,我们使用Axis2调用了一个名为HelloWorld的Web服务。

示例1:使用JAX-WS API

以下是使用JAX-WS API调用Web服务的示例:

HelloWorld service = new HelloWorldService().getHelloWorldPort();
String result = service.sayHello("World");

在此示例中,我们使用JAX-WS API调用了一个名为HelloWorld的Web服务。

示例2:使用Apache CXF

以下是使用Apache CXF调用Web服务的示例:

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/HelloWorld");
HelloWorld service = (HelloWorld) factory.create();
String result = service.sayHello("World");

在此示例中,我们使用Apache CXF调用了一个名为HelloWorld的Web服务。

总之,Java可以使用多种方式调用Web服务,包括JAX-WS API、Apache CXF、Spring Web Services和Axis2。无论使用哪种方法,都需要生成客户端代码并创建客户端对象。