Java调用WebService服务的四种方法总结
Web服务是一种基于网络的应用程序,它使用标准化的XML消息格式进行通信。Java可以使用多种方式调用Web服务,包括以下四种方法:
1. 使用JAX-WS API
Java API for XML Web Services(JAX-WS)是Java EE 5规范的一部分,它提供了一种标准的方式来创建和调用Web服务。可以使用以下步骤调用Web服务:
- 使用wsimport工具生成客户端代码:
wsimport -keep http://localhost:8080/HelloWorld?wsdl
- 创建服务端点接口:
@WebService
public interface HelloWorld {
@WebMethod
String sayHello(String name);
}
- 创建服务端点实现:
@WebService(endpointInterface = "com.example.HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHello(String name) {
return "Hello, " + name + "!";
}
}
- 发布服务:
Endpoint.publish("http://localhost:8080/HelloWorld", new HelloWorldImpl());
- 创建客户端代码:
HelloWorld service = new HelloWorldService().getHelloWorldPort();
String result = service.sayHello("World");
在此示例中,我们使用JAX-WS API调用了一个名为HelloWorld的Web服务。
2. 使用Apache CXF
Apache CXF是一个开源的Web服务框架,它提供了一种简单的方式来创建和调用Web服务。可以使用以下步骤调用Web服务:
- 使用wsdl2java工具生成客户端代码:
wsdl2java -d src -p com.example http://localhost:8080/HelloWorld?wsdl
- 创建客户端代码:
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服务:
- 创建服务端点接口:
@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;
}
}
- 创建客户端代码:
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服务:
- 使用wsdl2java工具生成客户端代码:
wsdl2java -d src -p com.example http://localhost:8080/HelloWorld?wsdl
- 创建客户端代码:
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。无论使用哪种方法,都需要生成客户端代码并创建客户端对象。