WebService - CXF开发Server和Client(main方法测试)

简介: WebService - CXF开发Server和Client(main方法测试)

本篇简要记录使用jdk生成Stub进行service与client的测试,未与spring结合且未发布到tomcat容器,Server和Client都是使用的main方法。


篇末有第二种方式(客户端代理工厂)进行客户端开发示例。


这里使用的是CXF,引入jar永远是不可少的(自己下载引入)。



20171104181922905.png



【1】配置系统环境变量

如果使用jetty生成Stub来编写客户端项目,需要进行如下配置:


【2】编辑Service并进行发布

service的编写使用JAX-WS,直接使用注解进行声明,简单便捷。Service项目不需要额外的jar,Client项目需要博文头部提到的jar。

① 编写service接口

package com.web.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
//这里使用了注解,声明为webservice接口
@WebService
public interface ServiceServer {
    //这里使用了注解,声明方法
    @WebMethod
    public String sayHello(String name);
}

② 编写其实现类

package com.web.service.impl;
import javax.jws.WebService;
import com.web.service.ServiceServer;
//这里使用了注解
@WebService
public class ServiceServerImpl implements ServiceServer{
    @Override
    public String sayHello(String name) {
        System.out.println("server sayHello "+name);
        return "hello"+name;
    }
}

③ 使用main方法进行发布

package com.web.service.impl;
import java.util.Date;
import javax.xml.ws.Endpoint;
public class ServerTest {
    public static void main(String[] args) {
        String address = "http://192.168.2.225:8989/ServiceServerImpl";
        Endpoint.publish(address , new ServiceServerImpl());
        System.out.println("webservice 发布成功!"+new Date());
    }
}


【3】根据address,查看并保存wsdl文件

① 浏览器中输入地址,查看wsdl


http://192.168.2.225:8989/ServiceServerImpl?wsdl


将其保存为test.wsdl放入客户端项目下(新建一个客户端项目)


<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.service.web.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://service.web.com/" name="ServiceServerImplService" targetNamespace="http://impl.service.web.com/">
  <wsdl:import location="http://192.168.2.225:8989/ServiceServerImpl?wsdl=ServiceServer.wsdl" namespace="http://service.web.com/">
    </wsdl:import>
  <wsdl:binding name="ServiceServerImplServiceSoapBinding" type="ns1:ServiceServer">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="sayHello">
      <soap:operation soapAction="" style="document"/>
      <wsdl:input name="sayHello">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="sayHelloResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="ServiceServerImplService">
    <wsdl:port binding="tns:ServiceServerImplServiceSoapBinding" name="ServiceServerImplPort">
      <soap:address location="http://192.168.2.225:8989/ServiceServerImpl"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

【4】根据wsdl生成Stub,进行客户端测试

① DOS进入客户端项目src路径


② 根据项目下的wsdl生成Stub

wsimport -keey url



③ 刷新项目,可以看到src下生成了service和impl


20171102211037014.png


另外,还可以直接根据wsdl的url地址生成Stub,不用再保存wsdl具体文件到项目下。

20171102211639772.png



上面两种方式都是使用jdk生成Stub,还可以使用如下命令使用jetty进行生成:

wsdl2java url

④ 编写main方法,进行客户端调用

package com.web.client;
import com.web.service.impl.ServiceServer;
import com.web.service.impl.ServiceServerImplService;
public class Client {
    public static void main(String[] args) {
        ServiceServerImplService factory = new ServiceServerImplService();
        ServiceServer serviceServerImplPort = factory.getServiceServerImplPort();
        System.out.println(serviceServerImplPort.getClass());
        String result = serviceServerImplPort.sayHello("Tom");
        System.out.println("Client "+result);
    }
}


客户端输出结果如下:


服务端输出结果如下:


项目源码与jar下载:http://download.csdn.net/download/j080624/10051042

【Tips】可以采用JaxWsProxyFactoryBean 如下方式:

package com.web.test;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.web.service.ServiceServer;
public class ClientTest2 {
    public static void main(String[] args) {
         //创建WebService客户端代理工厂
          JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
          //注册WebService接口
          factory.setServiceClass(ServiceServer.class);
          //设置WebService地址
          factory.setAddress("http://192.168.2.225:8888/redis/hello");
          ServiceServer serverService = (ServiceServer)factory.create();
          System.out.println("invoke webservice...");
          String sayHello = serverService.sayHello("Lucy");
          System.out.println("message context is:"+sayHello);   
    }
}
目录
相关文章
|
8月前
|
人工智能 自然语言处理 JavaScript
利用MCP Server革新软件测试:更智能、更高效的自动化
MCP Server革新软件测试:通过标准化协议让AI实时感知页面结构,实现自然语言驱动、自适应维护的自动化测试,大幅提升效率,降低脚本开发与维护成本,推动测试左移与持续测试落地。
|
9月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
595 1
|
9月前
|
JSON Java Shell
多线程的 udp client server 测试demo
本示例展示了使用 Python 实现的 UDP 客户端与服务端通信,支持多线程、线程池、JSON 格式传输、UUID 生成、超时设置及 search_id 校验功能,适用于高并发场景下的数据交互需求。
多线程的 udp client server 测试demo
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
如何让AI更“聪明”?VLM模型的优化策略与测试方法全解析​
本文系统解析视觉语言模型(VLM)的核心机制、推理优化、评测方法与挑战。涵盖多模态对齐、KV Cache优化、性能测试及主流基准,助你全面掌握VLM技术前沿。建议点赞收藏,深入学习。
3044 8
|
12月前
|
测试技术 Go 开发者
如何为 gRPC Server 编写本地测试代码
本文介绍了如何使用 Go 语言中的 gRPC 测试工具 **bufconn**,通过内存连接实现 gRPC Server 的本地测试,避免端口冲突和外部依赖。结合示例代码,讲解了初始化内存监听、自定义拨号器及编写测试用例的完整流程,并借助断言库提升测试可读性与准确性。适用于单元及集成测试,助力高效开发。
261 1
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
1312 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
测试技术
软考软件评测师——可靠性测试测试方法
软件可靠性是指软件在规定条件和时间内完成预定功能的能力,受运行环境、软件规模、内部结构、开发方法及可靠性投入等因素影响。失效概率指软件运行中出现失效的可能性,可靠度为不发生失效的概率,平均无失效时间(MTTF)体现软件可靠程度。案例分析显示,嵌入式软件需满足高可靠性要求,如机载软件的可靠度需达99.99%以上,通过定量指标评估其是否达标。
|
消息中间件 缓存 监控
性能测试怎么做?方法、流程与核心要点解析
本文系统阐述了性能测试的核心方法论、实施流程、问题定位优化及报告编写规范。涵盖五大测试类型(负载验证、极限压力、基准比对、持续稳定性、弹性扩展)与七项关键指标,详解各阶段任务如需求分析、场景设计和环境搭建,并提供常见瓶颈识别与优化实战案例。最后规范测试报告内容框架与数据可视化建议,为企业级实践提出建立基线库、自动化回归和全链路压测体系等建议,助力高效开展性能测试工作。
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
458 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架