22value="C:
/jbossesb-server-4.7/httpsgateway.keystore"/>
23
24
25
26
27
关于jbr-provider的配置如上所示,下面对各个属性做简要说明:
jbr-KeyStoreURL:
密钥库文件的路径,下面会说明如何创建密钥库文件
jbr-KeyStorePassword:
密钥库文件的密码,在创建密钥库文件时指定
jbr-TrustStoreURL:
受信任的密钥库文件路径,可与jbr-KeyStoreURL属性值一样
jbr-TrustStorePassword:
受信任的密钥库文件的密码
jbr-ClientAuthMode:
客户端验证模式
serviceInvokerTimeout:
服务调用时限
httpsgatewayJBRChanel:
JBR端口设置
关于各个属性的详细说明,可参考官方文档或者相关API。
3.2.3keystore制作
密钥库文件的制作如下图所示,这里使用的是JDK提供的keytool工具。
关于如何使用keytool制作密钥库文件,请自行查找,网上到处都是,这里不再说明。
将制作好的keystore文件命名为httpsgateway.keystore,并保存至C:
/jbossesb-server-4.7目录下。
3.2.4配置属性文件
在esbcontent/META-INF目录下新建属性文件HttpRouter.properties,其内容如下:
Properties代码
28configurators=HttpProtocol
29protocol-socket-factory=mons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory
30keystore=C:
/jbossesb-server-4.7/httpsgateway.keystore
31keystore-passw=123456
32truststore=C:
/jbossesb-server-4.7/httpsgateway.keystore
33truststore-passw=123456
34max-connections-per-host=5
3.3定义Action类
3.3.1ClientAction
该类用于打印输出客户端响应的具体内容。
Java代码
35packagecom.thu.afa.esb.jbossesb.action.client;
36
37importorg.jboss.soa.esb.actions.AbstractActionLifecycle;
38importorg.jboss.soa.esb.helpers.ConfigTree;
39importorg.jboss.soa.esb.http.HttpHeader;
40importorg.jboss.soa.esb.http.HttpResponse;
41importorg.jboss.soa.esb.message.Message;
42
43importjava.util.List;
44
45publicclassHttpResponsePrinterextendsAbstractActionLifecycle{
46
47protectedConfigTreeconfigTree;
48
49publicHttpResponsePrinter(ConfigTreeconfig){
50this.configTree=config;
51}
52
53
54publicMessageprocess(Messagemessage)throwsException{
55
56HttpResponsehttpResponse=(HttpResponse)message.getBody().get(HttpResponse.RESPONSE_KEY);
57
58System.out.println("===========ClientResponse:
===================================");
59System.out.println("MessagePayload:
");
60System.out.println("\t["+message.getBody().get()+"]");
61
62System.out.println();
63System.out.println("HttpResponse:
");
64System.out.println("\tCode:
"+httpResponse.getResponseCode());
65System.out.println("\tLength:
"+httpResponse.getLength());
66System.out.println("\tEncoding:
"+httpResponse.getEncoding());
67
68System.out.println("\tHeaders:
");
69Listheaders=httpResponse.getHttpHeaders();
70for(HttpHeaderheader:
headers){
71System.out.println("\t\t"+header.getName()+":
"+header.getValue());
72}
73
74System.out.println("================================================================");
75
76returnmessage;
77}
78}
3.3.2ServerAction
该类用于打印输出服务端请求的具体内容。
Java代码
79packagecom.thu.afa.esb.jbossesb.action.server;
80
81importorg.jboss.soa.esb.actions.AbstractActionLifecycle;
82importorg.jboss.soa.esb.helpers.ConfigTree;
83importorg.jboss.soa.esb.message.Message;
84importorg.jboss.soa.esb.message.Properties;
85
86publicclassHttpRequestPrinterextendsAbstractActionLifecycle{
87
88protectedConfigTreeconfigTree;
89
90publicHttpRequestPrinter(ConfigTreeconfig){
91this.configTree=config;
92}
93
94
95publicMessageprocess(Messagemessage)throwsException{
96Propertiesproperties=message.getProperties();
97
98System.out.println("===========ServerRequest:
====================================");
99System.out.println("MessagePayload:
");
100System.out.println("\t["+message.getBody().get()+"]");
101
102System.out.println();
103System.out.println("\tHeaders:
");
104System.out.println("\t\thost:
"+properties.getProperty("host"));
105System.out.println("\t\tMethod:
"+properties.getProperty("MethodType"));
106System.out.println("\t\tPath:
"+properties.getProperty("Path"));
107System.out.println("\t\tuser-agent:
"+properties.getProperty("user-agent"));
108System.out.println("\t\tcontent-type:
"+properties.getProperty("content-type"));
109System.out.println("================================================================");
110
111message.getBody().add("HttpResponsePayload!
!
");
112
113returnmessage;
114}
115}
3.4定义第一个Service
Xml代码
116117invmScope="GLOBAL"name="HttpsClientService">
118
119120name="httpsgatewayListener"/>
121
122
123
124
125
126127value="https:
//localhost:
9433/x/y">
128129value="/META-INF/HttpRouter-localhost-https-9433.properties"/>
130
131
132
133
134
135136class="com.thu.afa.esb.jbossesb.action.client.HttpResponsePrinter"/>
137
138
配置说明:
该服务执行了两次操作,首先将接收到的消息执行了一次http转发,然后由HttpResponsePrinter打印请求的内容。
3.5定义第二个Service
Xml代码
139140invmScope="GLOBAL"name="HttpsServerService">
141
142143is-gateway="true"name="httpsgatewayJbsListener"/>
144
145
146147class="com.thu.afa.esb.jbossesb.action.server.HttpRequestPrinter"/>
148
149
配置说明:
该服务用语打印输出接收到的消息的内容。
3.6配置部署文件
部署依赖文件deployment.xml内容如下:
Xml代码
150
151jboss.esb.quickstart.destination:
service=Queue,name=httpsgateway
152
153
3.7部署ESB
将整个工程导出成一个ESB文件,并保存至JBossESBServer的部署目录下,启动JBossESBServer即可。
4ESB客户端
4.1新建Java工程
这里略去操作过程以及添加所需要的Jar包,具体操作过程可参考第一个ESB实例说明。
4.2发送消息的客户端
Java代码
154/***********************************************************************
155*
ProjectName:
helloworldclient
156*
FileName:
com.thu.afa.esb.jbossesb.client.HttpsGatewayClient.java
157*
Copyright:
Copyright(c)2010
158*
Company:
159***********************************************************************/
160packagecom.thu.afa.esb.jbossesb.client;
161
162importjava.util.Properties;
163
164importjavax.jms.Message;
165importjavax.jms.ObjectMessage;
166importjavax.jms.Queue;
167importjavax.jms.QueueConnection;
168importjavax.jms.QueueConnectionFactory;
169importjavax.jms.QueueReceiver;
170importjavax.jms.QueueSender;
171importjavax.jms.QueueSession;
172importjavax.jms.TextMessage;
173importjavax.naming.Context;
174importjavax.naming.InitialContext;
175
176/**
177*
ClassName:
HttpsGatewayClient
178*
Description:
179*@authorAfa
180*@date2010-9-7
181*@version1.0
182*/
183publicclassHttpsGatewayClient
184{
185privateQueueConnectionconnection;
186privateQueueSessionsession;
187privateQueuequeue;
188
189publicvoidsetupConnection()throwsException
190{
191Propertiesproperties=newProperties();
192properties.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
193properties.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:
org.jnp.interfaces");
194properties.put(Context.PROVIDER_URL,"jnp:
//127.0.0.1:
1099");
195InitialContextcontext=newInitialContext(properties);
196
197QueueConnectionFactoryfactory=(QueueConnectionFactory)context.lookup("ConnectionFactory");
198connection=factory.createQueueConnection();
199queue=(Queue)context.lookup("queue/httpsgateway");
200session=connection.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
201connection.start();
202
203System.out.println("ConnectionStarted");
204}
205
206publi