尝试连接到 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"