尝试连接Jira和ElasticSearch时遇到WSO2 ESB时出错

时间:2016-06-13 09:23:19

标签: wso2 wso2esb jira-rest-api

我有和我想要动态提取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上的“尝试测试服务”选项发送此请求时,出现以下错误:

  

连接到Tryit ajax代理

时出错

我测试了相同的代码,但只使用了Jira连接(没有获取项目或连接到Elastic),并且发生了同样的错误。

看到这个错误,我想问题是在阅读JSON请求之前,但我不知道它是否与端点有关(我认为这个场景不一定是端点)。 / p>

提前致谢。

2 个答案:

答案 0 :(得分:0)

此问题完全独立于jira连接器等。问题在于“试用”工具。此工具不是为测试目的而推荐的。而不是尝试通过soap ui调用代理服务。

如果您在尝试发生错误时共享屏幕截图,我也可以对此进行评论。

答案 1 :(得分:0)

几天后,我发现了另一个解决我的问题的方法而没有使用代理服务。为了将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

最后,如果你想在弹性上插入这个json,你可以通过curl跟随典型的PUT:

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"