在ServiceMix中设置OSGI Blueprint文件的端点

时间:2015-01-22 16:42:53

标签: apache-camel blueprint-osgi apache-servicemix

我知道我可以使用Blueprint语法在独立的xml文件中定义Camel路由。如果我在" deploy"中移动此文件之一ServiceMix的文件夹,它自动成为OSGI包。我的问题是,我可以将端点设置为这个新的捆绑包,可以从外部访问吗?

我想做这样的事情:

blue_route1.xml

<blueprint>
  <camelContext>
    <route>
      <from uri="http:my_servicemix:8181/blue_route1_endpoint" />
      <to uri="jetty:http://server1" />
    </route>
  </camelContext>
</blueprint>

blue_route1在部署后成为OSGI包,但我应该在哪里定义&#34; blue_route1_endpoint&#34; ?它可行吗?

[UPDATE]

夏天,我希望外部WS能够向 blue_route1_endpoint 发送消息,其中 blue_route1 包将根据Camel路由重定向消息,而无需创建一个新的WS&#34; Blue_route1 &#34;在ServiceMix中部署

                                   ______________________
                                   |     ____________   |
external-->(blue_route1_endpoint)==|==-->|blue_route1|--|-->(http://server1)
  WS                               |     |___________|  |
                                   |____________________|
                                          ServiceMix

2 个答案:

答案 0 :(得分:0)

发现它!我没有那么容易。要使ServiceMix侦听端口,我只需使用Camel-jetty组件指定端点。 所以,为了回答我的问题,我以这种方式解决了:

在ServiceMix中安装camel-jetty组件

features:install camel-jetty 

使用Blueprint在blue_route1.xml文件中编写camel-route

<?xml version="1.0" encoding="UTF-8"?>
<blueprint
    xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    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">
    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
        <route>
            <from uri:="jetty:http:my_servicemix:8181/blue_route1_endpoint">
            <to uri="http://localhost:8080/user/services/user?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/>
        </route>
        <route>
            <from uri="jetty:http://0.0.0.0:6969/sp_role?matchOnUriPrefix=true"/>
            <setHeader headerName="Content-Type">
                <groovy>"text/xml; charset=utf-8"</groovy>
            </setHeader>
            <to uri="http://server1"/>
        </route>        
    </camelContext>
</blueprint>

我使用随机端口8181来监听...但我可以选择每个号码,ServiceMix会自动启​​动一个码头组件,在该端口/端点上监听和消费。

答案 1 :(得分:0)

对于SOAP消息,您需要{webervice的CXF Component和wsdl文件。您可以在camelContext之外配置端点,如下所示:

<cxf:cxfEndpoint id="yourId" address="/your/address/to/endpoint"
    serviceClass="your.java.ServiceClass"
    wsdlURL="path/to/your/wsdl/file.wsdl" />

在你的路线中使用这样的标签:

<from uri="cxf:bean:yourId"/>

您需要将命名空间和schemaLocation添加到您的蓝图以使用cxf命名空间,请使用:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf"
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://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">