SOAP学习笔记2-使用jdk发布web服务          返回主页

注意:用 Jdk1.6.0_21 以后的版本发布一个WebService服务.

说明: 在JDK1.6中JAX-WS规范定义了如何发布一个webService服务。
       JAX-WS是指Java Api for XML – WebService.

与Web服务相关的类,都位于javax.xml.ws.****包中。

    主要类有:
    a)@WebService - 它是一个注解,用在类上指定将此类发布成一个webservice服务.
    b)Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了
    @WebService注解对象绑定到一个地址的端口上。
    Endpoint是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,
    一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。

    static Endpoint.publish(String address, Object implementor)
    在给定地址处针对指定的实现者对象创建并发布端点。stop方法用于停止服务。

其他注意事项:

    1)给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布。不支持静态方法,final方法。
    2)如果希望某个方法(非static,非final)不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。
    3)如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。
    4)服务类中不能没有方法
    5)@WebMethod(exclude=true)屏蔽方法

代码示例

服务端

  1. HelloServer.java,发布一个服务,当用户调用时返回hello+用户名称 package com.snowalker.soap.server; import javax.jws.WebService; @WebService public class HelloServer {

        public String sayHello(String name) {
            return "hello " + name ;
        }
    }
    

注意

         方法权限是publish
         不能是final类型的
         方法不能是静态的
         服务类至少有一个方法
  1. 发布方法,通过EndPoint.publish(url, 服务实现类);

    package com.snowalker.soap.server;
    import javax.xml.ws.Endpoint;
    public class ServerPublisher {
        public static void main(String[] args) {
            //发布helloServer
            Endpoint.publish("http://127.0.0.1:8081/sayhello", new HelloServer());
    
        }
    }
    
  2. 启动服务,访问http://127.0.0.1:8081/sayhello?wsdl得到描述文档
  3. 通过wsimport -s . -p net.stub http://127.0.0.1:8081/sayhello?wsdl 生成服务端调用代码
  4. 将上一步生成的代码导入工程中
  5. 编写客户端代码 import net.wuwenliang.ws.stub.HelloServer; import net.wuwenliang.ws.stub.HelloServerService; public class TestJdkServer {

        public static void main(String[] args) {
            //创建服务点访问集合
            HelloServerService helloServerService = new HelloServerService();
            //获得绑定类
            HelloServer helloServer = helloServerService.getHelloServerPort();
            //调用逻辑
            String result = helloServer.sayHello("snowalker");
            System.out.println(result);
        }
    }
    

运行结果

        hello snowalker