Apache ServiceMix是一个开源的ESB(企业服务总线)项目。请注意:我是通过机器学习生成的,可能有误

ServiceMix 的笔记

    • Apache ServiceMix について調べたことをまとめます

 

    • インストール、クイックスタート、サンプルプログラムの実行を試してみます

 

    内容は間違っている可能性があります

关于ServiceMix

    • http://servicemix.apache.org/

 

    オープンソースの ESB ソフトウェア

构成ServiceMix的组件

Apache ActiveMQ is an open-source message broker that serves as an intermediary for sending and receiving messages between systems.

    • http://activemq.apache.org/

 

    Java Message Service (JMS) のブローカー

Apache Camel (阿帕奇骆驼)

    • http://camel.apache.org/

 

    ルールに基づいてルーティングや調停をするソフトウェア

Apache CXF is a framework for building and developing web services in Chinese.

    • https://cxf.apache.org/

 

    • ウェブサービスのフレームワーク

 

    JAX-WS, JAX-RS のアプリケーションをホストする

Apache Karaf 阿帕奇卡拉夫

    • http://karaf.apache.org/

 

    • 主に OSGi のコンテナ

 

    ホットデプロイの仕組みなどを提供する

Apache Zookeeper:阿帕奇动物园管理员

    • https://zookeeper.apache.org/

 

    • 構成情報の分散リポジトリ

 

    • KVM の一種

 

    etcd みたいなもの

相关主题

可扩展服务网关接口 (OSGi)

    • https://www.osgi.org/

 

    ソフトウェアをバンドルする仕組み

春季框架

    https://projects.spring.io/spring-framework/

蓝图

    http://aries.apache.org/modules/blueprint.html

Maven 的安装

    ServiceMix のサンプルコードの実行に Maven が必要になるので、ここでインストールします

下载

    https://maven.apache.org/download.cgi

安装

% mkdir ~/sfw/Maven
% mv apache-maven-3.3.9-bin.tar.gz ~/sfw/Maven
% cd ~/sfw/Maven
% tar zxf apache-maven-3.3.9-bin.tar.gz

设置环境变量

$ vi ~/.bashrc
export PATH=${HOME}/sfw/Maven/apache-maven-3.3.9/bin:${PATH}
$ . ~/.bashrc

确认行动

$ mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T01:41:47+09:00)
...

代理服务器设置(可选)

    インターネット接続にプロキシーを経由する場合はプロキシーサーバの設定をします
$ vi ~/.m2/settings.xml 
<settings>
  <proxies>
    <proxy>
      <host>proxy.example.com</host>
      <port>80</port>
    </proxy>
  </proxies>
</settings>

安装ServiceMix

创建用户

# usearadd smix
# passwd smix
Password: smix

确认 Java 虚拟机

$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
    インストールされていなかったらインストールします

设置环境变量

$ vi ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java
$ . ~/.bashrc

下载 ServiceMix

    http://servicemix.apache.org/downloads.html

安装ServiceMix

$ mkdir -p ~/sfw//ServiceMix
$ cp apache-servicemix-6.1.0.zip ~/sfw/ServiceMix
$ cd ~/sfw/ServiceMix
$ unzip -q apache-servicemix-6.1.0.zip
$ cd apache-servicemix-6.1.0

在中国,ServiceMix的启动确认。

$ cd ~/sfw/ServiceMix/apache-servicemix-6.1.0
$ ./bin/servicemix
Please wait while Apache ServiceMix is starting...
100% [========================================================================]

Karaf started in 5s. Bundle stats: 236 active, 236 total
 ____                  _          __  __ _      
/ ___|  ___ _ ____   _(_) ___ ___|  \/  (_)_  __
\___ \ / _ \ '__\ \ / / |/ __/ _ \ |\/| | \ \/ /
 ___) |  __/ |   \ V /| | (_|  __/ |  | | |>  < 
|____/ \___|_|    \_/ |_|\___\___|_|  |_|_/_/\_\

  Apache ServiceMix (6.1.0)

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or 'osgi:shutdown' to shutdown ServiceMix.

karaf@root>

尝试使用Apache ServiceMix的快速入门

    • 以下は Apache ServiceMix の最新版のクイックスタートを試した記録です

 

    • クイックスタートのドキュメントは以下にあります

http://servicemix.apache.org/docs/6.x/quickstart/index.html

游戏机

    ServiceMix の管理コンソールの使い方を確認します

控制台帮助

    • help や help

でヘルプを参照できます
help

karaf@root>help bundle
COMMANDS
bundle:capabilities   Displays OSGi capabilities of a given bundles.     
bundle:classes        Displays a list of classes/resources contained in  
bundle:diag           Displays diagnostic information why a bundle is no 
bundle:dynamic-import Enables/disables dynamic-import for a given bundle.
bundle:find-class     Locates a specified class in any deployed bundle   
bundle:headers        Displays OSGi headers of a given bundles.          
...
    • help

 

karaf@root>help bundle:list
DESCRIPTION
        bundle:list

    Lists all installed bundles.

SYNTAX
        bundle:list [options]

OPTIONS
        -t
                Specifies the bundle threshold; bundles with a start-level less 
                than this value will not get printed out.
        --help
                Display this help message
...

各种确认指令 (Gè

karaf@root>help | grep list
bundle:classes                    Displays a list of classes/resources c 
bundle:list                       Lists all installed bundles.           
camel:component-list              Lists all Camel components that are in 
camel:context-list                Lists all Camel contexts.              
camel:endpoint-list               Lists Camel endpoints                  
camel:rest-registry-list          Lists all Camel REST services enlisted 
camel:route-list                  List Camel routes.                     
config:list                       Lists existing configurations.         
config:property-list              Lists properties from the currently ed 
feature:list                      Lists all existing features available  
feature:repo-list                 Displays a list of all defined reposit 
feature:version-list              Lists all versions of a feature availa 
http:list                         Lists details for servlets.            
instance:list                     Lists all existing container instances.
jaas:group-list                   List groups in a realm                 
jaas:pending-list                 List the pending modification on the a 
jaas:realm-list                   List JAAS realms                       
jaas:user-list                    List the users of the selected JAAS re 
kar:create                        Create a kar file for a list of featur 
kar:list                          List the installed KAR files.          
obr:deploy                        Deploys a list of bundles using OBR se 
obr:list                          Lists OBR bundles, optionally providin 
obr:start                         Deploys and starts a list of bundles u 
obr:url-add                       Adds a list of repository URLs to the  
obr:url-list                      Displays the repository URLs currently 
obr:url-remove                    Removes a list of repository URLs from 
service:list                      Lists OSGi services.                   
shell:each                        Execute a closure on a list of argumen 
web:list                          Lists details for war bundles.         
karaf@root>help | grep display
log:display                       Displays log entries.                  
log:exception-display             Displays the last occurred exception f 
log:tail                          Continuously display log entries. Use  

确认捆绑组合

    bundle:list
karaf@root>bundle:list | head
START LEVEL 100 , List Threshold: 50
 ID | State  | Lvl | Version                            | Name                                           
---------------------------------------------------------------------------------------------------------
 97 | Active |  50 | 1.1.1                              | geronimo-annotation_1.0_spec                   
 98 | Active |  50 | 1.1.1                              | geronimo-jms_1.1_spec                          
 99 | Active |  50 | 1.0.1                              | geronimo-j2ee-management_1.1_spec              
100 | Active |  50 | 0.6.4                              | JAXB2 Basics - Runtime                         
101 | Active |  50 | 2.2.11.1                           | Apache ServiceMix :: Bundles :: jaxb-impl      
102 | Active |  50 | 2.4.2                              | Apache Commons Pool                            
103 | Active |  50 | 3.3.0                              | Commons Net

可以使用管道和grep命令(结果会以不同的颜色显示)

karaf@root>bundle:list | grep camel
136 | Active |  50 | 2.16.1                             | camel-core
137 | Active |  50 | 2.16.1                             | camel-catalog
139 | Active |  50 | 2.16.1                             | camel-jms
140 | Active |  50 | 2.16.1                             | camel-spring
141 | Active |  50 | 2.16.1                             | camel-blueprint
142 | Active |  50 | 5.12.1                             | activemq-camel

查看日志

karaf@root>log:display
2016-01-25 17:20:27,731 | INFO  | FelixStartLevel  | NamespaceHandlerRegisterer       | 173 - org.apache.cxf.cxf-core - 3.1.4 | Registered blueprint namespace handler for http://cxf.apache.org/blueprint/core
2016-01-25 17:20:27,732 | INFO  | FelixStartLevel  | NamespaceHandlerRegisterer       | 173 - org.apache.cxf.cxf-core - 3.1.4 | Registered blueprint namespace handler for http://cxf.apache.org/configuration/beans
2016-01-25 17:20:27,733 | INFO  | FelixStartLevel  | NamespaceHandlerRegisterer       | 173 - org.apache.cxf.cxf-core - 3.1.4 | Registered blueprint namespace handler for http://cxf.apache.org/configuration/parameterized-types
2016-01-25 17:20:27,734 | INFO  | FelixStartLevel  | NamespaceHandlerRegisterer       | 173 - org.apache.cxf.cxf-core - 3.1.4 | Registered blueprint namespace handler for http://cxf.apache.org/configuration/security
2016-01-25 17:20:27,735 | INFO  | FelixStartLevel  | NamespaceHandlerRegisterer       | 173 - org.apache.cxf.cxf-core - 3.1.4 | Registered blueprint namespace handler for http://schemas.xmlsoap.org/wsdl/

只显示异常

karaf@root>log:exception-display

更改日志输出级别

karaf@root>log:get
Logger | Level
--------------
ROOT   | INFO 
karaf@root>log:set DEBUG
karaf@root>log:display | grep DEBUG | head
2016-01-25 17:58:00,671 | DEBUG | pe-[log:display] | configadmin                      | 6 - org.apache.felix.configadmin - 1.8.4 | getProperties()
2016-01-25 17:58:00,671 | DEBUG | pe-[log:display] | configadmin                      | 6 - org.apache.felix.configadmin - 1.8.4 | getProperties()
2016-01-25 17:58:00,671 | DEBUG | pipe-[head, +5]  | configadmin                      | 6 - org.apache.felix.configadmin - 1.8.4 | getProperties()
2016-01-25 17:58:00,672 | DEBUG | pe-[grep, DEBUG] | configadmin                      | 6 - org.apache.felix.configadmin - 1.8.4 | getProperties()
2016-01-25 17:58:00,672 | DEBUG | pe-[log:display] | configadmin                      | 6 - org.apache.felix.configadmin - 1.8.4 | getProperties()
...

将日志级别恢复到原始状态

karaf@root>log:get
Logger | Level
--------------
ROOT   | DEBUG
karaf@root>log:set INFO
karaf@root>log:get
Logger | Level
--------------
ROOT   | INFO 

骆驼

    • Apache Camel はルールに基づいてルーティングや調停をするコンポーネントです

 

    このチュートリアルでは Blueprint XML ファイルを使ってルーティングを定義します

准备蓝图 XML 文件

    • この例では camel/input ディレクトリに配置されたファイルを camel/output ディレクトリに自動的に移動するというルーティングルールを設定します

 

    • ファイル名は quickstart1.xml とし、deploy ディレクトリの下に配置します

 

    ルートディレクトリは ServiceMix をインストールしたディレクトリです
<?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="file:camel/input"/>
        <log message="Moving ${file:name} to the output directory"/>
        <to uri="file:camel/output"/>
      </route>
    </camelContext>

</blueprint>
    • route タグの中がルーティングルールです

 

    • from uri= で指定されている file:camel/input が移動元のディレクトリ

 

    • to uri= で指定されている file:camel/output が移動先のディレクトリ

 

    log message= でログを出力します

检查蓝图XML文件的加载

    deploy/quickstart1.xml ファイルは自動で読み込まれます
karaf@root>log:display
...
2016-01-26 14:07:23,584 | INFO  | mix-6.1.0/deploy | fileinstall                      | 7 - org.apache.felix.fileinstall - 3.5.0 | Installing bundle quickstart1.xml / 0.0.0
2016-01-26 14:07:24,345 | WARN  | mix-6.1.0/deploy | DefaultTypeConverter             | 136 - org.apache.camel.camel-core - 2.16.1 | Overriding type converter from: StaticMethodTypeConverter: public static org.apache.activemq.command.ActiveMQDestination org.apache.activemq.camel.converter.ActiveMQConverter.toDestination(java.lang.String) to: StaticMethodTypeConverter: public static org.apache.activemq.command.ActiveMQDestination org.apache.activemq.camel.converter.ActiveMQConverter.toDestination(java.lang.String)
2016-01-26 14:07:24,345 | WARN  | mix-6.1.0/deploy | DefaultTypeConverter             | 136 - org.apache.camel.camel-core - 2.16.1 | Overriding type converter from: InstanceMethodTypeConverter: public org.apache.camel.Processor org.apache.activemq.camel.converter.ActiveMQMessageConverter.toProcessor(javax.jms.MessageListener) to: InstanceMethodTypeConverter: public org.apache.camel.Processor org.apache.activemq.camel.converter.ActiveMQMessageConverter.toProcessor(javax.jms.MessageListener)
2016-01-26 14:07:24,345 | WARN  | mix-6.1.0/deploy | DefaultTypeConverter             | 136 - org.apache.camel.camel-core - 2.16.1 | Overriding type converter from: InstanceMethodTypeConverter: public org.apache.activemq.command.ActiveMQMessage org.apache.activemq.camel.converter.ActiveMQMessageConverter.toMessage(org.apache.camel.Exchange) throws javax.jms.JMSException to: InstanceMethodTypeConverter: public org.apache.activemq.command.ActiveMQMessage org.apache.activemq.camel.converter.ActiveMQMessageConverter.toMessage(org.apache.camel.Exchange) throws javax.jms.JMSException
2016-01-26 14:07:24,376 | INFO  | mix-6.1.0/deploy | BlueprintCamelContext            | 136 - org.apache.camel.camel-core - 2.16.1 | Apache Camel 2.16.1 (CamelContext: camel-1) is starting
2016-01-26 14:07:24,377 | INFO  | mix-6.1.0/deploy | ManagedManagementStrategy        | 136 - org.apache.camel.camel-core - 2.16.1 | JMX is enabled
2016-01-26 14:07:24,455 | INFO  | mix-6.1.0/deploy | DefaultRuntimeEndpointRegistry   | 136 - org.apache.camel.camel-core - 2.16.1 | Runtime endpoint registry is in extended mode gathering usage statistics of all incoming and outgoing endpoints (cache limit: 1000)
2016-01-26 14:07:24,520 | INFO  | mix-6.1.0/deploy | BlueprintCamelContext            | 136 - org.apache.camel.camel-core - 2.16.1 | AllowUseOriginalMessage is enabled. If access to the original message is not needed, then its recommended to turn this option off as it may improve performance.
2016-01-26 14:07:24,520 | INFO  | mix-6.1.0/deploy | BlueprintCamelContext            | 136 - org.apache.camel.camel-core - 2.16.1 | StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
2016-01-26 14:07:24,566 | INFO  | mix-6.1.0/deploy | BlueprintCamelContext            | 136 - org.apache.camel.camel-core - 2.16.1 | Route: route1 started and consuming from: Endpoint[file://camel/input]
2016-01-26 14:07:24,567 | INFO  | mix-6.1.0/deploy | BlueprintCamelContext            | 136 - org.apache.camel.camel-core - 2.16.1 | Total 1 routes, of which 1 is started.
2016-01-26 14:07:24,570 | INFO  | mix-6.1.0/deploy | BlueprintCamelContext            | 136 - org.apache.camel.camel-core - 2.16.1 | Apache Camel 2.16.1 (CamelContext: camel-1) started in 0.192 seconds
2016-01-26 14:07:24,580 | INFO  | mix-6.1.0/deploy | fileinstall                      | 7 - org.apache.felix.fileinstall - 3.5.0 | Started bundle: blueprint:file:/root/ServiceMix/apache-servicemix-6.1.0/deploy/quickstart1.xml

确认目录已创建

    自動で camel/input ディレクトリが作成されます
# ls camel
input

确认文件的移动

    camel/input 以下にファイルを配置すると、自動的に camel/output 以下に移動(ルーティング)されます
# touch camel/input/testfile.xml
# ls camel/input/testfile.xml
ls: cannot access camel/input/testfile.xml: No such file or directory
# ls camel/output/
testfile.xml
    ファイルの移動はログにも出力されます
karaf@root>log:display | tail
...
2016-01-26 14:20:36,967 | INFO  | le://camel/input | route1                           | 136 - org.apache.camel.camel-core - 2.16.1 | Moving testfile.xml to the output directory

确认一下是否已经注册在包装中。

    deploy/quickstart1.xml に配置した Blueprint XML がバンドルとして登録されていることを確認します
karaf@root>bundle:list | grep quickstart1.xml
237 | Active |  80 | 0.0.0                              | quickstart1.xml                                

停止捆绑

    bundle:stop でバンドルを停止できます
karaf@root>bundle:stop 237
    ステータスが Resolved に変更されました
karaf@root>bundle:list | grep quickstart1.xml
237 | Resolved |  80 | 0.0.0                              | quickstart1.xml                                
    ファイルも移動されなくなります
# touch camel/input/testfile2.xml
# ls camel/input/testfile2.xml
camel/input/testfile2.xml
    停止したバンドルは bundle:start で再開できます
karaf@root>bundle:start 237
    ステータスが再び Active になりました
karaf@root>bundle:list | grep quickstart1.xml
237 | Active |  80 | 0.0.0                              | quickstart1.xml                                

ActiveMQ 主动消息队列

    • ActiveMQ は Java Message Service (JMS) のブローカーです

 

    以下の例では、ファイル移動のイベントを ActiveMQ に通知し、ログに出力します

准备蓝图XML文件。

    • ファイルの移動を ActiveMQ に通知する Blueprint XML ファイルを準備します

 

    deploy/quickstart2.xml ファイルを以下のように記述します
<?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="file:activemq/input"/>
        <to uri="file:activemq/output"/>

        <setBody>
          <simple>
            FileMovedEvent(file: ${file:name}, timestamp: ${date:now:hh:MM:ss.SSS})
          </simple>
        </setBody>
        <to uri="activemq://events" />
      </route>
    </camelContext>
</blueprint>
    • activemq/input に来たファイルを activemq/output に移動します

 

    ファイル名とタイムスタンプを含んだメッセージを ActiveMQ のキューに追加します

确认捆绑

    bundle:list でバンドルとして登録されたことを確認します
karaf@root>bundle:list | tail
...
238 | Active |  80 | 0.0.0                              | quickstart2.xml                                

确认文件移动

# ls activemq/input/
# touch activemq/input/testfile.txt
# ls activemq/input/
# ls activemq/output
testfile.txt

准备提取ActiveMQ队列内容的Blueprint XML文件。

    • ActiveMQ のキューに入っているメッセージをログに出力する Blueprint XML ファイルを作成します

 

    deploy/quickstart3.xml を以下のように記述します
<?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="activemq://events"/>
        <to uri="log:events"/>
      </route>
    </camelContext>
</blueprint>

查看日志

    log:display コマンドでログに出力されていることを確認します
karaf@root>log:display | tail
...
2016-01-26 16:17:48,800 | INFO  | Consumer[events] | events                           | 136 - org.apache.camel.camel-core - 2.16.1 | Exchange[ExchangePattern: InOnly, BodyType: String, Body: FileMovedEvent(file: testfile.txt, timestamp: 04:01:22.038)]

功能的管理

确认功能

    feature:list で機能一覧を表示できます
karaf@root>feature:list | grep webconsole
webconsole                              | 3.0.5            |           | standard-3.0.5              | Base support of the Karaf WebConsole              
    feature:info で詳細情報を確認できます
karaf@root>feature:info webconsole
Feature webconsole 3.0.5
Description:
  Base support of the Karaf WebConsole
Feature configuration:
  org.apache.karaf.webconsole
Feature has no configuration files
Feature depends on:
  http 0.0.0
Feature contains followed bundles:
  mvn:org.apache.felix/org.apache.felix.metatype/1.0.12 start-level=30
  mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.branding/3.0.5 start-level=30
  mvn:org.apache.karaf.webconsole/org.apache.karaf.webconsole.console/3.0.5 start-level=30
Feature contains followed conditionals:
Conditional(eventadmin/0.0.0) has no configuration
Conditional(eventadmin/0.0.0) has no configuration files
Conditional(eventadmin/0.0.0) has no dependencies.
Conditional(eventadmin/0.0.0) contains followed bundles:
  mvn:org.apache.felix/org.apache.felix.webconsole.plugins.event/1.1.2 start-level=30
Conditional(scr/0.0.0) has no configuration
Conditional(scr/0.0.0) has no configuration files
Conditional(scr/0.0.0) has no dependencies.
Conditional(scr/0.0.0) contains followed bundles:
  mvn:org.apache.felix/org.apache.felix.webconsole.plugins.ds/1.0.0 start-level=30

增加功能

    feature:install で機能を追加できます
karaf@root>feature:install webconsole
karaf@root>feature:list | grep webconsole
webconsole                              | 3.0.5            | x         | standard-3.0.5              | Base support of the Karaf WebConsole
    • webconsole を追加するには Maven のリポジトリにアクセスできる必要があります

 

    • webconsole をインストールすると http://localhost:8181/system/console から smx/smx でログインして操作できるようになります

 

    機能の削除は feature:uninstall です
karaf@root>feature:uninstall webconsole
karaf@root>feature:list | grep webconsole
webconsole                              | 3.0.5            |           | standard-3.0.5              | Base support of the Karaf WebConsole

尝试执行示例代码

一份预设的示例代码清单

karaf@root>feature:list | grep example
examples-activemq-camel-blueprint       | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-osgi                       | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-jaxrs                      | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-jaxrs-blueprint            | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-jaxws-blueprint            | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-sql-derby                | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-sql-pgsql                | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-sql-h2                   | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-osgi                     | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-blueprint                | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-drools                   | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-drools-blueprint         | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-cxf-rest                 | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-camel-cxf-soap                 | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-ws-addressing              | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-ws-security-osgi           | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-ws-security-blueprint      | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-ws-security-signature      | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-ws-rm                      | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-wsn-receive                | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-cxf-wsn-notifier               | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-activiti-camel                 | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-akka-camel                     | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-drools-simple                  | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-drools-camel-blueprint         | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-drools-spring                  | 6.1.0            |           | servicemix-examples-6.1.0   |                                                   
examples-drools-camel-cxf-server        | 6.1.0            |           | servicemix-examples-6.1.0   |

尝试使用CXF JAX-RS

查看详细信息

karaf@root>feature:info examples-cxf-jaxrs
Feature examples-cxf-jaxrs 6.1.0
Feature has no configuration
Feature has no configuration files
Feature depends on:
  cxf 3.1.4
Feature contains followed bundles:
  mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.spring-beans/3.2.14.RELEASE_1
  mvn:commons-codec/commons-codec/1.10
  mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-httpclient/3.1_7
  mvn:org.apache.servicemix.examples/cxf-jaxrs/6.1.0
Feature has no conditionals.

码头

    アプリケーションサーバは Jetty が組み込まれているようです
karaf@root>feature:list | grep -i jetty
cxf-http-jetty                          | 3.1.4            | x         | cxf-3.1.4                   |                                                   
jetty                                   | 8.1.15.v20140411 | x         | standard-3.0.5              |                                                   
pax-jetty                               | 8.1.17.v20150415 | x         | org.ops4j.pax.web-3.2.6     | Provide Jetty engine support                      
camel-jetty                             | 2.16.1           |           | camel-2.16.1                |                                                   
camel-jetty9                            | 2.16.1           |           | camel-2.16.1                |                                                   

安装示例代码

karaf@root>feature:install examples-cxf-jaxrs
karaf@root>feature:list | grep examples-cxf-jaxrs
examples-cxf-jaxrs                      | 6.1.0            | x         | servicemix-examples-6.1.0   |
karaf@root>bundle:list | grep Examples
238 | Active |  80 | 6.1.0                              | Apache ServiceMix :: Examples :: CXF JAX-RS OSGI  

请查看WADL

$ curl 'http://localhost:8181/cxf/crm/customerservice?_wadl&_type=xml'
<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:xs="http://www.w3.org/2001/XMLSchema"><grammars><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="unqualified">
<xs:element name="Customer" type="customer"/>
<xs:element name="Order" type="order"/>
<xs:complexType name="order">
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element name="id" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="customer">
<xs:sequence>
<xs:element name="id" type="xs:long"/>
<xs:element minOccurs="0" name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</grammars><resources base="http://localhost:8181/cxf/crm"><resource path="/customerservice/"><resource path="customers/"><method name="POST"><request><representation mediaType="*/*"/></request><response><representation mediaType="*/*"/></response></method><method name="PUT"><request><representation mediaType="*/*"/></request><response><representation mediaType="*/*"/></response></method></resource><resource path="customers/{id}/"><param name="id" style="template" type="xs:string"/><method name="DELETE"><request></request><response><representation mediaType="*/*"/></response></method><method name="GET"><request></request><response><representation mediaType="application/xml"/></response></method></resource><!-- Dynamic subresource --><resource path="/orders/{orderId}/"><param name="orderId" style="template" type="xs:string"/></resource></resource></resources></application>

访问服务

$ curl 'http://localhost:8181/cxf'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD><LINK type="text/css" rel="stylesheet" href="/cxf/?stylesheet=1"><meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>CXF - Service list</title></head><body><span class="heading">Available SOAP services:</span><br/><table cellpadding="1" cellspacing="1" border="1" width="100%"></table><br/><br/><span class="heading">Available RESTful services:</span><br/><table cellpadding="1" cellspacing="1" border="1" width="100%"><tr><td><span class="field">Endpoint address:</span> <span class="value">http://localhost:8181/cxf/crm</span><br/><span class="field">WADL :</span> <a href="http://localhost:8181/cxf/crm?_wadl">http://localhost:8181/cxf/crm?_wadl</a></td></tr></table></body></html>

从Java客户端程序访问

    コンパイル
$ cd ~/sfw/ServiceMix/apache-servicemix-6.1.0/examples/cxf/cxf-jaxrs
$ mvn compile
    実行
$ mvn exec:java
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Apache ServiceMix :: Examples :: CXF JAX-RS OSGI 6.1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- exec-maven-plugin:1.3.2:java (default-cli) @ cxf-jaxrs ---
[WARNING] Warning: killAfter is now deprecated. Do you need it ? Please comment on MEXEC-6.
Sent HTTP GET request to query customer info
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><id>123</id><name>Mary</name></Customer>


Sent HTTP GET request to query sub resource product info
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Product><description>product 323</description><id>323</id></Product>


Sent HTTP PUT request to update customer info
Response status code: 200
Response body: 



Sent HTTP POST request to add customer
Response status code: 200
Response body: 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><id>126</id><name>Jack</name></Customer>

使用Curl进行访问

添加客户

$ cat src/main/resources/org/apache/servicemix/examples/cxf/jaxrs/client/add_customer.xml
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<Customer>
  <name>Jack</name>
</Customer> 
$ curl -X POST -T src/main/resources/org/apache/servicemix/examples/cxf/jaxrs/client/add_customer.xml -H "Content-Type: text/xml" http://localhost:8181/cxf/crm/customerservice/customers
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><id>127</id><name>Jack</name></Customer>
$ curl http://localhost:8181/cxf/crm/customerservice/customers/127<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><id>127</id><name>Jack</name></Customer>

对客户的修改

$ curl http://localhost:8181/cxf/crm/customerservice/customers/123<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><id>123</id><name>Mary</name></Customer>
$ cat 'src/main/resources/org/apache/servicemix/examples/cxf/jaxrs/client/update_customer.xml'
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->
<Customer>
  <name>Mary</name>
  <id>123</id>
</Customer> 
$ curl -X PUT -T src/main/resources/org/apache/servicemix/examples/cxf/jaxrs/client/update_customer.xml -H "Content-Type: text/xml" http://localhost:8181/cxf/crm/customerservice/customers 
$ curl http://localhost:8181/cxf/crm/customerservice/customers/123
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><id>123</id><name>Mary</name></Customer>

删除客户

$ curl -X DELETE http://localhost:8181/cxf/crm/customerservice/customers/127
$ curl http://localhost:8181/cxf/crm/customerservice/customers/127

更改访问通行证

在配置文件中进行更改

$ vi etc/org.apache.cxf.osgi.cfg
org.apache.cxf.servlet.context=/custom

确认

$ curl http://localhost:8181/cxf/crm/customerservice/customers/123
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 404 Not Found</title>
</head>
<body>
<h2>HTTP ERROR: 404</h2>
<p>Problem accessing /cxf/crm/customerservice/customers/123. Reason:
<pre>    Not Found</pre></p>
<hr /><i><small>Powered by Jetty://</small></i>
....
</body>
</html>
$ curl http://localhost:8181/custom/crm/customerservice/customers/123
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><id>123</id><name>John</name></Customer>

从控制台进行更改

karaf@root>config:edit org.apache.cxf.osgi
karaf@root>config:property-set org.apache.cxf.servlet.context /super
karaf@root>config:update

确认 (què

$ curl http://localhost:8181/custom/crm/customerservice/customers/123
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 404 Not Found</title>
</head>
<body>
<h2>HTTP ERROR: 404</h2>
<p>Problem accessing /custom/crm/customerservice/customers/123. Reason:
<pre>    Not Found</pre></p>
<hr /><i><small>Powered by Jetty://</small></i>
...
</body>
</html>
$ curl http://localhost:8181/super/crm/customerservice/customers/123
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Customer><id>123</id><name>John</name></Customer>

停止示例程序

karaf@root>bundle:list | grep CXF
238 | Active |  80 | 6.1.0                              | Apache ServiceMix :: Examples :: CXF JAX-RS OSGI  
karaf@root>bundle:stop 238
karaf@root>bundle:list | grep CXF
238 | Resolved |  80 | 6.1.0                              | Apache ServiceMix :: Examples :: CXF JAX-RS OSGI

卸载示例程序

卸载

karaf@root>feature:uninstall examples-cxf-jaxrs

确认

karaf@root>bundle:list | grep CXF
karaf@root>feature:list | grep examples-cxf-jaxrs
examples-cxf-jaxrs                      | 6.1.0            |           | servicemix-examples-6.1.0   |
广告
将在 10 秒后关闭
bannerAds