本篇主要讲解了基于JAX-WS的WebService项目的快速实现,项目文件如下:
一、服务器的建立
(1)创建接口
IMyService.java
package org.zttc.service;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
/*@SOAPBinding(style=Style.RPC)
* style:定义发送到WebService的消息和从WebService发送的消息的编码样式。Document和RPC两种形式,默认document。*/
public interface IMyService {
@WebResult(name="addResult")
public int add(@WebParam(name="a")int a, @WebParam(name="b")int b);
@WebResult(name="minusResult")
public int minus(@WebParam(name="a")int a, @WebParam(name="b")int b);
@WebResult(name="loginUser")
public User login(@WebParam(name="username")String username, @WebParam(name="password")String password);
}
(2)创建实现类
MyServiceImpl.java
package org.zttc.service;
import javax.jws.WebService;
@WebService(endpointInterface="org.zttc.service.IMyService")
public class MyServiceImpl implements IMyService {
@Override
public int add(int a, int b) {
System.out.println(a + "+" + b + "=" + (a + b));
return a+b;
}
@Override
public int minus(int a, int b) {
System.out.println(a + "-" + b + "=" + (a - b));
return a-b;
}
@Override
public User login(String username, String password) {
System.out.println(username + "is logining");
User user = new User();
user.setId(1);
user.setUsername(username);
user.setPassword(password);
return user;
}
}
(3)发布服务
SEI: Service Endpoint Interface
SIB: Service Implemention Bean
MyServer.java
package org.zttc.service;
import javax.xml.ws.Endpoint;
public class MyServer {
/**
* http://localhost:8887/ns?wsdl
* @param args
*/
public static void main(String[] args) {
String address = "http://localhost:8887/ns";
Endpoint.publish(address, new MyServiceImpl());
}
}
运行MyServer中的main()方法,发布服务,可通过http://localhost:8887/ns?wsdl查看wsdl文件
二、客户端的建立
首先,我们在本地项目中创建一个客户端,测试访问,如下TestClient.java
package org.zttc.service;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class TestClient {
public static void main(String[] args) {
try {
//创建访问WSDL服务地址的URL
URL url = new URL("http://localhost:8888/ns?wsdl");
//通过QName指明服务的具体信息(<MyServiceImplService xmlns="http://service.zttc.org/">)
QName sname = new QName("http://service.zttc.org/", "MyServiceImplService");
//创建服务
Service service = Service.create(url, sname);
//实现接口
IMyService ms = service.getPort(IMyService.class);
System.out.println(ms.add(12, 33));
//以上服务有问题,依然依赖于IMyService接口
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
实现过程中,我们会发现,实现接口的时候,IMyService ms = service.getPort(IMyService.class);依然依赖于IMyService接口,也就是依然依赖于Java代码,不能满足WebService异构平台之间的交互(跨语言、跨平台)。