学习前准备:
概念:
(1)SOA
(2)ESBog
(3)soap / wsdl / schema / xml 之间存在的关系
(4)rest
(5)代理
http://soatutorials.blogspot.com/2015/
WSO2 ESB是一个轻量级的易于使用的企业服务资源总au线,基于Apache Software License v2.0. WSO2 ESB 允许系统管理员和SOA架构师轻松的配置消息路由, 虚拟化, 中介, 转换, 日志记录, 任务调度, 负载均衡, 失败路由, 事件中介等等. 运行时被设计为完全异步, 非阻塞 、连续的。基于 Apache Synapse 中介引擎.
备注:异步非阻塞态
WSO2 ESB 4.0.3 在革命性的 WSO2 Carbon platform (Middleware a' la carte)上进行开发, 并基于 OSGi 以便能对面向服务的架构(SOA)提供更好的模块化和组件化 . 这个版本也包含了一些新的特性和可选的组件,可以使用他们来自定义服务。. 更近一步说,如果你不想使用任何内置的特性,你可以毫无顾虑的卸载他们. 换句话说, WSO2 ESB 可以被自定义和调整以适用与你自己的SOA需求
WSO2 ESB 支持许多应用层协议和消息协议 (统称为传输), 包括 HTTP/S, E-mail, Java 消息服务 (JMS) and 虚拟文件系统 (VFS). 他还支持域特定协议 如:金融信息交换 (FIX), 高级消息队列协议 (AMQP) and Health Layer 7 (HL7). 新的传输可以被很容易的插入到服务中,这点还得感谢Axis2 传输框架提供的无缝可扩展性.
ESB 使用消息构建器组件来解析不通渠道的传输是如何到达的。. 一个消息构建器通常和内容类型联系在一起. 依靠到达消息的实际内容类型,ESB将会选择一个合适的消息构建器,然后解析这个消息的内容,根据XML信息集把它转化成Apache AXIOM. WSO2 ESB ships with 消息构建器处理文本消息 (纯文本, SOAP, POX 等) 还有二进制消息. 消息转换器是和构建器拥是功能相反的伙伴. 一个消息转换器会把消息根据原来的内容类型转换成原来的格式,在这个消息进入下次传输路由之前。.和传输一样,用户可以实现新的消息构建器和转换器通过使用Axis2 API.
高级端点在传输中保持作为一个逻辑的单元,有三种类型的断点,即地址端点、WSDL端点和默认端点。除了这些之外还有第二种端点类型:负载均衡断点和失败端点,他们有一个或多个高级端点组成. 一种端点可以使用任何有效的传输去分派消息,他们甚至可以在传出消息上实施各种QoS 约束(安全, RM 等) .
代理服务是 WSO2 ESB代理的虚拟服务. 他是用 Axis2 消息接收器实现的 所以能轻松的接受到来的消息.一个代理服务可以用URL访问也可以用规范的Web服务地址. 代理服务也发布一个WSDL 所以客户端连接代理服务就像连接一个真是的Web服务. 任何可用的传输都可以用来接受和请求消息通过这个代理服务. 代理服务是一个NB的方式用来发布已经存在的服务通过不通的传输工具、模式和 QoS配置.
WSO2的强大就在于他全方位的中介库,提供了各种消息处理和中介的功能. 使用这些中介库我们可以实现所有广泛应用的消息转化模式 (MEP)和企业集成模式(EIP). 存在简单的中介提供基本的消息处理功能如:日志记录和内容传输.也存在高级的中介用来访问数据库、对信息流添加安全等. 在这种情况下,内置的中介仍不足以满足一个方案,那么你可以依赖WSO2提供的简单但强大的API写一个自定义的中介.中介可以用多种技术来实现,包括java、脚本和spring。所有的这些都被认为是WSO2的扩展。
序列是特殊的中介充当中介的配置组件。序列允许组织中介实现命令管道和过滤器模式来实现实际的消息处理和中介 .
任务为WSO2 ESB 提供了配置计划任务的能力,他们为中介执行内部和外部的命令. QoS 组件 实现可靠消息、安全代理服务和中介,他和Apache的两个模块的实现都是为了 Axis2, 这两个模块是 Rampart 和 Sandesha.
WSO2 ESB 拥有内置的注册/存储库来存储配置和配置元数据 并且也提供了设备用来远程存储. 组件像集群、负载均衡和高可用性是WSO2成为了一个生产准备服务器。. 最后 GUI 组件提供了综合管理、配置和监视能力. GUI 建立在一个通过分离前端和后端的分层的架构上,. 这样就使得用户可以连接多个服务端通过一个 GUI控制台.这个基于WSO2的架构的组件提高了和OSGI之间的松耦合. 所有的这些组件都建立为 OSGi 包.
原文链接:https://blog.csdn.net/xo_zhang/article/details/9191617
https://download.csdn.net/download/fjxin999/5276627
http://blog.itpub.net/29063131/viewspace-2134263/
https://www.enterpriseintegrationpatterns.com/patterns/messaging/toc.html
需要jdk环境
quick start: https://docs.wso2.com/display/EI650/Quick+Start+Guide#2f01d764300c4ec68ad108b2df435e2c
安装向导: https://docs.wso2.com/display/EI650/Installation+Guide
下载地址: https://wso2.com/integration/?src=sidebar
rpm包直接安装,解压之后默认的安装目录为/usr/lib64/wso2/wso2ei/6.5.0
常见问题:
(1)https://www.cnblogs.com/lbblogs/p/10321402.html
问题一: 将H2替换为Mysql5.7数据库时提示无法找到驱动
** 解决方式:**官方文档给出的驱动程序位置有误,应为**/lib**,将5.7对应的驱动mysql-connector-java-8.0.14.jar存放在该目录,相应的dropins中也会复制一个驱动。
问题二:启动后与API Manager大量的端口冲突
** 解决方式:**因两款产品用到相同的技术手段,且大量的端口配置相同,因此部署在同一服务器时自然会冲突,如果一个一个查端口,再单独修改,工作量惊人,还好WOS2想到了该问题,只需要在启动EI时添加端口偏移量即可
命令:./integrator.sh -DportOffset=3 (端口号均增加3)
问题三:修改完Mysql5.7提示连接不上
** 解决方式:类似于我另一篇博客,是数据库SSL问题,关闭即可**
问题四:启动后提示缺少WSO2 Indenty Server相关类库
** 原因:**与Api Manager采用了同样的数据库,但还没有部署同一的认证服务期,因此报错,解决方式:
1)部署Wso2 IS(还没试)
2)与AM不共用库
问题五:运行成功后,ServerIp为localhost
** 参考文献:**https://docs.wso2.com/display/EI611/Configuring+carbon.xml
** (1) Host 显示不准确**
** 解决方法:修改…/conf/carbon.xml文件中的HostName,改为服务器的ip地址即可**
** 问题六:按照官方的教程**Sending a Simple Message to a Service运行 ,卡在运行msf4j.sh上,运行报错端口被占用。但坑爹的是****不告诉你哪个端口被占用。
** 解决方法:在google中搜索相关内容,找到了WSO2的所有端口信息https://docs.wso2.com/display/EI610/Default+ports+of+WSO2+EI 相关的端口可能是9090,在linux服务器上查询,发现有可能是gitlab的端口占用。查了一下午资料,试了端口offset不行,怀疑是服务jar包端口占用,删了也同样报错,后来终于发现9090端口的配置位置:/usr/lib64/wso2/wso2ei/6.4.0/wso2/msf4j/conf/transports/netty-transports.yml 即可。**
** 问题七:问题六改完后报新错:**
(1)同一个参数,被使用两次,报空指针
https://github.com/wso2/product-ei/issues/4558** 问题地址**
(2)
图片中红线的IP地址位置,显示的不是IP,是hostname的时候,配置文件进行修改;
上图的角号位置的注释打开,并按照实际的IP,按照上图进行配置;
sudo wso2ei-6.5.0-integrator
sudo nohup wso2ei-6.5.0-integrator >> /wso2_run.log 2>&1 &
window下启动 wso2home\bin下的integrator.bat 文件
ps -ef|grep wso2ei-6.5.0-integrator
kill -9 端口号
或者
sudo nohup wso2ei-6.5.0-integrator stop
浏览器访问地址,会在启动控制台日志中体现,https://{IP}:9443/carbon
u:admin / p:admin
主要介绍WSO2引擎的安装目录,JVM目录,服务请求地址等;
代理服务充当了WSO2 ESB服务的代理,通常是一个已经存在的服务端点,代理服务可以使用不同的传输方式。
客户可以直接发送请求代理服务的ESB,客户看到服务代理。
选择一个与中介场景匹配的模板,或者创建一个完全定制的代理服务,以满足您的具体需求。
场景描述
对外提供soap webservice,通过esb代理 rest 服务,返回restful 服务的的响应数据给esb ,esb返回数据给请求方,流程如下图:
需要提供restful 的服务地址,本机的开发环境服务地址;
URL:http://localhost:8181/person/
Headers:Content-Type application/xml
Method: GET
in param : 空的soap信封
out param:xml返回消息
ps:
(1)Mian 工具栏->Manage->services->Add-Proxy Service->Custom Proxy
具体代码:
(3)HTTPEndpoint
1.0
0
0
soapUI请求和响应:
主要是用来说明缓存周期的控制范围 | ||
---|---|---|
Scope | The scope at which the property will be set or removed from. Possible values are as follows. | |
Synapse | This is the default scope. The properties set in this scope last as long as the transaction (request-response) exists. | |
Transport | The properties set in this scope will be considered transport headers. For example, if it is required to send an HTTP header named ‘CustomHeader’ with an outgoing request, you can use the property mediator configuration with this scope. | |
Axis2 | Properties set in this scope have a shorter life span than those set in the Synapse scope. They are mainly used for passing parameters to the underlying Axis2 engine | |
axis2-client | This is similar to the Synapse scope. The difference between the two scopes is that the axis2-client scope can be accessed inside the mediate() method of a mediator via a custom mediator created using the Class mediator. For further information, see axis2-client. | |
Operation | This scope is used to retrieve a property in the operation context level. | |
Registry | This scope is used to retrieve properties within the registry. | |
System | This scope is used to retrieve Java system properties. |
URL:http://localhost:8181/person/
Headers:Content-Type application/xml
Method: GET
in param : 空的soap信封
out param:xml返回消息
备注:接受的消息可以输多个参数,但是有效的参数值只有一个name值,其他的不进行的处理;
参考链接
(1)如何使用WSO2 ESB XPath检索整个XML元素而不是其文本值
http://blog.shelan.org/2013/03/how-to-send-cdata-inside-your-soap.html
需要加配置文件,这样在ESB中可以加cdata便签,并起作用
https://stackoverflow.com/questions/38615035/wso2-esb-api-to-soap-transformation
注:如果$1是个对象按截图获取,如果$1是字符串要加双引号包起来变成 {“Stock”:“$1”}
并且如果$1里有需要转义的字符前面要加\
可以写个js脚本处理一下
var payload = mc.getPayloadJSON();
var REQUEST_JSON = payload.REQUEST_JSON;
REQUEST_JSON = REQUEST_JSON.replace(/\"/g,"\\\\\\\"");
payload.REQUEST_JSON = REQUEST_JSON;
mc.setPayloadJSON(payload);
var log = mc.getServiceLog();
log.info(“Logging inside Script Mediator”);
var payload = mc.getPayloadJSON();
var arr = mc.getPayloadJSON().order_list.order;
备注:如果文本中含有/r /n 等特殊字符,需要将其替换或者删除,才能进行,不然JavaScript中会出现
payload.order_list.order = dest;
mc.setPayloadJSON(payload);
log.info("************"+Math.random().toString(36).substring(3,7)) ;
log.info("************"+Math.floor(Math.random()*4000+1000)) ;
https://stackoverflow.com/questions/43397626/how-to-use-apostrophe-character-in-the-fnconcat-property-expression-wso2-esb
https://medium.com/@harshan.dll/wso2-ei-using-switch-mediator-e421ed344efb
https://wso2.com/library/blog-post/2013/10/wso2-esb-balance-sugarcrm-proxy-service/
备注:多个条件则用and /or进行拼接,也支持><等符号操作
get-property(‘MessageID’) 是可以直接获取UUID,但是获取的UUID会有前缀urn:uuid: ,fn:substring-after(),函数是用来去掉前缀的。
修改
synapse.xpath.dom.failover.enabled=true
$ctx是XPATH下使用的函数;fn:replace 是xpath的函数;
备注:如果$ctx: 要获取的值在标签里面的话,则获取不到数据;
https://docs.wso2.com/display/ESB480/Property+Mediator
例如:
]]>
获取ns2:serviceInformationResponse这个节点的内容,需要在 property 中加xmlns,样例如下:
参考资料:
http://kukusan-network.blogspot.com/2012/10/how-to-create-web-service-proxy-in-esb.html
操作2:
proxy service name:填写代理服务的名称,根据业务自定义
wsdl uri:被代理的wsdl地址;例如:http://192.168.1.1:8081/cxf/server?wsdl
地址为交互服务地址,直接请求的结果如下:
wsdl Service:填写被代理的服务名称,样例如图所示:
wsdl prot:填写被代理的port名称,样例如图所示:
代码如下:
应用在已经存在soap服务,我们esb需要做的就是网关代理,对外暴露请求服务地址,同时,可以对请求和响应的地址进行记录,操作等;
esb_home/conf/axis2/axis2.xml中添加:
参考书
https://stackoverflow.com/questions/15000596/using-xpath-functions-in-filter-mediator
http://shriwithjava.blogspot.com/2015/07/how-to-use-filter-mediator-in-wso2-esb.html
https://stackoverflow.com/questions/51164667/wso2-esb-filter-check-null-for-get-property
场景描述
请求的rest服务是post的提交方式
URL:http://localhost:8181/person/add
Headers:Content-Type application/xml
Method: POST
in param : 空的soap信封
23
wq
male
out param:xml返回消息
接收的内容一致
问题1:确保在postman中请求的restful服务地址是有效的,入参可以是xml,json.XML消息样例需要root节点如下;
23
zyan
male
json样例如下:
{
"age": "23",
"name": "zyan",
"sex": "male"
}
问题2:请求无参数的rest,直接在proxy services中的Endpoint中配置地址,请求失败,在Endpoints中添加http endpoint,则可以调式通过;具体原因没有找到;
问题3:
参考地址
https://code-examples.net/en/q/d5702a
https://www.chakray.com/wso2-esb-tutorial-simple-message-content-based-routing-using-filter-mediator/
https://www.cnblogs.com/leolzi/p/10966698.html?tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1
https://docs.wso2.com/display/EI650/Using+REST+with+a+Proxy+Service#UsingRESTwithaProxyService-RESTClientandSOAPService
https://docs.wso2.com/display/EI640/DB+Report+Mediator
]]>
取参数的位置为//agr0
(2)使用payloadFactory mediator组件封装消息,进行重新发送的时候,需要
- create a file called XMLInputFactory.properties inside
- add following content into the file
javax.xml.stream.isCoalescing=false
创建文件XMLInputFactory.property在引擎目录的根目录下,文件中填加
javax.xml.stream.isCoalescing=false
If you invoke the proxy with any SOAP message, you will get a malformed response. The reason for this is WSO2 EI uses STAX parser and by default, the STAX parser is in non coalescing mode. To correct that, you need to do following
https://medium.com/@arunans23/iterate-over-json-payload-with-wso2-enterprise-integrator-8ccb9cdd2c70
https://buddhimawijeweera.wordpress.com/2019/07/23/wso2-ei-support-for-iterate-and-enrich-json-payloads/
https://stackoverflow.com/questions/28572800/how-to-implement-a-dummy-rest-api-in-wso2-esb
备注:不能加outSequence,否则针对返回的字符串,不会有输出内容,json对象返回,可以操作。具体内容查看–员工信息列表-bat.xml
例如:
/dictionary/{char}/{word}
取值:
?拼接参数的情况,获取参数:
/list?sfzjhm=370224195601235728
获取地址栏的参数,请求另外的接口,获取数据:
举例;
1.http协议例子:该例子为调用两个DSS示例
2.如果参数有变动则调用前重新组装payload
{"MODULE_CODE": "$1"}
3.注意事项:
设置messageType
如果DSS没有返回则API会一直等待响应所以加如下设置
通过服务请求,获取数据库信息,并封装xml消息体返回;
(1)将驱动程序放在
(2)编码如下:
com.mysql.cj.jdbc.Driver
jdbc:mysql://192.168.140.229:33066/test
test
test
SELECT emp_name from emp
$1
插入数据到数据
com.mysql.cj.jdbc.Driver
jdbc:mysql://192.168.140.229:33066/test
test
test
INSERT INTO emp VALUES(?,?,?,?)
true
备注:
(1)需要用dbreport,否则报错,如下图:
(2)参数的顺序和SQL的?顺序要一致
(3)主键自增,mysql按照mysql insert的语句主键列null就可以;
主键自增操作
com.mysql.cj.jdbc.Driver
jdbc:mysql://192.168.140.229:33066/test
test
test
参考网址
(1)A sample on a WSO2 ESB proxy with a DBLookup mediator and a dedicated faultSequence to excute during an error
(2) Apache Synapse/WSO2 API No response
(3)wso2 ESB查询数据库:https://www.youtube.com/watch?v=_iDHzpD2Cwk&t=196s
(4) WSO2 EI-插入数据库限制-DBReport介体-WSO2 EI - Insert to Database Restrictions - DBReport Mediator
(5)DB Report Mediator
(6)主键自增 https://docs.wso2.com/display/DSS321/Returning+Generated+Keys
(7)https://docs.wso2.com/display/ESB500/Sample+360%3A+Introduction+to+DBLookup+Mediator
https://stackoverflow.com/questions/52376396/wso2-ei-insert-to-database-restrictions-dbreport-mediator/52376425
com.mysql.cj.jdbc.Driver
jdbc:mysql://192.168.140.229:33066/test
test
test
INSERT INTO emp (emp_name,age,gender) VALUES(?,?,?)
(1)请求和响应结果
(2)数据库写入结果
json和XML解析
备注:直接在property中获取数据的方式如下图:
场景描述
具体步骤
参考地址
(1)添加和计划任务
(2)Writing a simple scheduling task with WSO2 ESB 4.8.0
https://docs.wso2.com/display/EI650/Scheduling+Tasks
场景描述
具体步骤
参考地址
(1)WSO2 ESB Data Mapper : Getting Started with Data Mapper mediator
(2)https://medium.com/@eranda/wso2-esb-data-mapper-getting-started-with-data-mapper-mediator-99120a80bad8
(3)https://docs.wso2.com/display/EI650/Data+Mapper+Mediator
(4)https://docs.wso2.com/display/EI600/Transforming+Message+Content#TransformingMessageContent-Creatingthedeployableartifacts
支持AMQP和JMS协议
参考地址:
Configuring the Kafka Inbound Operation
(1)导入数据库连接包 到
(2)修改配置文件
参考地址:
(1)[MySql 5.7] DM DB给出了错误的脚本(同时带有手动和-Dsetup)
(2)Remote Instance and Mount Configuration Details
(3)将远程存储库(WSO2 GREG)安装到WSO2 ESB
(4)https://malalanayake.wordpress.com/2013/01/08/database-configuration-in-wso2-carbon-products/
**(5)WSO2 Identity Server中的多用户存储配置
参考样例集合:
https://svn.wso2.org/repos/wso2/tags/wsf/cpp/1.0.0/esb/java/modules/distribution/src/main/docs/ESB_Samples.html
(1)安装JDK,并配置JDK环境变量;
(2)安装WSO2 EI 环境,解压就能用;
(3)从这里下载MSF4J服务并将JAR文件复制到
(4)如果运行在Windows上,从这里下载snappy-java_1.1.1.7.jar并将JAR文件复制到
在/conf/synapse中设置以下属性。属性文件为true,以便ESB配置文件可以发布中介统计信息:
mediation.flow.statistics.enable=true
mediation.flow.statistics.tracer.collect.payloads=true
mediation.flow.statistics.tracer.collect.properties=true
(1)启动分析配置文件:
win:worker.bat
linux:sh worker.sh
nohup ./worker.sh > /wso2log/analytics_worker.log 2>&1 &
(2)启动后端服务 (which is an MSF4J service)
linux:sh carbon.sh
nohup ./carbon.sh > /wso2log/analytics_carbon.log 2>&1 &
win:carbon.bat
(3)开启集成引擎服务
win:integrator.bat
linux:sh integrator.sh
nohup ./integrator.sh
nohup ./integrator.sh > /wso2log/integrator.log 2>&1 &
(4)开启统计消息和消息跟踪
(1)启动分析面板
win:dashboard.bat
linux:sh dashboard.sh
nohup ./dashboard.sh > /wso2log/dashboard.log 2>&1 &
(2)登录连接
https://localhost:9643/portal
admin/admin
其他功能需要详细了解
监控的端点
(1)先启动
在
(2)启动ESB服务
(3)根据启动日志页面访问,就可以看到分析面板
备注:
(1)ESB关闭,analytics-dashboard服务开启,可以访问页面,数据不刷新;
(2)ESB开启,analytics-dashboard服务关闭,esb报错,ssl 7712端口拒绝连接(启动顺序很重要),analytics-dashboard服务重启,历史数据依然存在;
问题:
(1)报错找不到ORG_… table,解决办法如下网址:将固定的jar包放到指定的位置上
https://stackoverflow.com/questions/39228454/wso2-esb-analytics-errors-after-access-dashboard
未解决
(1)Using the Analytics Dashboard
(2)https://docs.wso2.com/display/EI650/Using+the+Analytics+Dashboard#a4c2b02871fa4aa3939026751c7deca0
Starting the Integrator runtime and deploying the artifacts
How to use Cache Mediator in WSO2 ESB
https://stackoverflow.com/questions/25286736/querying-the-cached-response-in-wso2-dss-esb
(1) https://stackoverflow.com/questions/18894171/wso2-esb-clustering-concept
(2)https://medium.com/@maryamzi/wso2-ei-clustering-the-esb-integration-profile-on-a-single-machine-dab84e787be9
(3)http://soatutorials.blogspot.com/2013/11/how-to-configure-wso2-esb-cluster-with.html
(4)Clustering the ESB Profile
https://gitee.com/kimmking/wso2esbcn
用Google浏览器访问,然后右键点击将页面翻译成中文。
参考:
https://docs.wso2.com/display/IS510/Mitigating+Cross+Site+Request+Forgery+%28CSRF%29+Attacks
https://medium.com/@PrakhashS/overview-cross-site-request-forgery-csrf-recommended-approach-for-wso2-products-bb0e2437307
**** https://docs.wso2.com/display/AM210/Adding+Internationalization+and+Localization
http://quabr.com:8182/56698539/wso2-api-manager-api-authentication-failure-for-multiple-scope
60000
fault
https://github.com/ichakios/dbselect-wso2-mediator
http://cn.voidcc.com/question/p-mwxslzam-m.html
https://suhan-opensource.blogspot.com/2016/08/using-wso2-dss-retrieve-data-from.html
https://stackoverflow.com/questions/16263136/wso2-esb-dblookup-mediator-query-multiple-rows
https://developer.jboss.org/groups/jbugcz/blog/2012/07/29/unexpected-character-code-61-expected-a-semi-colon-after-the-reference-for-entity
https://susankhanirmala.wordpress.com/2016/04/20/how-to-appending-a-context-and-query-string-parameters-to-the-target-rest-endpoint-using-wso2-esb/
数据集成是集成过程的重要组成部分。例如,考虑以下情形,在该情形下,您具有使用WSO2 EI的ESB配置文件管理的典型集成过程。在这种情况下,需要使用存储在各种不同数据源中的数据来完成集成用例。 ESB概要文件中嵌入的数据服务功能允许您通过将数据与数据源层分离并将它们作为数据服务公开来管理此集成方案。然后,ESB中定义的主要集成流程将具有通过数据服务管理数据的能力。定义数据服务后,您可以通过调用数据服务中定义的相关操作来操纵存储在数据源中的数据。例如,您可以执行基本的CRUD操作以及其他高级操作。
1、需要多数据源的数据进行集成处理的情况;
2、遍历数据库的集合,针对集合进行操作的情况;
https://docs.wso2.com/display/EI650/Exposing+a+Custom+Datasource+as+a+Data+Service#ExposingaCustomDatasourceasaDataService-Connectingtothedatasource
https://docs.wso2.com/display/EI650/Datasource+Configuration+Parameters
https://docs.wso2.com/display/EI650/Exposing+a+Datasource+as+a+Data+Service
https://docs.wso2.com/display/EI640/Elements+of+a+Data+Service
(1)点击 services ->data service -> Create
(2)必填 data Service Name ,根据业务自定义,其他默认,点击next
(3)点击添加数据源
(4)如图
datasource id :根据具体业务自定义,要细化到当前执行sql的含义;
datasourceType :选择数据资源类型,可以选择表格,MongoDB,等;自定义关系型数据库类型,选择 RDBMS;
选择RDBMS之后如图:
Database Engine:可选择多种数据库类型;
选择oracle为例,配置驱动,url,数据库用户名和密码;
Datasource configuration parameters ,这个窗体可以配置数据库连接池相关的内容,例如最大连接数,初始化连接数等;
具体样例如下:
其他默认,有需要的,可以自行查询;其他的配置含义未进行确认含义;
Dynamic User Authentication,这个功能未研究;
(1)点击 add new query
(2)
Query ID 结合业务命名,直接命名符合sql含义的名字;
DataSource:选择创建好的数据源;
SQL:编写sql语句;
add new SQL Dialect:可以添加各个类型数据库的方言;
Generate Input Mappings:
(3)
Grouped by element:返回数据的root节点名;
Row name:每条数据的节点名称;
Add New Output Mapping:返回数据的内容;
返回JSON数据内容
然后请求的时候需要在header中 Accept: application/json,否则返回的数据依然是XML;
备注:JSON的定义必须有一个根节点,否则保存失败;
备注:
(1)rest参数的名称必须和配置参数名称一致;
(2)resource中没有配置参数,可以用?的形式加入;
rest请求:
根据添加资源中的path进行访问,访问地址的前缀名在如图所示的位置:
https://stackoverflow.com/questions/38516900/wso2-dss-value-type-miss-match-expected-value-type-datetime-but-found-s/38625629
Solved this by modifying wso2 dss axis2.xml
加上之后,post和get在DSS中都可以请求,但是不能被api调用,调用则返回的XML,暂时未找到解决办法,需要进一步扩展;
如果,不加上述代码,则显示效果如下图:
备注
https://stackoverflow.com/questions/58362974/wso2-mediator-that-removes-specific-jsonobject-occurrences-within-a-json-array
https://docs.wso2.com/display/EI650/Working+with+JSON+Message+Payloads#WorkingwithJSONMessagePayloads-Script
完整分类demo:
http://bsenduran.blogspot.com/2017/08/while-loop-in-wso2-esb.html
smooks Mediator XML to CSV
http://wso2-oxygen-tank.10903.n7.nabble.com/Smooks-Mediator-XML-to-CSV-with-same-repeated-element-in-two-tags-td157640.html#a157641
并发线程vfs-worker
大力气分享,有没有赞