博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【WebService 系列二 使用JAX-WS开发示例程序】
阅读量:6934 次
发布时间:2019-06-27

本文共 4167 字,大约阅读时间需要 13 分钟。

  hot3.png

1、服务端代码

1.1、编写SEI

SEI即(Service Endpoint Interface)SEI在ws中称为portType,在java中称为接口

package jaxws.server;/** * @className: HelloService * @description: jaxws服务端口 * @author: hanson * @version: V1.0*/public interface HelloService {/**  * 问候  * @param name 名称  * @return 问候语  */ String sayHello(String name);}

1.2、编写SEI实现类

package jaxws.server.impl;import jaxws.server.HelloService;import javax.jws.WebService;/**  * @className: HelloServiceImpl  * @description: SEI实现类  * @author: HanSon.Q  * @version: V1.0  */@WebServicepublic class HelloServiceImpl implements HelloService {/** * 问候 * @param name 名称 * @return 问候语 */ @Override public String sayHello(String name) {      return "你好哇! " + name; }}

使用了一个类级别的注解@Webservice,使用了这个注解的类、接口、枚举、注解的所有方法都将会公开为Web服务,如果想屏蔽SEI中的某个方法,可以使用方法注解@WebMethod(exclude=true).

1.3、使用Endpoint发布服务

package jaxws.server;import jaxws.server.impl.HelloServiceImpl;import jaxws.server.impl.HelloServiceSoap12Impl;import javax.xml.ws.Endpoint;/** * @className: JaxwsServerApp * @description: 主程序, 用于发布服务 * @author: HanSon.Q * @date: 2018/2/6 11:33 * @version:V1.0 */public class JaxwsServerApp {    public static void main(String[] args) {        HelloService helloService = new HelloServiceImpl();        Endpoint.publish("http://127.0.0.1:1234/hello", helloService);    }}

点击运行,没有发生错误说明服务发布成功

2、查看WSDL

发布程序启动成功之后,通过浏览器访问 http://127.0.0.1:1234/hello?wsdl 来验证web服务的正确性。 通过WSDL可以知道如何调用web服务!

2.1、WSDL明细

3、利用wsimport.exe生成客户端代码

wsimport是JDK自带的ws客户端工具,它可以根据wsdl生成客户端调用代码(java),不用考虑服务端开发语言。

3.1、常用使用参数介绍

  • -keep:是否生成java源文件
  • -d:指定.class文件的输出目录
  • -s:指定.java文件的输出目录
  • -p:定义生成类的包名,不定义的话有默认包名
  • -verbose:在控制台显示输出信息
  • -b:指定jaxws/jaxb绑定文件或额外的schemas
  • -extension:使用扩展来支持SOAP1.2

wsimport.exe 在%JAVA_HOME%\bin目录下面

3.2、使用示例

首先在d盘下创建temp目录并在此目录下创建s文件夹和d文件夹分别用来存储.java文件和.class文件。 然后使用下面的命令回车执行

E:\>wsimport -keep -d D:\temp\d -s D:\temp\s -p jaxws.client -verbose http://127.0.0.1:1234/hello?wsdl

3.3、将生成的客户端代码拷贝到工程中

3.4、编写客户端代码

3.4.1、基于wsimport生成客户端代码方式
package jaxws.client.app;import jaxws.client.HelloServiceImpl;import jaxws.client.HelloServiceImplService;/** * @className: JaxwsClientApp * @description: 客户端 * @author: HanSon.Q * @version: V1.0 */public class JaxwsClientApp {    public static void main(String[] args) {        //1、创建服务视图        HelloServiceImplService helloServiceImplService = new HelloServiceImplService();        //2、通过服务视图得到服务端点(SEI)        HelloServiceImpl helloServiceImplPort = helloServiceImplService.getPort(HelloServiceImpl.class);        //3、调用服务方法        String result = helloServiceImplPort.sayHello("程序猿");        System.out.println(result);    }}

运行结果

你好哇! 程序猿
3.4.2、基于Service类
package jaxws.client.app;import jaxws.client.HelloServiceImpl;import javax.xml.namespace.QName;import javax.xml.ws.Service;import java.net.MalformedURLException;import java.net.URL;/** * @className: SimpleObjectAccessProtocolClientApp * @description: SOAP客户端 * @author: HanSon.Q * @date: 2018/2/6 14:23 * @version: V1.0 */public class SimpleObjectAccessProtocolClientApp {    public static void main(String[] args) throws MalformedURLException {        //1、定义url,参数为wsdl地址        URL url = new URL("http://127.0.0.1:1234/hello?wsdl");        //2、定义qname,第一个参数是命名空间,第二个参数名称是wsdl里边的服务名        QName qName = new QName("http://impl.server.jaxws/", "HelloServiceImplService");        //3、创建服务视图        Service service = Service.create(url,qName);        //4、通过服务视图得到服务端点        HelloServiceImpl helloService = service.getPort(HelloServiceImpl.class);        //5、调用web服务        String result = helloService.sayHello("Python");        System.out.println(result);    }}

运行结果

你好哇! Python
3.4.3、对比两种客户端方式
  • wsimport工具生成的客户端代码无法指定服务地址,使用生成的服务视图类获取服务端点实例
  • service调用Webservice可以指定webservice的地址,只需要服务端点的接口即可获取服务端点实例

4、WebService小结

  • 优点
    • 采用xml支持跨平台远程调用
    • 基于http的soap协议,可跨越防火墙
    • 支持面向对象开发
    • 有利于软件和数据重用,实现松耦合
  • 缺点
    • 由于soap是基于xml传输,本身使用xml传输会传输一些无关的东西从而效率不高

转载于:https://my.oschina.net/serve/blog/2251266

你可能感兴趣的文章
mac git安装及github配置
查看>>
BZOJ2498 : Xavier is Learning to Count
查看>>
postgresql数据库的数据导出
查看>>
Kafka: Connect
查看>>
hibernate(七) hibernate中查询方式详解
查看>>
用gulp构建你的前端项目
查看>>
cmd for 循环拷贝文件
查看>>
【转】PHP date("Y-m-d H:i:s");获取当前时间 差8小时解决办法
查看>>
System.Security.Cryptography.CryptographicException,密钥集不存在
查看>>
敏捷团队中的QA由来
查看>>
gdb调试报错:Missing separate debuginfos, use: debuginfo-install glibc-XXX
查看>>
根据百度API获得经纬度,然后根据经纬度在获得城市信息
查看>>
mariadb 10.1查看per connection内存消耗
查看>>
重装MAC系统 “安装器有效负载签名检查失败” 解决方法
查看>>
(转) Supercharging Style Transfer
查看>>
JMeter性能测试,验证请求数据的准确性(wc命令)
查看>>
Python学习札记(二十三) 函数式编程4 sorted
查看>>
跟着百度学PHP[14]-PDO-优化驱动
查看>>
mysql的.sql文件头部 /*!32312 IF NOT EXISTS*/;
查看>>
ONVIF测试方法及工具
查看>>