5、Web Service-整合CXF

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

图解:

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

时间: 2024-10-07 17:55:05

5、Web Service-整合CXF的相关文章

Web Service学习-CXF与Spring整合为JavaEE应用发布WebService(三)

CXF与Spring整合,分两个方面给大家介绍: 1,在传统ssh项目基础上添加Web Service 赋值CXF的jar包 在web.xml配置文件中导入CXF的核心控制器:CXFServlet 在Spring配置文件中导入CXF提供Schema,xml配置文件 在Spring配置文件中使用jaxws:endpoint元素来暴露Web Service 如果要添加拦截器,在jaxws:endpoint元素里添加 inInterceptors,outInterceptors子元素 2,远程调用We

分布式系统(3)---Web Service实战--CXF理论篇

第一篇:CXF理论篇 在Java领域,WebService的框架很多,例如:AXIS,XFire,CXF等.AXIS,XFire相对比较成熟. Axis全程Apache Extensible Interaction System即Apache可扩展交互系统.是第三代Apache SOAP.本质上就是一个SOAP引擎,但不完全是一个SOAP引擎,它还是一个独立的SOAP服务器和一个嵌入Servlet引擎的服务器. XFire是新一代的Java Web服务引擎,可以非常容易地和Spring集成.是c

Web Service学习-CXF开发Web Service实例demo(一)

Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样调用问题.比如.有一个C语言写的程序.它想去调用java语言写的某个方法. 集中解决:1,远程调用 2.跨平台调用 3,跨语言调用 实际应用: 1.同一个公司的新,旧系统的整合.Linux上的java应用,去调用windows平台的C应用 2,不同公司的业务整合.业务整合就带来不同公司的系统整合.不

Web Service (四) 手动发布Web Service接口-CXF与Spring集成

当我们发布完Web Service接口之后有两种方式可以调用Web service服务,一种是通过动态客户端方式,另一种是引用服务端的接口,引用服务端接口的方式对于客户端同服务器端耦合比较大,而使用WSDL的方式客户端不知道服务端的存在就可以调用服务器的方法. 下面是项目的结构图: 1.Web Service发布项目 2.编写服务端接口类以及实现类,如下,同上一篇自动发布接口,多了一个注解@WebService package com.test.webservice; import javax.

分布式系统(3)---Web Service实战--CXF实践篇

第二篇:CXF实践篇 CXF架构开发WebService步骤: 1.建立Web项目 2.准备所有的jar包 3.web.xml中配置cxf的核心servlet,CXFServlet 服务器端: <display-name>cxf_demo</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpat

Web Service学习-CXF开发Web Service的权限控制(二)

Web Service如何进行权限控制? 解决思路:服务器端要求input消息总是携带有用户名,密码信息,如果没有用户名和密码信息,直接拒绝调用 解决方案:拦截器 为了让程序员能访问,并修改CXF框架所生成的SOAP消息,CXF提供了拦截器 CXF(Celtix +XFire)说明: 如果不用CXF等框架,SOAP消息的生成,解析都是由程序员负责.无论是添加用户名,密码信息还是提取用户名,密码信息,都可由程序员代码完成. 如果使用CXF等框架,SOAP消息的生成,解析都是由CXF等框架来完成.

Web Service (二) CXF自动发布Web Service(No Spring)

Web Service实现目前流行的框架主要有两种,cxf和axis这两个框架,下面是这两个框架的优缺点,我们这个项目中使用的是cxf这个框架,首先看一下没有集成spring的时候是怎么实现远程调用的. Axis与Cxf比较 在SOA领域,我们认为Web Service是SOA体系的构建单元(building block).这两个框架 都是从已有的开源项目发展起来的.这两个框架哪一个更好一些呢? 通过一个比较矩阵来比较Axis2和CXF变得有现实的意义.最主要的区别在以下几个方面: 1.CXF支

【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclipse for J2EE,当然大家可以选择MyEclipse我只是嫌最新版的MyEclipse Crack太烦,所以没用它.当年我也是最喜欢它的哟.如果你手头只有Eclipse for Java没关系,安装一个WTP就可以了. a.首先创建一个Dynamic Web Project : 在创建的第一页

Web Service学习之一:Web Service原理

一.定义 Web Service 不是框架也不是技术 而是解决远程调用.跨平台调用.跨语言调用问题的一种规范. 二.应用1.同一个公司新.旧系统的整合:比如CRM系统与OA.客服系统相互调用2.不同公司的业务组合:比如淘宝与物流公司信息平台调用3.内容聚合:比如天气预报.股市行情.新闻信息等 需要不同平台获取相关信息 三.web service 框架Axis(Apache)-->Axis2(Apache)XFire --> Celtrix(ESB框架) + XFire(web service框

Web Service简单入门例子

我们一般实现Web Service的方法有很多种.其中我主要使用了CXF Apache插件和Axis 2两种. Web Service是应用服务商为了解决每个问题而提供的在线服务方案,其主要采用了SOAP(Simple Object Access Protocol)协议,数据传输格式使用XML格式来描述,因此也具有跨平台的特性. web广泛用到的技术: TCP/IP:通用网络协议,被各种设备使用 HTML(标准通用标记语言下的一个应用):通用用户界面,可以使用HTML标签显示数据 Java:写一