Mule 无法访问JAVA中的Jira有效负载(JAVA.util.Arrays$ArrayList)

Mule 无法访问JAVA中的Jira有效负载(JAVA.util.Arrays$ArrayList),mule,jira,mule-component,Mule,Jira,Mule Component,这是我的流量信息。试图从JIRA获得一个问题,并希望将该问题设置为另一个项目。在这里,我想使用自定义转换器并使用JAVA编码设置所有对象 <jira:config name="Jira" connectionUser="XXXXXXX" connectionPassword="XXXXX" connectionAddress="http://XXXXXXX/rpc/soap/jirasoapservice-v2" doc:name="Jira"> <jira:c

这是我的流量信息。试图从JIRA获得一个问题,并希望将该问题设置为另一个项目。在这里,我想使用自定义转换器并使用JAVA编码设置所有对象

<jira:config name="Jira" connectionUser="XXXXXXX" connectionPassword="XXXXX" connectionAddress="http://XXXXXXX/rpc/soap/jirasoapservice-v2" doc:name="Jira">
        <jira:connection-pooling-profile initialisationPolicy="INITIALISE_ONE" exhaustedAction="WHEN_EXHAUSTED_GROW"/>
        <reconnect count="3"/>
    </jira:config>

    <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>


  <flow name="jira-pocFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/input" doc:name="HTTP"/>
        <jira:get-issues-from-jql-search config-ref="Jira" jqlSearch="id=MRT-75" maxNumResults="100" doc:name="Jira"/>
        <set-variable variableName="payload" value="#[payload[0]]" doc:name="Variable"/>
        <component class="JIRATransformer" doc:name="Java"/>
        <jira:create-issue-using-object config-ref="Jira"    doc:name="Jira"   >
            <jira:issue ref="#[message.payload]"/>
        </jira:create-issue-using-object>
        <logger level="INFO" doc:name="Logger"/>
    </flow>
我试图跟踪此文档URL,但无法找到它。

我想访问这个负载,并想在这里更新负载对象的一些详细信息。我可以使用MEL表达式#[payload[0]]访问有效负载,它会自动将其转换为com.atlassian.jira.rpc.soap.beans.RemoteIssue,但使用Java代码我无法键入cast

你能帮我正确地投射这个物体,这样我就可以在这里访问有效载荷了吗


谢谢。

您的
组件中有一个bug

Arrays.asList(message.getPayload())
将消息负载包装到一个列表中。但是消息负载已经是一个
列表
,因此没有必要进行包装

如果你看一下,你会发现MuleSoft更喜欢后期播放
RemoteIssue
。我建议你也这样做:

for (Object o : ((List) message.getPayload())) {
  RemoteIssue ri = (RemoteIssue) o;
  ...
}

@David Dossot这与Mule的JIRA连接器有效载荷有关。有什么例外?您能显示其完整跟踪吗?
组件的代码
缺少
返回
语句:我假设这是一个复制/粘贴问题。是的,这是一个复制和粘贴问题,将其作为返回消息发布。但在此之前它失败了。我的组件在读取有效负载的RemoteIssue arrays.arraylist时出现问题。这实际上是由JIRA组件返回的。我在这里寻找解决办法。为什么Java代码在读取该对象时抛出类强制转换异常?@dev查看了我的答案。非常感谢David!!这对我来说是可行的,但我想使用JQL查询来迁移一些问题,JQL查询返回给我记录数组,并将所有记录迁移到另一个系统。而此处使用对象创建问题只支持Obejct类型,即RemoteIssue类型。那么,如果我想将所有RemoteIssues迁移到另一个系统,最好的方法是什么呢?只需为每个
范围添加一个,
jira:create issue using object
,这样它就可以迭代自定义组件返回的
列表。也可以了。。。再次感谢你的帮助。
ERROR 2015-04-15 19:58:59,526 [[jira-poc].HTTP_Listener_Configuration.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : Component that caused exception is: DefaultJavaComponent{jira-pocFlow.component.887693985}. Message payload is of type: Arrays$ArrayList
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. java.util.Arrays$ArrayList cannot be cast to com.atlassian.jira.rpc.soap.beans.RemoteIssue (java.lang.ClassCastException)
  JIRATransformer:29 (null)
2. Component that caused exception is: DefaultJavaComponent{jira-pocFlow.component.887693985}. Message payload is of type: Arrays$ArrayList (org.mule.component.ComponentException)
  org.mule.component.DefaultComponentLifecycleAdapter:348 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/component/ComponentException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to com.atlassian.jira.rpc.soap.beans.RemoteIssue
    at JIRATransformer.transformMessage(JIRATransformer.java:29)
    at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:141)
    at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:69)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
for (Object o : ((List) message.getPayload())) {
  RemoteIssue ri = (RemoteIssue) o;
  ...
}