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
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 |