2015-04-16 10 views
6

Ecco le informazioni sul mio flusso. Cercando di ottenere un problema da JIRA e desidera impostare quel issueID su un altro progetto. Qui voglio usare Custom Transformer e configurare tutti gli oggetti usando la codifica 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> 

Sto tentando di accedere all'oggetto di payload JIRA ma mi sta lanciando Errore come tipo di eccezione di trasmissione.

@Override 
public Object transformMessage(MuleMessage message, String outputEncoding) 
     throws org.mule.api.transformer.TransformerException { 

     ArrayList<com.atlassian.jira.rpc.soap.beans.RemoteIssue> list = new ArrayList(Arrays.asList(message.getPayload())); 

    for(RemoteIssue q : (List<RemoteIssue>) list){ 
     System.out.println("Print AssigneeInfo:->"+q.getAssignee()); 
    } 


} 

enter image description here

sto ottenendo i seguenti errori.

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) 
******************************************************************************** 

Ho provato a seguire questo URL di documentazione ma non sono riuscito a capirlo. http://mulesoft.github.io/jira-connector/java/com/atlassian/jira/rpc/soap/beans/RemoteIssue.html

Desidero accedere a questo payload e desidero aggiornare alcuni dettagli dell'oggetto payload qui. Posso accedere al payload usando l'espressione MEL # [payload [0]] e lo copre automaticamente in com.atlassian.jira.rpc.soap.beans.RemoteIssue ma usando il codice Java non riesco a scriverlo.

Puoi aiutarmi a trasmettere correttamente questo oggetto in modo da poter accedere al Payload qui?

Grazie.

+0

@David Dossot Questo è correlato al JAVA Connector Payload for Mule. – dev

+0

Qual è l'eccezione? Puoi mostrare la sua traccia completa? –

+0

Il codice del tuo componente manca di un'istruzione 'return': presumo che si tratti di un problema di copia/incolla. –

risposta

1

C'è un bug nel tuo component.

Questo Arrays.asList(message.getPayload()) avvolge il carico utile del messaggio in un elenco. Ma il payload del messaggio è già un List<RemoteIssues> quindi questo wrapping non è necessario.

Se guardi allo source code of the JIRA connector, vedrai che MuleSoft preferisce il casting in ritardo dello RemoteIssue. Ti suggerisco di fare lo stesso:

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

Il mio componente ha un problema con la lettura di RemoteIssue arrays.arraylist di payload. Che viene effettivamente restituito dal componente JIRA. Sto cercando una soluzione qui. Perché il codice Java lancia un'eccezione di classe durante la lettura di quell'oggetto? – dev

+0

@dev ha recensito la mia risposta. –

+0

Grazie mille David !! Questo ha funzionato per me ma volevo eseguire la migrazione di alcuni problemi usando JQL Query che mi restituiva array di record e migrava tutti su un altro sistema. Mentre qui creiamo un problema usando Object supportano il tipo Obejct che è il tipo RemoteIssue. Quindi qual è l'approccio migliore se voglio migrare tutti i RemoteIssues su un altro sistema? – dev