在Java中一共有三种WebService规范,Jax-WS,JAXM,Jax-RS。
- Jax-WS(Java Api for XML-Based WebService)
- JAXM支持文件传输,暴露更多底层细节,不建议使用
- Jax-RS是针对Restful风格定制的一套Web服务规范(建议重点掌握)
JaxWS是实现例子入门
1.编写SEI
package cn.blueboz.ws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
/**
* Created by blueboz.chen on 2016/4/21.
* 首先是编写SEI(Service Endpoint Interface)服务端点接口
* SEI在WebService中称为PortType
*/
public interface IHelloWebService {
public String sayHello(String username);
}
2.编写SEI实现类,此类作为WebService提供服务类
package cn.blueboz.ws.impl;
import cn.blueboz.ws.IHelloWebService;
import javax.jws.WebService;
/**
* Created by blueboz.chen on 2016/4/21.
*/
@WebService(
serviceName = "HelloWebServiceImpl"
)
public class HelloWebServiceImpl implements IHelloWebService {
@Override
public String sayHello(String username) {
return "你好"+username+"!欢迎使用WebService!";
}
}
3.发布服务(方式一)
这是第一种发布服务端的方式,通过Java内置的Endpoint进行发布WebService服务
package cn.blueboz.ws; import cn.blueboz.ws.impl.HelloWebServiceImpl; import javax.xml.ws.Endpoint; /** * Created by blueboz.chen on 2016/4/21. */ public class Server { public static void main(String[] args) { Endpoint.publish("http://localhost:8888/Hello",new HelloWebServiceImpl()); } }
发布服务之后,我们可以打开终端,输入
C:\Users\Administrator> netstat -ano|findstr "8888"
TCP 127.0.0.1:8888 0.0.0.0:0 LISTENING 18348
可以看到存在端口8888,因为我们Endpoint发布接口时指定发布端口是8888,所以看到了端口占用,接下来我们用浏览器打开
http://localhost:8888/Hello,只要能看到下面这个,就说明接口发布成功了!
4.发布服务方式二,使用CXF方式发布
要想使用CXF,必须先到Apache CXF下先下载CXF。
http://cxf.apache.org/
也可以在这里下载
http://download.csdn.net/detail/blueboz/9498010
我使用的版本是3.1.6.然后解压,可以看到如下的目录结构
bin文件夹包含需要使用的wsdl2java工具。就是生成客户端代码的工具。等
所以接下来我们需要配置环境变量,否则wsdl2java可能无法使用
新建如下环境变量
- CXF_HOME->cxf解压路径
- 在path环境变量追加;%CXF_HOME%\bin;
- 在ClassPath环境变量追加%CXF_HOME%\lib;
如果使用IDE开发,可以自己手动的把lib文件夹下所有的包导入。
这里之所以导入所有包,是为了教程方便,如果想自己尝试最小导包,可以从cxf-core开始,然后一个一个导入即可。
好了。
回到我们的IDE,新建另外一个类
package cn.blueboz.ws.impl; import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; /** * Created by blueboz.chen on 2016/4/21. */ public class CxfServer { /** * 通过CXF方式发布接口 * @param args */ public static void main(String[] args) { JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean(); factoryBean.setAddress("http://localhost:8888/Hello"); factoryBean.setServiceClass(HelloWebServiceImpl.class); factoryBean.create(); } }
运行之后,访问地址,可以看到步骤三看到的页面就说明接口发布成功了。
至于客户端怎么调用,请看我的下一个博客