首页 > Web开发 > 详细

WebService 学习教程(一)

时间:2015-11-16 19:23:34      阅读:296      评论:0      收藏:0      [点我收藏+]

 webservice简介

 

 

服务端代码如下:

package com.xiao.demo;

import java.util.ArrayList;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.WebParam.Mode;
import javax.jws.soap.SOAPBinding;

/*
 * 提供WebService服务的类
 */
@WebService(name = "WSDemo", targetNamespace = "http://xiaochangwei.zicp.net/wstest", serviceName = "WSDemo")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class WSDemo {
    private ArrayList<Person> persons = new ArrayList<Person>();;

    /**
     * 
     * 返回一个字符串
     * 
     * @param userName
     * @return
     */
    @WebMethod(operationName = "toSayHello", action = "sayHello", exclude = false)
    @WebResult(name = "returnWord") // 自定义该方法返回值在WSDL中相关的描述
    public String sayHello(@WebParam(name = "userName") String userName) {
        return "Hello:" + userName;
    }

    /**
     * web services 方法的返回值与参数的类型不能为接口
     * 
     * @param person
     * @return
     * @throws HelloException
     */
    @WebMethod(operationName = "sayHello", action = "sayHello")
    @WebResult(partName = "personList")
    public Person[] sayHello(@WebParam(partName = "person", mode = Mode.IN) Person person, String userName)
            throws HelloException {
        if (person == null || person.getName() == null) {
            throw new HelloException("说hello出错,对像为空。。");
        }
        persons.add(person);
        return persons.toArray(new Person[0]);
    }
}

这样还不行,通过下面的代码发布:

package com.xiao.demo.jws.server;

import java.util.LinkedList;
import java.util.List;
import javax.xml.ws.Binding;
import javax.xml.ws.Endpoint;
import javax.xml.ws.handler.Handler;

import com.xiao.demo.WSDemo;

/**
 * @author xiaochangwei
 * 启动web services服务
 */
public class StartServer {

    /**
     * @param args
     */
    public static void main(String[] args) {
        /*
         * 生成Example 服务实例
         */
        WSDemo serverBean = new WSDemo();
        /*
         * 发布Web Service到http://localhost:8080/hello地址
         */
        Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", serverBean);
        Binding binding = endpoint.getBinding();
        /*
         * 设置一个SOAP协议处理栈 这里就简单得打印SOAP的消息文本
         */
        @SuppressWarnings("rawtypes")
        List<Handler> handlerChain = new LinkedList<Handler>();
        binding.setHandlerChain(handlerChain);
        System.out.println("服务已启动 http://localhost:8080/hello");
    }
}

 

执行成功后,浏览器地址输入 http://localhost:8080/hello?wsdl 回车,这就看到了全部的wdsl内容了

  

 完善客户端

cmd后进入项目的根目录执行  wsimport -d ./bin -s ./src -p com.xiao.jws.client http://localhost:8080/hello?wsdl 

看到下面信息表示成功了

技术分享

 

然后刷新工程,看到了很多生成的java文件是不是,是就对了

客户端调用测试代码如下:

package com.xiao.demo.jws.client;

public class RunClient {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //初始化服务框架类
        Example_Service service = new Example_Service();
        //或者本地服务借口的实例
        Example server = (Example) service.getExamplePort();
        try {
            //调用web service的toSayHello方法
              System.out.println("---toSayHello---" + server.toSayHello("肖昌伟"));            
             
              Person person = new Person();
             person.setName("肖昌伟001");
             person.setAge(28);
             //调用web service的sayHello方法,执行后会往list里面增加
             server.sayHello(person, "肖哥哥");
             
             person = new Person();
             person.setName("肖昌伟002");
             person.setAge(29);
             //调用web service的sayHello方法
             PersonArray list = server.sayHello(person, "肖哥哥");
            //输出返回值
             System.out.println("----sayHello----");
            for (Person p : list.getItem()) {
                System.out.println(p.getName() + ":" + p.getAge());
            }            
        } catch (HelloException_Exception e) {
            e.printStackTrace();
        }
    }
}

 反复执行客户端的代码你会发现什么? 是不是列表打印出来的人重复了?

具体为啥 自己研究吧  这个so easy

测试任何代码一定要反复多次的执行,各种情况都要考虑到....

 

WebService 学习教程(一)

原文:http://www.cnblogs.com/xiaochangwei/p/4969448.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!