www.webxml.com.cn下就有很多这样的服务,比如天气预报、手机号码归属地查询等这样的服务都可以归我们调到。为何取名“webxml”呢?依我看来,这是因为webservice遵循的soap协议,soap协议正是作为一个基于XML语言用于网上传输数据的协议。
接着,讲一下webservice在java的应用。
jdk可以基于某个webservice的服务说明(即wsdl文件)通过wsimport命令生成调用该服务的客户端代码,进行类的使用,就可以访问到服务类了。同样,jdk可以基于注解@WebService将类声明成服务类,利用Endpoint类发布该服务,其他用户也可以通过你发布的服务说明文件生成客户端代码,访问你的服务。
再说说我用过的两个webservice框架!
CXF,提供了对<span class="Apple-converted-space"> JAX-WS</span>全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。
Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化更强、灵活性更高和更有效的体系结构,这种体系结构可以很容易地插入到其他相关 Web 服务标准和协议(如 WS-Security、WS-ReliableMessaging 等)的实现中。
一、利用jdk发布webservice服务
1、创建服务接口类,最重要的是要加入@WebService注解
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService(
serviceName="MyServiceName",//修改服务访问点集合名字
portName="MyHelloServer",//修改端口名字
name="MyHelloServer",//修改服务类的名字
targetNamespace="top.einino.ws" //修改命名空间名字
)
public class HelloServer {
//@WebResult(name="helloresult") 修改修改返回值的元素的父标签名字
//@WebParam(name="personName") 修改传入参数的元素的父标签名字
// exclude=false表示对外可见,默认可以不配置
@WebMethod(exclude=false)
public @WebResult(name="helloresult") String sayHello(@WebParam(name="personName") String name){
return name+"hello";
}
}
2、创建服务发布类
import javax.xml.ws.Endpoint;
public class ServerPublish {
public static void main(String[] args) {
//两个参数,一个是本地的服务地址,二是提供服务的类
Endpoint.publish("http://127.0.0.1:8080/hello", new HelloServer());
}
}
3、现在即可,在浏览器输入http://127.0.0.1:8080/hello?wsdl访问你刚刚发布的服务了。
二、利用jdk访问webservice服务
1、使用执行jdk的wsimport命令生成客户端代码
打开cmd执行窗口:跳转到d://wscode路径下,这路径可自己决定,是为了存放生成的代码的,然后执行语句:wsimport -s . -p top.einino.ws.client http://127.0.0.1:8080/hello?wsdl
'-s . '表示生成java和class文件, 后面的‘.’表示放在当前目录,也可以是'-d .'表示只生成class文件,'-d .'是默认参数,后面的‘-p’指定在当前目录生成该路径的文件夹,并存放生成的代码
2、现在将生成的代码放入到自己的项目中,进行调用访问
package top.einino.client;
import java.io.IOException;
import top.einino.ws.client.MyHelloServer;
import top.einino.ws.client.MyServiceName;
public class TestJDKServerClient {
public static void main(String[] args) throws IOException {
//MyServiceName创建服务访问点集合
MyServiceName myServiceName = new MyServiceName();
//根据服务访问点获得绑定的服务类MyHelloServer
MyHelloServer myHelloServer = myServiceName.getMyHelloServer();
//调用具体的业务逻辑
String sayHello = myHelloServer.sayHello("bingo");
//测试用
System.out.println(sayHello);
}
}
三、小结
jdk发布webservice服务,主要是用@WebService来定义服务类,再用Endpoint类来发布这个服务。
jdk访问webservice服务,主要是根据http://127.0.0.1:8080/hello?wsdl用wsimport命令生成客户端代码,再进行调用访问。
如果大家有兴趣的话,也可以登录www.webxml.com.cn去找些wsdl文件,进行服务哦!
WebServcice在jdk的应用暂告一段落!
如果有疑问或者对该文章有何看法或建议或有问题的,欢迎评论,恳请指正!