1.   问题背景
         现在我们两套语言并行,其中必然会涉及到不同系统的相互访问。 .net 的会员信息是用 webservice  提供服务的。那如何对现有 .net webservice 不做任何改动的情况下,用 Java 的 cxf 来访问呢,公司的知识库里面也有这个技术专题,但是我们公司招投标的 .net webservice 涉及到一些比较特别的加密方式 和 特有的数据返回结构,比如加密信息是放在 SoapHeader 里面,返回的数据格式为 DataSet 。特别是 DataSet 这个是 .net 特有的,这个时候通用的方法就显得不能为力了,我们需要做点小小的改动。
         
2.  cxf 拦截器
       要处理这个问题,我们要需要回归到最初的 soap (Simple Object Access Protocol),可以理解为一份有规定格式的xml 文件。我们需要自己来处理发送和返回的 xml 文件。为了做这件事情,我们先来了解一下 cxf 的拦截器
      
 
上图显示了一个请求流程中的各个拦截点。我们使用其中的 WRITE、PRE_STREAM、RECEIVE
       
1)  WRITE 拦截器 我们增加SoapHeader认证信息
          
 
2)PRE_STREAM 拦截器 ,获取发送报文,这个拦截器可以不加,我加只是为了获取发送的报文,方便我们最后对比发送报文和返回的报文。
 
3)Receive 拦截器,获取返回的报文,这个拦截器非常重要,这里面有我们需要的全部信息。
 
      
3.  解析SOAP 报文
   这个时候我们已经完成了80% 的工作。现在我们来看一下获取的报文。重点关注一下文件的结构。
      1) 发送的报文,已经添加了认证需要的SoapHeader信息。
            
     2) 返回的报文,已经有我们需要的信息,然后当作一份 xml 文件来处理就可以了。
           
 
4.  小结
        在这个问题处理当中,我们需要注意的一点就是,不同语言对这份规定格式的 xml 文件有不同的解析,会对我们的处理造成一定的困扰。这个时候我们要不忘初心,回到最原始的起点,二进制流 、字符串、xml 文件。方得始终,需要的信息就隐藏在里面。
 
5. 小疑问
      为什么我们用的是 Write、PreStream、Receive 这三个拦截器,其他的行不行。要说明这个问题,我们就要了解每个拦截器的作用以及在流程中所处的位置。可以看一下这篇文章 https://www.cnblogs.com/luangeng/p/6602667.html,可能看完了还是有点云里雾里,那也没有关系,你可以每个拦截都去试一下,看一下获取的是什么,输出的什么,这个过程当中,可能还需要其他一些协议来帮助你理解,也许会有一些意想不到的新发现,那就边学边试吧。
 
6. 展望一下
       经过这么一番折腾,也算解决了一些问题,那么有没有一种协议、标准、设计风格可以优雅的在不同的系统中畅行呢,或许RESTful 可以试一下, REST(Representational State Transfer )这个词是Roy Thomas Fielding在他2000年的博士论文中提出的(文末有论文中文版附件),最后引用一下 Roy Thomas Fielding 博士介绍论文写作目的来结尾,原文如下: "本文研究计算机科学两大前沿,软件和网络的交叉点。长期以来,软件研究主要关注软件设计的分类、设计方法的演化,很少客观地评估不同的设计选择对系统行为的影响。而相反地,网络研究主要关注系统之间通信行为的细节、如何改进特定通信机制的表现,常常忽视了一个事实,那就是改变应用程序的互动风格比改变互动协议,对整体表现有更大的影响。我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。"
 

cxf 调用 .net webservice的更多相关文章

  1. Apache cxf暴露接口以及客户端调用之WebService初步理解

    在我们真实的项目中,经常会调用别人提供给我们的接口,或者在自己的团队中, restful风格的前后端分离也经常会提供一个后端接口暴露出去供app,或者.net/C/C++程序员去调用,此时就需要使用到 ...

  2. cxf+spring发布webservice和调用

    maven项目配置http://cxf.apache.org/docs/using-cxf-with-maven.html <properties> <cxf.version> ...

  3. cxf调用WebService

    一.用CXF调用WebService的几种方式,参考: http://cxf.apache.org/docs/how-do-i-develop-a-client.html 二.JaxWsProxyFa ...

  4. Java调用WebService方法总结(7)--CXF调用WebService

    CXF = Celtix + XFire,继承了Celtix和XFire两大开源项目的精华,是一个开源的,全功能的,容易使用的WebService框架.文中所使用到的软件版本:Java 1.8.0_1 ...

  5. Spring Boot 使用 CXF 调用 WebService 服务

    上一张我们讲到 Spring Boot 开发 WebService 服务,本章研究基于 CXF 调用 WebService.另外本来想写一篇 xfire 作为 client 端来调用 webservi ...

  6. CXF发布restful WebService的入门例子(客户端)

    上篇说了怎么用cxf发布restful webservice,由于浏览器只能对该service发送http的GET请求,所以如果想对服务器上的数据,还需要实现客户端. 客户端的实现方式有无数种...可 ...

  7. Java 使用httpclient Post与cxf 发布的Webservice通信

    使用cxf发布的webservice不知道什么情况总会有时管用有时不管用,对于项目来说这肯定不行.又不想改动webservice因为代码太多.人懒! 于是便使用httpclient与webservic ...

  8. WebService系列二:使用JDK和CXF框架开发WebService

    一.使用JDK开发WebService 服务端程序创建: 1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer 2. 定义一个接口,使用@WebSer ...

  9. WEBSERVICE之CXF框架开发webservice

    之前学习了使用jdk开发webservice服务,现在开始学习使用框架(cxf)开发webservice. 1.准备工作 A.使用cxf开发webservice服务,需要用到apache-cxf-3. ...

随机推荐

  1. Java基本数据类型转换及运算符

    上次我们说到完了Java中的基本数据类型,今天我们来说说Java中的基本数据类型转换和Java中的运算符 基本数据类型转换 java中可以从任意基本数据类型转型到外的基本数据类型 注意:(boolea ...

  2. .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础

    书接上文:上一节中,我们已经实现Services 层.(https://www.cnblogs.com/xuzhencheng/p/11424751.html) 但是具体要如何将服务依赖注入进来呢?继 ...

  3. Centos7搭建Scrapy爬虫环境

    写在前面 因为之前的爬虫环境一直是部署在我自己本地的电脑上的,最近,写了一个监控别人空间的爬虫,需要一直线上24小时运行,所有就打算云服务器上部署环境,也捣鼓了好一会才弄好,还是有一些坑,这里先记录一 ...

  4. Sentinel Core流程分析

     上次介绍了Sentinel的基本概念,并在文章的最后介绍了基本的用法.这次将对用法中的主要流程和实现做说明,该部分主要涉及到源码中的sentinel-core模块. 1.token获取   如上为t ...

  5. SSH Config 管理多主机

    使用 一般我们使用ssh连接远程主机的时候,使用命令是: ssh root@ip ssh –i [identity-file] -p [port] user@hostname 但是如果ip地址过多,其 ...

  6. 性能测试之 Gatling

    在应用程序上线之前,有多少人做过性能测试? 估计大部分开发者更多地关注功能测试,并且会提供一些单元测试和集成测试的用例.然而,有时候性能漏洞导致的影响比未发现的业务漏洞更严重,因为性能漏洞影响的是整个 ...

  7. Java之字符流读写文件、文件的拷贝

    字符流读数据 – 按单个字符读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数据: int d ...

  8. Mysql INSTR函数

    在Mysql中,可以使用INSTR(str,substr)函数,用于在一个字符串(str)中搜索指定的字符(substr),返回找到指定的字符的第一个位置(index),index是从1开始计算,如果 ...

  9. python import cv2异常(dll load fail / windows server 2008)

    最近服务器迁移,从得win7系统迁移到云服务器器上的windows server2008系统,迁移过程中安装Python的opencv一直出错,不管是用whl安装或者是在线pip安装都报错,尝试打包成 ...

  10. Nginx+Tomcat Https SSL部署方案

    1.软件版本: nginx-1.15+ tomcat-8.0+ 2.先解决一个疑问:Tomcat到底需不需要配置SSL? 答案:不需要 3.SSL申请 使用腾讯云.阿里云的服务器,会更加方便申请.(申 ...