JDK 1.6 环境下开发 WebService

    JDK1.6 中已经支持用Java开发WebService应用了,而且很方便。这样就大大减少了项目安装部署的代价,因为选择开源的框架依赖大量第三方包,程序的尺寸倍增。下面为大家提供一个一个JDK1.6开发Web Service的入门例子 HellService。

    1、服务端

    首先创建一个简单的接口 IHello ,这个接口就只有一个方法 say:

package com.spr.ws.service;


public interface IHello {
	
	public String say(String msg);

}

   然后编写HelloService的服务类 Hello ,实现上面的接口:

package com.spr.ws.service.impl;

import javax.jws.WebService;

import com.spr.ws.service.IHello;

@WebService
public class Hello implements IHello{

	public String say(String msg) {		
		return "Hello "+msg;
	}
	
}

   接着在项目的classpath根目录(工程项目 .classpath 文件所在目录)对服务端代码进行 apt 编译:

E:\etl\webService>apt com/spr/ws/service/impl/Hello.java

    编译的结果是在 com.spr.ws.service.impl 包下生成 jaxws 子包,该包下生成两个源文件:Say.java 和 SayResponse.java。

    最后,编写WebService的服务启动类。这里JDK1.6已经将这个过程提升到了API级别:

package com.spr.ws.soap.server;

import javax.xml.ws.Endpoint;
import javax.xml.ws.soap.SOAPBinding;

import com.spr.ws.service.impl.Hello;

public class SoapServer {

	/**
	 * <b>Summary: </b>
	 *     main(WebService的发布)
	 * @param args 
	 */
	public static void main(String[] args) {
		System.out.println("准备启动WebService服务:http://127.0.0.1:8080/helloService");
		Endpoint endpoint = Endpoint.publish("http://127.0.0.1:8080/helloService",new Hello());
		SOAPBinding binding = (SOAPBinding) endpoint.getBinding();
		binding.setMTOMEnabled(true);
		System.out.println("已成功启动WebService服务:http://127.0.0.1:8080/helloService");
	}

}

    运行之后,打开浏览器,输入 http://127.0.0.1:8080/helloService?wsdl 就能看到WebService的xml结构了。至此,该WebService的服务端基本开发完毕。因为ws基本上是一个远程调用的过程(RMI),所以,关键还是在,客户端该怎么调用。

    2、客户端

    这里的客户端调用,当然还是在JDK1.6自带的环境。首先介绍两个命令:

    a、wsgen(生成WebService服务端文件)

    参数说明(工程根目录):

  •  -cp 定义classpath
  • -r 生成 bean的wsdl文件的存放目录
  • -s 生成发布Web Service的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件)
  • -d 生成发布Web Service的编译过的二进制类文件的存放目录(该异常的描述类的class文件)
E:\etl\webService>wsgen -cp ./WebRoot/WEB-INF/classes -r ./WebRoot/ws -s ./src -d ./WebRoot/WEB-INF/classes -wsdl com.spr.ws.service.impl.Hello

    运行之后,会将前面开发的服务端java文件,转化成为webservice(HelloService.wsdl 和 HelloService_schema1.xsd)文件,存放在 WebRoot/ws 目录下。

    b、wsimport(一直WebService服务端地址,生成客户端文件,实现本地API式的调用,需要在ws运行的状态下进行)

    参数说明(工程根目录):

  • -d:生成客户端执行类的class文件的存放目录
  • -s:生成客户端执行类的源文件的存放目录
  • -p:定义生成类的包名
E:\etl\webService>wsimport -d ./WebRoot/WEB-INF/classes -s ./src -p [存放客户端代码的包名,如 com.spr.ws.soap.client] -keep [WebService 访问地址,如:http://127.0.0.1:8080/helloService?wsdl]

     运行之后,会在 com.spr.ws.soap.client 包下,生成若干客户端文件。这里才是关键。利用生成的客户端文件我们就可以把远端的WebService当做本地类来使用了。

package com.spr.ws.soap.client;

import com.spr.ws.soap.client.Hello;
import com.spr.ws.soap.client.HelloService;

public class TestHelloClient {

	public static void main(String[] args) {
		Hello hello = new HelloService().getHelloPort();
		System.out.println("----------HelloService.say()-------------");
		String result = hello.say("Web Service");
		System.out.println("result:"+result);
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值