分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

5、Web Service-整合CXF

发布时间:2023-09-06 02:35责任编辑:沈小雨关键词:Web

1、工程准备

 继续使用之前的服务端:https://www.cnblogs.com/Mrchengs/p/10562458.html

2、jar准备

 前去apache官网下载响应的jar:http://cxf.apache.org/download.html

3、在原来的工程中导入jar文件

其中提供的jar相对比较多可以根据开发需求去导入相应的jar!

启动服务:

可以看到使用的是jetty服务的

4、查看wsdl

 http://localhost:8081/webserviceserver/helloService?wsdl

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.service.cr.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://service.cr.com/" name="HelloServiceImplService" targetNamespace="http://impl.service.cr.com/"><wsdl:import location="http://localhost:8081/webserviceserver/helloService?wsdl=HelloService.wsdl" namespace="http://service.cr.com/"> </wsdl:import><wsdl:binding name="HelloServiceImplServiceSoapBinding" type="ns1:HelloService"><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="HelloServiceImplService"><wsdl:port binding="tns:HelloServiceImplServiceSoapBinding" name="HelloServiceImplPort"><soap:address location="http://localhost:8081/webserviceserver/helloService"/></wsdl:port></wsdl:service></wsdl:definitions>

 创建新的工程,将其拷贝到新的wsdl文件中进行编译

进行编译使用

环境变量的配置:https://www.cnblogs.com/ChrisMurphy/p/5224160.html

执行命令:

工程目录

 新建测试类:

5、测试类

package cn.com.client;import com.cr.service.HelloService;import com.cr.service.impl.HelloServiceImplService;public class client { ????public static void main(String[] args){ ???????HelloServiceImplService factory = new HelloServiceImplService(); ???????HelloService hello = factory.getHelloServiceImplPort(); ??????String res = hello.sayHello("mr"); ???????System.out.println(res); ???}}

得到的结果如下:

6、分析请求和响应 

 request

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:q0="http://service.cr.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> ?<soapenv:Body> ? ?<q0:sayHello> ?????<arg0>br</arg0> ???</q0:sayHello> ?</soapenv:Body></soapenv:Envelope>

 response

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> ?<soap:Body> ?? <ns2:sayHelloResponse xmlns:ns2="http://service.cr.com/"> ?????<return>hello:br</return> ???</ns2:sayHelloResponse> ?</soap:Body></soap:Envelope>

 分析:

<?xml version="1.0" encoding="UTF-8"?><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" ????xmlns:wsp="http://www.w3.org/ns/ws-policy" ???xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" ????xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" ????xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" ????xmlns:tns="http://impl.service.cr.com/" ????xmlns:xsd="http://www.w3.org/2001/XMLSchema" ????xmlns="http://schemas.xmlsoap.org/wsdl/" ????targetNamespace="http://impl.service.cr.com/" ????name="HelloServiceImplService"> ???????<!-- ????????types ????????schema : 定义了一些标签结构 ????--> ???<types> ???????<xsd:schema> ???????<xsd:import namespace="http://impl.service.cr.com/" ????????????schemaLocation="http://localhost:8081/webserviceserver/helloService?xsd=1"></xsd:import> ???????</xsd:schema> ???</types> ???<!-- ????????message: 用来定义消息的结构 ??soap消息 ???????part : 指定引用types中定义的标签片断 ????--> ???<message name="sayHello"> ???????<part name="parameters" element="tns:sayHello"></part> ???</message> ???<message name="sayHelloResponse"> ???????<part name="parameters" element="tns:sayHelloResponse"></part> ???</message> ????????????????<!-- ????????portType: 用来定义服务器端的SEI ???????operation : 用来指定SEI中的处理请求的方法 ???????input : 指定客户端应用传过来的数据, 会引用上面的定义的<message> ???????output : 指定服务器端返回给客户端的数据, 会引用上面的定义的<message> ????--> ???<portType name="HelloServiceImpl"> ???????<operation name="sayHello"> ???????????<input wsam:Action="http://impl.service.cr.com/HelloServiceImpl/sayHelloRequest" message="tns:sayHello"></input> ???????????<output wsam:Action="http://impl.service.cr.com/HelloServiceImpl/sayHelloResponse" message="tns:sayHelloResponse"></output> ???????</operation> ???</portType> ???????????<!-- ????????binding : 用于定义SEI的实现类 ???????type属性: 引用上面的<portType> ???????<soap:binding style="document"> : 绑定的数据是一个document(xml) ???????operation : 用来定义实现的方法 ???????<soap:operation style="document" /> 传输的是document(xml) ???????input: 指定客户端应用传过来的数据 ???????<soap:body use="literal" /> : 文本数据 ???????output : 指定服务器端返回给客户端的数据 ???????<soap:body use="literal" /> : 文本数据 ????--> ???<binding name="HelloServiceImplPortBinding" type="tns:HelloServiceImpl"> ???????<soap:binding transport="http://schemas.xmlsoap.org/soap/http" ????????????????????style="document"></soap:binding> ???????<operation name="sayHello"> ???????????<soap:operation soapAction=""></soap:operation> ???????????<input> ???????????????<soap:body use="literal"></soap:body> ???????????</input> ???????????<output> ???????????????<soap:body use="literal"></soap:body> ???????????</output> ???????</operation> ???</binding> ???????<!-- ????????service : 一个webservice的容器 ???????name属性: 它用一指定客户端容器类 ???????port : 用来指定一个服务器端处理请求的入口(就SEI的实现) ???????binding属性: 引用上面定义的<binding> ???????address : 当前webservice的请求地址 ????--> ???<service name="HelloServiceImplService"> ???<port name="HelloServiceImplPort" binding="tns:HelloServiceImplPortBinding"> ???<soap:address location="http://localhost:8082/webserviceserver/helloService"></soap:address> ???</port> ???</service></definitions>

同时可以参考地址:https://www.cnblogs.com/yangh965/p/5046841.html

图解:

5、Web Service-整合CXF

原文地址:https://www.cnblogs.com/Mrchengs/p/10569046.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved