发布第一个WebService
1,在JDK1.6中JAX-WS规范定义了如何发布一个WebService服务。 JAX-WS是指:Java API Base XML for WebService. 所以必须使用JDK1.6以后的版本才可以。 可以参看JAX-WS白皮书。(皮儿是白的,所以是白皮书。。。。。。 -_-#) 白皮书中的推荐开发步骤: (1),创建一个服务端点接口SEI,包含你希望发布的服务方法。在为这个接口开发一个实现类。 (2),为这个实现类添加一个注解:@WebService。 (3),为你的service生成一个WSDL文件。 (4),发布你的service。 ? 2,实例开发: (1)发布一个WebService: 这里直接建立一个类,先不提供接口。 建立一个Java项目,新建一个HelloWorld类。 /** * webservice开发步骤: * 1,一般是先开发一个接口,并定义希望发布的方法,并为这个接口开发实现类,实现方法。这里直接定义一个类,实现方法的发布。 * 2,在这个类上添加注解 @WebService * 3,为service生成WSDL文档。 * 4,发布。 * @author 许智敏 */ @WebService public class HelloWorld { public void sayHello() { System.out.println("hello webservice!!!"); } public static void main(String[] args) { //通过Endpoint发布。 Endpoint endpoint = null; endpoint = Endpoint.publish("http://192.168.0.104:8989/hello",new HelloWorld()); System.out.println("发布成功"); } } 上例中的publish中的第一个参数是url, 其中,前面是服务器的ip,8989是端口号,这个端口号随便定义,后面的hello是服务名,也随便定义。 这就将HelloWorld的sayHello()方法发布到服务中,可以提供远程调用。 在浏览器中输入http://192.168.0.104:8989/hello?wsdl,可以获取生成的WSDL文档。如下: 至此服务发布成功。 ? (2)根据WSDL生成java代码 在浏览器中可以看到生成的WSDL文档,根据之前的获取手机号码归属地的案例,可以用同样的方法获取这个WSDL的Java文件。 本来写了一个类,但是产生了好多类。这是根据WSDL文档解析出来的。 ? (3)编写客户端代码,远程访问服务器提供的sayHello()方法。 新建一个Java工程,模拟两个服务器之间的调用。 将刚生成的包目录结构复制到src下。 新建立一个TestMain测试文件。 在TestMain中远程访问。 分析WSDL文档,根据WSDL文档编写客户端代码。 1).首先要知道new谁,根据文档下方的<service?name="HelloWorldService">可知,我们可以new一个HelloWorldService类。 2).在根据下面的port的name,得知new的这个类中存在的一个get方法: <port?name="HelloWorldPort"?binding="tns:HelloWorldPortBinding"> 可知,在HelloWorldService中一定有一个getHelloWorldPort()方法。 3).调用这个get方法,获取了HelloWorld。这时返回的是HelloWorld接口。也就是根据服务器的HelloWorld类建立的接口,里面有所有的可以调用的方法。 4).通过HelloWorld就可以调用提供的服务sayHello()方法。 public class TestMain { public static void main(String[] args) { HelloWorldService helloWorldService = new HelloWorldService(); HelloWorld helloWorld = helloWorldService.getHelloWorldPort(); helloWorld.sayHello(); } } 5).在控制台可以看到打印的信息: 发布成功 hellowebservice!!! 至此客户端访问成功。 ? 注意:如果服务器的代码发生了改动,客户端需要重新根据WSDL生成Java代码,并覆盖之前工程中的代码,并实现。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- twitter-bootstrap – 桌面上的3列到平板电脑上的2列
- angular – 绑定状态到属性的[(ngModel)]和[ngModel]之间的
- angularjs – 在Mean.js堆栈上找不到Angular.js指令templat
- 通过Cygwin创建的文件(调用shell脚本)没有正确的Windows权限
- shell 中利用sqlplus 执行sql脚本的简便方式
- WebService - Client手动调用
- scala – 如何实现play框架的生命周期回调(2.5.x)
- scala – 如何将List中的两个连续元素转换为Map中的条目?
- Scala – Spark中的分层抽样
- Axis2 实例