`
killko
  • 浏览: 104686 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Group-logo
Servicemix&Fu...
浏览量:0
社区版块
存档分类
最新评论

使用Apache ServiceMix轻松发布Web Service

阅读更多
Apache ServiceMix集成了Camel、Camel-CXF,可以轻松地发布Web Service。

与传统的通过Servlet发布web Service的方式不同,我们可以通过Camel路由分别处理不同的web service调用。以下是一个简单的例子:

我们首先看看以下服务接口定义:
package com.ponder.ws;

public interface IService{
   public long add(long p1,long p2);
   public long sub(long p1,long p2);
}

接着看看blueprint:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:camel-cxf="http://camel.apache.org/schema/blueprint/cxf"
           xmlns:cxfcore="http://cxf.apache.org/blueprint/core"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd 
http://camel.apache.org/schema/blueprint/cxf http://camel.apache.org/schema/blueprint/cxf/camel-cxf.xsd
http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd"
>

  <bean id="addProcessor" class="com.ponder.ws.Impl.ServiceAdd"/>
 
  <bean id="subProcessor" class="com.ponder.ws.Impl.ServiceSub"/>

  <camel-cxf:cxfEndpoint id="IServiceWS"
                           address="http://0.0.0.0:8000/ws/IService"
                           serviceClass="com.ponder.ws.IService">
    <camel-cxf:properties>
      <entry key="dataFormat" value="POJO"/>
    </camel-cxf:properties>
  </camel-cxf:cxfEndpoint>

  <camelContext  id="ServiceCamelContext" xmlns="http://camel.apache.org/schema/blueprint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
    <route id="IServiceRoute">
            <from uri="IServiceWS" />
            <log message="Request:${in.header.operationName}"/>
            <choice>
                <when>
                    <simple>${in.header.operationName} == 'add'</simple>
                    <to uri="bean:addProcessor"/>
                </when>
                <when>
                    <simple>${in.header.operationName} == 'sub'</simple>
                    <to uri="bean:subProcessor"/>
                </when>
            </choice>
    </route>
  </camelContext>


再看看addProcessor的写法:
package com.ponder.ws.Impl;
... ...
public class ServiceAdd implements Processor {

  @Override
  public void process(Exchange exchange) throws Exception {
    MessageContentsList mclist = exchange.getIn().getBody(MessageContentsList.class);
    long p1=(long)mclist.get(0);
    long p2=(long)mclist.get(1);

    long result=p1+p2;

    exchange.getOut().setBody(result);
  }
}


subProcessor类似。

我们从blueprint里可以看到首先是两个bean的定义,不解释;

然后我们有一段:
<camel-cxf:cxfEndpoint id="IServiceWS"
                           address="http://0.0.0.0:8000/ws/IService"
                           serviceClass="com.ponder.ws.IService">
    <camel-cxf:properties>
      <entry key="dataFormat" value="POJO"/>
    </camel-cxf:properties>
  </camel-cxf:cxfEndpoint>


这里定义了一个Camel的endpoint,是Camel-CXF component的endpoint,component是camel的组件定义,你可以把它看成是endpoint Factory。这里实际上就是创建并配置了一个cxf endpoint,它负责接收客户端的请求,并将请求内容按Camel-CXF的规则填成一个Exchange,在后续的CamelContext里定义的路由就负责处理这个Exchange。

<route id="IServiceRoute">
            <from uri="IServiceWS" />
            <log message="Request:${in.header.operationName}"/>
            <choice>
                <when>
                    <simple>${in.header.operationName} == 'add'</simple>
                    <to uri="bean:addProcessor"/>
                </when>
                <when>
                    <simple>${in.header.operationName} == 'sub'</simple>
                    <to uri="bean:subProcessor"/>
                </when>
            </choice>
    </route>


以上这段路由就是根据Exchange里的in.header.operationName判断,如果operationName为“add”的话,就交由addProcessor处理。

再看看addProcessor(也就是ServiceAdd的实例)里的processor方法从Exchange里的in.body里得到一个Object,根据Camel-cxf的定义,这个Object是个MessageContentsList,从这里可以拿到相应的参数p1和p2的值,处理后,将结果放到out.body里,camel-cxf的endpoint就会将它作为结果返回给调用方。
分享到:
评论
3 楼 q862747954 2015-07-08  
killko 写道
q862747954 写道
[b] 楼主按照等你写了DEMO 结果运行发现提示这个问题
Bundle Blueprint_Demo01 is waiting for namespace handlers [http://camel.apache.org/schema/blueprint]
请问怎么解决这个问题?
[/b]



试试在servicemix上执行features:install camel-cxf

 
试过了不行啊~! 还是报这个问题
2 楼 killko 2015-07-06  
q862747954 写道
[b] 楼主按照等你写了DEMO 结果运行发现提示这个问题
Bundle Blueprint_Demo01 is waiting for namespace handlers [http://camel.apache.org/schema/blueprint]
请问怎么解决这个问题?
[/b]



试试在servicemix上执行features:install camel-cxf
1 楼 q862747954 2015-06-25  
[b] 楼主按照等你写了DEMO 结果运行发现提示这个问题
Bundle Blueprint_Demo01 is waiting for namespace handlers [http://camel.apache.org/schema/blueprint]
请问怎么解决这个问题?
[/b]

相关推荐

    servicemix代理web service

    【Servicemix代理Web Service】是企业级集成平台Apache Servicemix中的一个重要功能,它允许开发者通过Servicemix来代理和管理外部的Web服务。这种代理方式提供了多种优势,包括服务的路由、转换、监控以及安全性...

    使用Servicemix(ESB)发布一个外部的WebService

    在本文中,我们将深入探讨如何使用Servicemix来发布一个外部的Web Service。 1. **什么是企业服务总线(ESB)?** ESB是企业级集成的核心组件,它通过中间件的方式连接不同系统,促进服务间的通信。它具有解耦、路由...

    apache-servicemix-4.4-fuseesb

    4. **CXF和Spring框架**:Apache CXF用于构建和运行Web服务,而Spring框架则提供了依赖注入和管理服务的能力,两者在ServiceMix中都扮演着重要角色。 5. **BPEL和WS-BPEL**:ServiceMix支持Business Process ...

    apache-servicemix-4.4.0(1)

    Apache ServiceMix 基于 Java EE 平台,这意味着它可以运行各种 Java EE 应用,如Web应用、EJB、JMS消息等。这使得开发者可以利用已有的Java EE技术来构建和部署服务。 2. **Apache Camel 整合**: Apache Camel ...

    Servicemix(ESB)发布WebService.doc

    在本文档中,我们将深入探讨如何使用Servicemix发布Web服务,以促进不同应用之间的数据交换和协同工作。 1. **理解ESB和Web服务**: - **ESB的角色**:ESB是企业IT架构的核心组件,用于连接各种异构系统,如数据库...

    servicemix

    1. **消息传递**:ServiceMix基于Java Message Service(JMS)和Advanced Message Queuing Protocol(AMQP),提供可靠的消息传递机制,用于不同系统间的异步通信。 2. **服务代理**:允许用户通过Java API、SOAP或...

    ServiceMix学习笔记

    创建一个基于ServiceMix的Maven项目,可以使用Maven的archetype插件,如命令`mvn archetype:create -DarchetypeArtifactId=servicemix-service-unit -DarchetypeGroupId=org.apache.servicemix.tooling -...

    org.apache.servicemix.bundles.aws-java-sdk-1.4.1_1.zip

    标题 "org.apache.servicemix.bundles.aws-java-sdk-1.4.1_1.zip" 暗示了这是一个与Apache ServiceMix相关的软件包,它包含的是Amazon Web Services(AWS)的Java SDK的一个版本,具体为1.4.1。Apache ServiceMix是...

    servicemix 3安装及cxf-bc组件代理webservice服务

    在本文中,我们将深入探讨Apache Servicemix 3的安装过程以及如何使用CXF-Bundle Component来代理WebService服务。Apache Servicemix是企业级的服务导向架构(SOA)平台,基于OSGi容器,支持多种标准如JBI、Spring、...

    使用Web Services Explorer测试Webservice服务.docx

    Web服务主要通过SOAP(Simple Object Access Protocol)协议传输数据,使用WSDL(Web Services Description Language)来描述服务,以及UDDI(Universal Description, Discovery, and Integration)用于服务的发布和...

    serviceMix大合集

    ServiceMix是Apache软件基金会下的一个开源企业服务总线(Enterprise Service Bus, ESB)项目,它基于Java消息服务(JMS)、Java管理扩展(JMX)和Java API for RESTful Web Services(JAX-RS)等标准技术构建,提供...

    ServiceMix插件

    ServiceMix是一款开源的企业服务总线(Enterprise Service Bus,ESB),它基于Apache Karaf容器,提供了集成不同系统和服务的能力,支持多种消息传递协议,并且具备强大的路由、转换和管理功能。在开发和部署...

    基于JBI的ServiceMix服务总线.

    1. **创建WebService服务**:用户可以轻松地在ServiceMix环境中创建WebService服务,并利用这些服务实现与其他系统的交互。 2. **创建代理**:ServiceMix支持创建多种类型的代理,包括监听外部服务请求的绑定组件...

    How does ServiceMix compare to Tuscany or SCA

    ServiceMix基于Java执行环境(JVM),支持多种协议和标准,如Java Message Service (JMS)、Java Transaction API (JTA) 和Java API for RESTful Web Services (JAX-RS)。作为一个成熟的ESB,ServiceMix允许开发人员...

    ServiceMix框架研究(1)

    ServiceMix是基于Apache服务的开放源代码企业服务总线(ESB),它是一个灵活且可扩展的平台,用于集成各种应用程序和服务。这个框架的核心是基于Java Message Service (JMS)、Java Management Extensions (JMX) 和...

    ServiceMix框架研究(2)

    6. **RESTful API**:ServiceMix可以通过CXF等组件提供RESTful服务,使得Web应用能轻松地与服务总线进行交互。 7. **Maven集成**:ServiceMix使用Maven作为构建工具,使得依赖管理和项目构建更加便捷。 在...

    Apache ode介绍

    2. **与 ESB 的集成**:Apache ODE 更易于与 ESB (Enterprise Service Bus) 如 ServiceMix 和 Mule 集成,这在当前 SOA 架构中非常关键。 #### 五、Apache ODE 在 SOA 架构中的角色 在 SOA 架构中,Apache ODE ...

    apache-activemq-5.5-fuse-esb

    Fuse ESB则是Red Hat公司基于Apache ServiceMix、CXF和ActiveMQ等项目的集成平台,用于构建企业级服务总线(ESB)。在本案例中,“apache-activemq-5.5-fuse-esb”可能指的是Apache ActiveMQ的一个特定版本,整合到...

    Java SOA Cookbook源代码

    7. **Service Bus**:Java SOA Cookbook可能会介绍如何使用服务总线(如Apache CXF、Apache ServiceMix或Oracle Service Bus)作为中介,来路由、转换和管理服务交互。 8. **Integration Patterns**:书中可能讨论...

Global site tag (gtag.js) - Google Analytics