尝试连接到 Jira 和 ElasticSearch 时 WSO2 ESB 出错
Error with WSO2 ESB when trying to connect to Jira and ElasticSearch
我有一个场景,我想从 Jira 中动态提取问题,以便将它们保存在 ElasticSearch 上。我使用与 Jira 连接的自定义代理服务(通过 Jira 连接器),获取一个项目(首先我想保存项目的信息)并将此信息传递给 Elastic。以下是代理服务的顺序:
<?xml version="1.0" encoding="UTF-8"?>
<inSequence xmlns="http://ws.apache.org/ns/synapse">
<property expression="json-eval($.username)" name="username"/>
<property expression="json-eval($.password)" name="password"/>
<property expression="json-eval($.uri)" name="uri"/>
<property expression="json-eval($.id)" name="id"/>
<property expression="json-eval($.uriEl)" name="uriEl"/>
<property expression="json-eval($.indexName)" name="indexName"/>
<property expression="json-eval($.type)" name="type"/>
<property expression="json-eval($.message)" name="message"/>
<jira.init>
<username>{$ctx:username}</username>
<password>{$ctx:password}</password>
<uri>{$ctx:uri}</uri>
</jira.init>
<jira.getProject>
<projectIdOrKey>{$ctx:id}</projectIdOrKey>
</jira.getProject>
<property expression="json-eval($.project)" name="project"
scope="default" type="STRING"/>
<elasticsearch.init>
<apiUrl>{$ctx:uriEl}</apiUrl>
</elasticsearch.init>
<elasticsearch.createDocumentWithIndex>
<indexName>{$ctx:indexName}</indexName>
<type>{$ctx:type}</type>
<message>{$ctx:message}</message>
<body>{$ctx:project}</body>
</elasticsearch.createDocumentWithIndex>
<respond/>
</inSequence>
这是示例请求:
{
"username":"MyName",
"password":"AnStrongPassword",
"uri":"JiraURL",
"id":"MyProject",
"uriEl":"http://localhost:9200",
"indexName":"jira",
"type":"project",
"message":"Testing"
}
其他参数(Endpoint、out Sequence 和 Fault Sequence)默认。
问题是,当我尝试通过 WSO2 ESB 上的 'Try the Test service' 选项发送此请求时,出现以下错误:
Error connecting to the Tryit ajax proxy
我测试了相同的代码,但只使用了 Jira 连接(没有获取项目或连接到 Elastic),出现了同样的错误。
看这个错误,我想问题出在读取JSON请求之前,但我不知道它是否与端点有关(我认为它不需要端点对于这种情况)。
提前致谢。
此问题完全与 jira 连接器等无关。问题出在 "try it" 工具上。不建议将此工具用于测试目的。取而代之的是,尝试通过 soap ui.
调用代理服务
如果您分享尝试错误时的屏幕截图,我也可以对此发表评论。
几天后,我找到了另一种不使用代理服务的解决方案。为了将 ESB 与 Jira 连接起来,我在 ESB 上创建了这个 API:
<api xmlns="http://ws.apache.org/ns/synapse" name="transport_service" context="/transport_service">
<resource methods="GET">
<inSequence>
<jira.init>
<uri>MyURL</uri>
<username>MyUser</username>
<password>3MyPass</password>
</jira.init>
<jira.searchJira>
<query>project=MyProject</query>
<maxResults>50000</maxResults>
<fields>MyField1,MyField2,etc</fields>
</jira.searchJira>
<respond/>
</inSequence>
<outSequence>
<log level="full"/>
<property name="messageType" value="application/xml" scope="axis2"/>
<send/>
</outSequence>
</resource>
</api>
调用此 API 的命令很简单:
curl -v -X GET http://localhost:8280/transport_service > jira-db.json
最后,如果你想在 elastic 上插入这个 json,你可以按照典型的 PUT via curl:
curl -XPUT 'http://localhost:9200/jira/jira/1' -d @jira-db.json
此外,您可以在每日 bash 脚本中编写这两个命令(使用您的计划任务列表),获得与在 WSO2ESB 上安排代理服务相同的结果:
#!/bin/bash
curl -v -X GET http://localhost:8280/transport_service > jira-db.json
curl -XPUT 'http://localhost:9200/jira-dev/jira/1' -d @jira-db.json
echo "Daily load completed"
我有一个场景,我想从 Jira 中动态提取问题,以便将它们保存在 ElasticSearch 上。我使用与 Jira 连接的自定义代理服务(通过 Jira 连接器),获取一个项目(首先我想保存项目的信息)并将此信息传递给 Elastic。以下是代理服务的顺序:
<?xml version="1.0" encoding="UTF-8"?>
<inSequence xmlns="http://ws.apache.org/ns/synapse">
<property expression="json-eval($.username)" name="username"/>
<property expression="json-eval($.password)" name="password"/>
<property expression="json-eval($.uri)" name="uri"/>
<property expression="json-eval($.id)" name="id"/>
<property expression="json-eval($.uriEl)" name="uriEl"/>
<property expression="json-eval($.indexName)" name="indexName"/>
<property expression="json-eval($.type)" name="type"/>
<property expression="json-eval($.message)" name="message"/>
<jira.init>
<username>{$ctx:username}</username>
<password>{$ctx:password}</password>
<uri>{$ctx:uri}</uri>
</jira.init>
<jira.getProject>
<projectIdOrKey>{$ctx:id}</projectIdOrKey>
</jira.getProject>
<property expression="json-eval($.project)" name="project"
scope="default" type="STRING"/>
<elasticsearch.init>
<apiUrl>{$ctx:uriEl}</apiUrl>
</elasticsearch.init>
<elasticsearch.createDocumentWithIndex>
<indexName>{$ctx:indexName}</indexName>
<type>{$ctx:type}</type>
<message>{$ctx:message}</message>
<body>{$ctx:project}</body>
</elasticsearch.createDocumentWithIndex>
<respond/>
</inSequence>
这是示例请求:
{
"username":"MyName",
"password":"AnStrongPassword",
"uri":"JiraURL",
"id":"MyProject",
"uriEl":"http://localhost:9200",
"indexName":"jira",
"type":"project",
"message":"Testing"
}
其他参数(Endpoint、out Sequence 和 Fault Sequence)默认。
问题是,当我尝试通过 WSO2 ESB 上的 'Try the Test service' 选项发送此请求时,出现以下错误:
Error connecting to the Tryit ajax proxy
我测试了相同的代码,但只使用了 Jira 连接(没有获取项目或连接到 Elastic),出现了同样的错误。
看这个错误,我想问题出在读取JSON请求之前,但我不知道它是否与端点有关(我认为它不需要端点对于这种情况)。
提前致谢。
此问题完全与 jira 连接器等无关。问题出在 "try it" 工具上。不建议将此工具用于测试目的。取而代之的是,尝试通过 soap ui.
调用代理服务如果您分享尝试错误时的屏幕截图,我也可以对此发表评论。
几天后,我找到了另一种不使用代理服务的解决方案。为了将 ESB 与 Jira 连接起来,我在 ESB 上创建了这个 API:
<api xmlns="http://ws.apache.org/ns/synapse" name="transport_service" context="/transport_service">
<resource methods="GET">
<inSequence>
<jira.init>
<uri>MyURL</uri>
<username>MyUser</username>
<password>3MyPass</password>
</jira.init>
<jira.searchJira>
<query>project=MyProject</query>
<maxResults>50000</maxResults>
<fields>MyField1,MyField2,etc</fields>
</jira.searchJira>
<respond/>
</inSequence>
<outSequence>
<log level="full"/>
<property name="messageType" value="application/xml" scope="axis2"/>
<send/>
</outSequence>
</resource>
</api>
调用此 API 的命令很简单:
curl -v -X GET http://localhost:8280/transport_service > jira-db.json
最后,如果你想在 elastic 上插入这个 json,你可以按照典型的 PUT via curl:
curl -XPUT 'http://localhost:9200/jira/jira/1' -d @jira-db.json
此外,您可以在每日 bash 脚本中编写这两个命令(使用您的计划任务列表),获得与在 WSO2ESB 上安排代理服务相同的结果:
#!/bin/bash
curl -v -X GET http://localhost:8280/transport_service > jira-db.json
curl -XPUT 'http://localhost:9200/jira-dev/jira/1' -d @jira-db.json
echo "Daily load completed"