JDK6提供了对Web Service原生的支持,对Web Service进行了完美的封装,完全隐藏了底层内容,甚至可以不用了解wsdl的具体规范。使用Web Service就像使用本地方法一样简单。下面来举个例子,依然从最简单的例子入手。
使用命令 wsgen -cp ./bin -r ./src/test1/wsgen -s ./src -d ./bin -wsdl test1.Message ,得到wsdl文件
(需要先在工程目录下src/test1下新建目录wsgen)
如果发布webservice的java类的方法中有异常声明,wsgen命令会在test1目录下自动新建目录jaxws,并生成Exception实体bean类,如本例中生成ExceptionBean.java (在指定的wsgen目录中生成wsdl文件和xsd文件)
而后发布Web Service
在浏览器中输入url http://localhost:8080/Message?wsdl 即可发现WebServices 已发布成功。
JDK的bin目录下自带就有一个工具,wsimport。一个用来导出webservice的东东,服务端可以导其导出后生成jar文件,然后客户端引用不就行了?
-d 表示输出的目录,目录必须事先存在,否则导出失败。
-keep表示导出webservice的class文件时是否也导出源代码Java文件。
-verbose表示详细信息。
-p wsimport.url 指定包
-s 指定源文件位置
wsimport -d d: -keep -verbose http://localhost:port/xxxxxx?wsdl 生成的包名,实际上在wsdl中namespace是相反的,二者对应
客户端调用
还是在工程目录下使用wsimport命令,根据wsdl描述生成的客户端执行类,下面2种方式都可以。
wsimport -d ./bin -s ./src -p wsimport.url http://localhost:8080/Message?wsdl
wsimport -d ./bin -s ./src -p wsimport.file ./src/test1/wsgen/MessageService.wsdl
我们发现2种方式wsimport生成的客户端文件完全一样,接着我们只要新建一个客户端测试类执行(RunClient.java)。
输出结果:
客户端打印:
Hello:hello, java6 webservice
zhuc-car
100
- package test1;
- import java.io.Serializable;
- /**
- * @author
- * @version
- */
- public class Car implements Serializable{
- private static final long serialVersionUID = 606544377239576049L;
- private String name;
- private Integer capacity;
- /
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
-
- public Integer getCapacity() {
- return capacity;
- }
-
- public void setCapacity(Integer capacity) {
- this.capacity = capacity;
- }
- }
- package test1;
- import javax.jws.WebMethod;
- import javax.jws.WebParam;
- import javax.jws.WebResult;
- import javax.jws.WebService;
- import javax.jws.soap.SOAPBinding;
- /**
- * @author
- * @version
- */
- @WebService
- @SOAPBinding(style = SOAPBinding.Style.RPC)
- public class Message {
- @WebMethod(operationName = "toSayHello", action = "sayHello", exclude = false)
- @WebResult(name = "returnWord")
- // 自定义该方法返回值在WSDL中相关的描述
- public String sayHello(@WebParam(name = "userName") String userName) {
- return "Hello:" + userName;
- }
-
- @WebMethod(operationName = "getCar", action = "getCar")
- @WebResult(name = "returnCar")
- public Car getCar(String name) throws Exception{
- Car c = new Car();
- c.setName(name);
- c.setCapacity(100);
- System.out.println("return a Car: " + name);
- return c;
- }
- }
使用命令 wsgen -cp ./bin -r ./src/test1/wsgen -s ./src -d ./bin -wsdl test1.Message ,得到wsdl文件
(需要先在工程目录下src/test1下新建目录wsgen)
如果发布webservice的java类的方法中有异常声明,wsgen命令会在test1目录下自动新建目录jaxws,并生成Exception实体bean类,如本例中生成ExceptionBean.java (在指定的wsgen目录中生成wsdl文件和xsd文件)
而后发布Web Service
- package test1;
- import javax.xml.ws.Endpoint;
- /**
- * @author
- * @version
- */
- public class StartServer {
-
- public static void main(String[] args) {
- Endpoint.publish("http://localhost:8080/Message", new Message());
- System.out.println("Server已启动");
- }
- }
在浏览器中输入url http://localhost:8080/Message?wsdl 即可发现WebServices 已发布成功。
JDK的bin目录下自带就有一个工具,wsimport。一个用来导出webservice的东东,服务端可以导其导出后生成jar文件,然后客户端引用不就行了?
好的,我们下面来看下怎么使用它。
它有几个很重要的参数,
-d 表示输出的目录,目录必须事先存在,否则导出失败。
-keep表示导出webservice的class文件时是否也导出源代码Java文件。
-verbose表示详细信息。
-p wsimport.url 指定包
-s 指定源文件位置
wsimport -d d: -keep -verbose http://localhost:port/xxxxxx?wsdl 生成的包名,实际上在wsdl中namespace是相反的,二者对应
客户端调用
还是在工程目录下使用wsimport命令,根据wsdl描述生成的客户端执行类,下面2种方式都可以。
wsimport -d ./bin -s ./src -p wsimport.url http://localhost:8080/Message?wsdl
wsimport -d ./bin -s ./src -p wsimport.file ./src/test1/wsgen/MessageService.wsdl
我们发现2种方式wsimport生成的客户端文件完全一样,接着我们只要新建一个客户端测试类执行(RunClient.java)。
- package wsimport.url;
- /**
- * @author
- * @version
- */
- public class RunClient {
-
- public static void main(String[] args) throws Exception_Exception {
- MessageService ms = new MessageService();
- Message m = ms.getMessagePort();
- System.out.println("客户端打印:");
- System.out.println(m.toSayHello("hello, java6 webservice"));
- Car c = m.getCar("zhuc-car");
- System.out.println(c.getName());
- System.out.println(c.getCapacity());
- }
- }
输出结果:
客户端打印:
Hello:hello, java6 webservice
zhuc-car
100