WebService学习

一.jdk搭建WebService服务端

1.定义接口

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService//注解接口
public interface WebServiceI {
  @WebMethod//注解方法
  String SayHello(String name);

  @WebMethod
  String save(String name,String age);
}

2.实现类

package com.sinosoft.webservice.impl;

import javax.jws.WebService;
import com.sinosoft.webservice.Interface.WebServiceI;

@WebService//注解实现类
public class WebServiceImpl implements WebServiceI{

  @Override
  public String SayHello(String name) {
    System.out.println("WebService SayHello " + name);
    return "SayHello " + name;
  }

  @Override
  public String save(String name, String age) {
    System.out.println("WebService save " + name + ", " + age);
  return "save Success";
  }
}

3.发布方式:

1)手动发布

    

package com.sinosoft.webservice.test;

import javax.xml.ws.Endpoint;
import com.sinosoft.webservice.impl.WebServiceImpl;

public class WebServicePublish {

  public static void main(String[] args) {

    String address = "http://localhost:8081/webservice";//访问地址
    Endpoint.publish(address, new WebServiceImpl());//发布
    System.out.println("发布WebSerivce成功!");
  }

}

2).放监听器里

  

package com.sinosoft.webservice.test;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.xml.ws.Endpoint;

import com.sinosoft.webservice.impl.WebServiceImpl;
@WebListener//监听器,初始化时即启动
public class WebServicePublishListener implements ServletContextListener {

  @Override
  public void contextDestroyed(ServletContextEvent arg0) {
  }

  @Override
  public void contextInitialized(ServletContextEvent arg0) {
    String address = "http://10.46.104.166:8081/WS_Server/Webservice";
    Endpoint.publish(address, new WebServiceImpl());
    System.out.println("发布WebSerivce成功!");
  }

}

3).以servlet方式发布

  

package com.sinosoft.webservice.test;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.xml.ws.Endpoint;

import com.sinosoft.webservice.impl.WebServiceImpl;

@WebServlet(value="",loadOnStartup=0)//loadOnStartup >= 0表示在容器加载时即启动
public class WebServicePublishServlet extends HttpServlet{
   public void init(){
      String address = "http://10.46.104.166:8081/webservice";
      Endpoint.publish(address, new WebServiceImpl());
      System.out.println("发布WebSerivce成功!");
   }
}

二.搭建WebService客户端

1.访问自己的WebService服务端

  新建java项目,获取到src所在路径,然后进入dos命令窗口,切换到src所在路径,然后命令行输入wsimport -keep XXX?wsdl  (xxx代表服务端的地址)

  成功后src下会出现一个包,里面有许多类,只需注意最后两个就行.

  新建测试类,

  

package com.sinosoft.webservice.client;

import com.sinosoft.webservice.impl.WebServiceImpl;
import com.sinosoft.webservice.impl.WebServiceImplService;

public class WSClient {
  public static void main(String[] args) {
    WebServiceImplService factory = new WebServiceImplService();//客户端连接类(上图的2)
    WebServiceImpl wsImpl = factory.getWebServiceImplPort();//接口(上图的1)
    String sayResult = wsImpl.sayHello("王尼玛");
    String saveResult = wsImpl.save("王尼玛", "18");
    System.out.println("调用WebService返回结果:" + sayResult);
    System.out.println("调用WebService返回结果:" + saveResult);
  }
}

运行结果:

  调用WebService返回结果:SayHello 王尼玛

  调用WebService返回结果:save Success

2.调用他人的WebService接口(调用免费的天气预报WebService接口)

  天气预报WebService服务接口地址:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

  如果它的接口是java语言编写的,则依旧创建java项目,dos窗口下切换到src所在目录

  输入命令:wsimport -keep http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

  可本次天气预报的接口是.NET编写的所以需要有小小的调整

  浏览器输入http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

  另存为wsdl文件,然后用编辑器打开把其中所有的

  <s:element ref="s:schema"/>
  <s:any/>
  替换为<s:any minOccurs="2" maxOccurs="2"/>
  再进入dos窗口,切换到src目录下,输入命令: wsimport -keep wsdl所在路径
  src下依旧会生成一个包,里面许多类,只需注意最后两个
  
 
然后测试类的编写

package cn.com.test;

import java.util.List;

import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWebService;
import cn.com.webxml.WeatherWebServiceSoap;

public class WSClilent {

  public static void main(String[] args) {
    WeatherWebService wsService = new WeatherWebService();//连接类,上图1
    WeatherWebServiceSoap wsSoap = wsService.getWeatherWebServiceSoap();//接口,上图2
    ArrayOfString wsArray = wsSoap.getWeatherbyCityName("北京");
    List<String> wsList = wsArray.getString();
    for (String string : wsList) {
      System.out.println(string);
    }
  }

}

运行结果:

直辖市
北京
54511
54511.jpg
2018/2/7 18:21:10
-9℃/2℃
2月7日 多云转晴
北风4-5级转西南风小于3级
1.gif
0.gif
今日天气实况:气温:0℃;风向/风力:西北风 2级;湿度:18%;紫外线强度:最弱。空气质量:良。
紫外线指数:最弱,辐射弱,涂擦SPF8-12防晒护肤品。
健臻·血糖指数:易波动,风力较大,血糖易波动,注意监测。
感冒指数:易发,天冷风大,易感冒,注意防护。
穿衣指数:冷,建议着棉衣加羊毛衫等冬季服装。
洗车指数:较不宜,风力较大,洗车后会蒙上灰尘。
空气污染指数:良,气象条件有利于空气污染物扩散。

-7℃/3℃
2月8日 晴转多云
南风3-4级转北风小于3级
0.gif
1.gif
-9℃/5℃
2月9日 多云
西北风4-5级转3-4级
1.gif
1.gif
北京位于华北平原西北边缘,市中心位于北纬39度,东经116度,四周被河北省围着,东南和天津市相接。全市面积一万六千多平方公里,辖12区6县,人口1100余万。北京为暖温带半湿润大陆性季风气候,夏季炎热多雨,冬季寒冷干燥,春、秋短促,年平均气温10-12摄氏度。北京是世界历史文化名城和古都之一。早在七十万年前,北京周口店地区就出现了原始人群部落“北京人”。而北京建城也已有两千多年的历史,最初见于记载的名字为“蓟”。公元前1045年北京成为蓟、燕等诸侯国的都城;公元前221年秦始皇统一中国以来,北京一直是中国北方重镇和地方中心;自公元938年以来,北京又先后成为辽陪都、金上都、元大都、明清国都。1949年10月1日正式定为中华人民共和国首都。北京具有丰富的旅游资源,对外开放的旅游景点达200多处,有世界上最大的皇宫紫禁城、祭天神庙天坛、皇家花园北海、皇家园林颐和园,还有八达岭、慕田峪、司马台长城以及世界上最大的四合院恭王府等各胜古迹。全市共有文物古迹7309项,其中国家文物保护单位42个,市级文物保护单位222个。北京的市树为国槐和侧柏,市花为月季和菊花。另外,北京出产的象牙雕刻、玉器雕刻、景泰蓝、地毯等传统手工艺品驰誉世界。

原文地址:https://www.cnblogs.com/goujh/p/8430864.html