webService_cxf_消息中间件_5.16

前言:自上周五开始,因为公司刚好来人培训,因为我还在出差,熬了一个周末早9-晚9两天搞完了三天的课程,觉得还不错。。但是很多东西还是要自己摸索的。到今天来一个小结吧。

一.概述

1.webService 说白了,就是为企业执行SOA的一个工具而已。

2.消息中间件,作为SOA架构的一条esb,即企业服务总线。

二.实现

简介:这套东西要用到2个webservice(Webservice_Server&webService_Client),一个作为
hwHosting的webservice,一个作为jsClient的。在中间件上的webservice是通过webService_Server来重新部署一个新的地址,也就是说,我在调用java上的webService上时,数据会传到中间件上去。然后到中间件上的时候按照xslt---》javascript的方向来实现。

1.(webService_Server_for_hwHosting),主要是作为hwHosting的webservice,向中间件提供的部分。

?





1

2

3

4

5

6

7

@WebService

public
interface HelloWorld {

    @WebMethod

    public
String sayHello(@WebParam(name="name")String name);

}

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

public
class HelloWorldImpl implements
HelloWorld {

    public
String sayHello(String name) {

        

        return
"somethind";

    }

    public
static void
main(String[] args) {

          HelloWorldImpl implementor = new
HelloWorldImpl();

          JaxWsServerFactoryBean svrFactory = new
JaxWsServerFactoryBean();

          svrFactory.setServiceClass(HelloWorld.class);

          svrFactory.setAddress("http://127.0.0.1:9898/helloWorld");

          svrFactory.setServiceBean(implementor);

          svrFactory.getInInterceptors().add(new
LoggingInInterceptor());

          svrFactory.getOutInterceptors().add(new
LoggingOutInterceptor());

          svrFactory.create();

       }

}

2.webService_Server_for_hwHosting,主要用来调用,测试服务

?





1

2

3

4

5

6

7

8

9

10

11

12

13

public
class HelloClient {

    public
static void
main(String[] args) {  

           JaxWsProxyFactoryBean factory = new
JaxWsProxyFactoryBean();

           //factory.getInInterceptors().add(new LoggingInInterceptor());

           factory.getOutInterceptors().add(new
LoggingOutInterceptor());

           factory.setServiceClass(HelloWorld.class);

           factory.setAddress("http://127.0.0.1:1506/services/HelloWorldService.HelloWorldServiceHttpSoap11Endpoint");//这个地址是通过中间件的webService的wsdl文件中的endPoint中找到的

           HelloWorld client = (HelloWorld) factory.create();

           <span style="color: rgb(255, 0, 0);">String reply = client.sayHello("2");</span>

           System.out.println("Server said: "
+ reply);

           System.exit(0);

        }

}

3.webService_Client_for_jsClient

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

@WebService

public
interface IMultiMethod {

    

    @WebMethod

    public
String testJs1(@WebParam(name="name")String name);

    

    @WebMethod

    public
String testJs2(@WebParam(name="name")String name);

    

    @WebMethod

    public
String testJs3(@WebParam(name="name")String name);

    

    @WebMethod

    public
String testJs4(@WebParam(name="name")String name);

}

 

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public
class MultiMethodImpl implements
IMultiMethod {

    public
String testJs1(String name) {

        return
"testJs1";

    }

    

    public
String testJs2(String name) {

        return
"testJs2";

    }

    

    public
String testJs3(String name) {

        return
"testJs3";

    }

    

    public
String testJs4(String name) {

        return
"testJs4";

    }

    

    public
static void
main(String[] args) {

        MultiMethodImpl implementor = new
MultiMethodImpl();

          JaxWsServerFactoryBean svrFactory = new
JaxWsServerFactoryBean();

          svrFactory.setServiceClass(IMultiMethod.class);

          svrFactory.setAddress("http://127.0.0.1:2000/iMultiMethod");

          svrFactory.setServiceBean(implementor);

          svrFactory.getInInterceptors().add(new
LoggingInInterceptor());

          svrFactory.getOutInterceptors().add(new
LoggingOutInterceptor());

          svrFactory.create();

       }

4.下面是一些测试数据。

  4.1传入的数据:一定要注意这里面有命名空间,再我处理的时候有很多的不便,所以我加入了一个xslt来去除    这个命名空间。

?





1

2

3

4

5

6

7

8

9

<ns2:sayHello xmlns:ns2="http://server.zxd.com/">//

<name>

2

</name>

</ns2:sayHello>

 4.2 xslt文件:一定要注意,在传过来的xml文件中有命名空间,所以我们的xslt文件也要有命名空间,如高亮区

?





1

2

3

4

5

6

7

8

9

10

11

12

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"

<span style="color: rgb(255, 0, 0);">xmlns:ns2="http://server.zxd.com/"</span>

xmlns:i="http://www.w3.org/2001/XMLSchemainstance">

<xsl:template match="/ns2:sayHello"><span style="color: rgb(255, 0, 0);">//match会选择在/ns:sayHello命名空间下的部分</span>

<sayHello>

<name>

<xsl:value-of select="name"
/>

</name>

</sayHello>

</xsl:template>

</xsl:stylesheet>

  4.3 结果:如图所示,已经将原有的ns2去掉了。

?





1

2

3

4

5

<sayHello>

<name>

2

</name>

</sayHello>

5.下面继续看javascript的写法,主要是看我通过jsHosting传过来的数字,来判断,去调用jsClient的哪个具体的
   方法

?





1

2

3

4

5

6

7

8

9

var
next = output.append(input[0]);

var
methodName=next.getField(‘/sayHello/name‘)

next.setProperty(‘methodName‘,methodName)

switch(methodName){

    case
"1":next.setProperty("rhapsody:consumerOperation",‘testJs1‘);break;

    case
"2":next.setProperty("rhapsody:consumerOperation",‘testJs2‘);break;

    case
"3":next.setProperty("rhapsody:consumerOperation",‘testJs3‘);break;

    case
"4":next.setProperty("rhapsody:consumerOperation",‘testJs4‘);break;

}

6.最终返回值:根据我传入的2,返回为testJs2,这样完成了所有的测试。

?





1

2

3

4

5

<ns2:testJs2Response>

<return>

testJs2

</return>

</ns2:testJs2Response>

三:总结

  Stop compliant,just code,just do something even if it maybe
easy a lot....

很多东西都是在不段的积累中,幸福是来自于追求的路上,而不是获得以后。  

webService_cxf_消息中间件_5.16

时间: 2024-10-29 19:11:27

webService_cxf_消息中间件_5.16的相关文章

Storm批处理事务API详解

看此博文前,建议先查看 Storm批处理事务原理详解 为什么要进行批处理(Batch)? 逐个处理单个tuple,增加很多开销,如写库.输出结果频率过高 事务处理单个tuple效率比较低,因此storm中引入batch处理 批处理是一次性处理一批(batch)tuple,而事务则确保该批次要么全部处理成功,如果有处理失败的则全部不计,Storm会对失败的批次重新发送,且确保每个batch被且仅被处理一次 Spout有三种: 分别为: 1. ITransactionalSpout<T>,同Bas

便是见到前方那

以可得量力而凌厉刀芒横扫http://weibo.com/2015.09.16/p/1001603887144312655250http://weibo.com/2015.09.16/p/1001603887144321088567http://weibo.com/2015.09.16/p/1001603887144325238274http://weibo.com/2015.09.16/p/1001603887144325282921http://weibo.com/2015.09.16/p/

对于这黑马之会

是想不出究竟还只是区区一角啊http://weibo.com/2015-09.16/p/1001603887574727917787http://weibo.com/2015-09.16/p/1001603887574727946828http://weibo.com/2015-09.16/p/1001603887574732112097http://weibo.com/2015-09.16/p/1001603887574732112103http://weibo.com/2015-09.16/

消息中间件metaq

消息中间件metaq安装并注册到zookper集群 项目地址 https://github.com/killme2008/Metamorphosis Memorphosis是一个消息中间件,它是linkedin开源MQ--kafka的Java版本,针对淘宝内部应用做了定制和优化.Metamorphosis的设计原则 消息都是持久的,保存在磁盘 吞吐量第一 消费状态保存在客户端 分布式,生产者.服务器和消费者都可分布 Metamorphosis的部署结构 [[email protected] to

消息中间件系列一:入门、JMS规范、ActiveMQ使用

一.入门 1. 消息中间件的定义 没有标准定义,一般认为,采用消息传送机制/消息队列 的中间件技术,进行数据交流,用在分布式系统的集成 2. 为什么要用消息中间件 解决分布式系统之间消息的传递.电商场景: 用户下单减库存,调用物流系统.随着业务量的增大,需要对系统进行拆分(服务化和业务拆分),拆分后的系统之间的交互一般用RPC(远程过程调用).如果系统扩充到有几十个接口,就需要用消息中间件来解决问题. 3. 消息中间件和RPC有什么区别 3.1 功能特点: 在架构上,RPC和Message的差异

消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!

前言 来了解RabbitMQ一个重要的概念:Exchange交换机 1. Exchange概念 Exchange:接收消息,并根据路由键转发消息所绑定的队列. 蓝色框:客户端发送消息至交换机,通过路由键路由至指定的队列. 黄色框:交换机和队列通过路由键有一个绑定的关系. 绿色框:消费端通过监听队列来接收消息. 2. 交换机属性 Name:交换机名称 Type:交换机类型--direct.topic.fanout.headers.sharding(此篇不讲) Durability:是否需要持久化,

消息中间件——RabbitMQ(一)Windows/Linux环境搭建(完整版)

原文:消息中间件--RabbitMQ(一)Windows/Linux环境搭建(完整版) 前言 最近在学习消息中间件--RabbitMQ,打算把这个学习过程记录下来.此章主要介绍环境搭建.此次主要是单机搭建(条件有限),包括在Windows.Linux环境下的搭建,以及RabbitMQ的监控平台搭建. 环境准备 在搭建RabbitMQ之前,请先确保如下环境已经搭建完毕 Java环境(我的JDK1.8) Maven环境(我的3.6.1目前最新版) Git环境 没有搭建的同学走传送门: JDK环境搭建

Sublime Text 常用的16 个 Sublime Text 快捷键

在我做了一次包含一些现场编码的演示后,一些观众问我是如何操作这么快.当然这里没有唯一的答案,答案是一堆简单的快捷键和大量的实践的组合.为了回应那些询问,我觉得有必要看看我每天想都不用想且使用的快捷键. 这里有一个15 16 个快捷键的精选列表(1个自定义快捷键),以gif动画展示,我每天使用.享受吧! (译者注:原文所列快捷键均为OS X环境,为了方便Windows和Linux环境童鞋的学习,译者将备注Windows和Linux下对应的快捷键) 选择 选择一个选中项的下一个匹配项 选择一个选中项

Ubuntu 16.04编译Android 7.1.2

折腾了很久,终于搞定了这个环境.记录一下. 准备工作: 1. 首先在Ubuntu官网上下载Ubuntu16.04的官方镜像.官网下载地址(这个找了很久,这里可以直接下载ISO镜像):https://launchpad.net/ubuntu/+cdmirrors 2. 建议直接安装到自己硬盘上(推荐双系统),不要在虚拟机上搞,除非你有足够大的SSD.我之前在虚拟机上试过,电脑的性能完全发挥不出来,后来搞了双系统,发现一切都是那么舒服. 3. Android源码下载方法:https://lug.us