2017-02-14 5 views
0

Ich habe keine Ahnung, wie man einen Java Transformer in Mulesoft verwendet. Ich möchte grundsätzlich einen String nehmen und ihn in eine URL umwandeln, aber ich kann nicht herausfinden, wie man die Java-Methode oder irgendetwas verwendet.Mulesoft Java Transformer

Was mache ich falsch? Wie kann ich annehmen? Ich rufe meine Methode an oder mache sie so, dass meine Methode mit dem Wert verwendet wird, den ich möchte?

FEHLER:

org.mule.module.launcher.DeploymentInitException: Illegal: konvertieren kann nicht Wert vom Typ [transformers.StringTransformer] auf die gewünschte Art [org.mule.api.processor .MessageProcessor] für Immobilien 'messageProcessors [4]': keine passenden Editoren oder Wandlungsstrategie gefunden

verursacht durch: org.mule.api.config.ConfigurationException: Fehler beim Erstellen Bean mit dem Namen 'streamMigrateAccountToCustomer': Initialisierung von Bean fehlgeschlagen; Verschachtelte Ausnahme ist org.springframework.beans.ConversionNotSupportedException: Fehler beim Konvertieren von Eigenschaftswert vom Typ [java.util.ArrayList] in den erforderlichen Typ [java.util.List] für die Eigenschaft 'messageProcessors'; geschachtelte Ausnahme ist java.lang.IllegalStateException: Wert des Typs [transformers.StringTransformer] kann nicht in den erforderlichen Typ [org.mule.api.processor.MessageProcessor] für die Eigenschaft 'messageProcessors [4]' konvertiert werden: keine übereinstimmenden Editoren oder Umstellungsstrategie gefunden (org.mule.api.lifecycle.InitialisationException) (org.mule.api.config.ConfigurationException)

StringTransformer

@ContainsTransformerMethods 
public class StringTransformer 
{ 
    public String website; 

    public String getWebsite() { 
     return website; 
    } 

    public void setWebsite(String website) { 
     this.website = website; 
    } 

@Transformer 
    public String stringToURL(String string) throws MalformedURLException 
    { 
     return new java.net.URL(string).toString(); 
    } 
} 

XML

<custom-transformer class="transformers.StringTransformer" doc:name="Java"> 
    <spring:property name="website" value="#[payload.Website]"/> 
</custom-transformer> 

INPUT TO JAVA TRANSFORMER

%dw 1.0 
%output application/java 
--- 
{ 
    Id: payload.Id, 
    Name: payload.Name, 
    Active_CMRR__c: payload.Active_CMRR__c, 
    BillingStreet: payload.BillingStreet, 
    BillingCity: payload.BillingCity, 
    BillingState: payload.BillingState, 
    BillingPostalCode: payload.BillingPostalCode, 
    BillingCountry: payload.BillingCountry, 
    OwnerId: payload.OwnerId, 
    Website: payload.Website, 
    Contract_End_Date__c: payload.Contract_End_Date__c, 
    NS_Account_Number__c: payload.NS_Account_Number__c, 
    Phone: payload.Phone, 
    Subscription_Start_Date__c: payload.Subscription_Start_Date__c, 
    NS_Account_Name__c: payload.NS_Account_Name__c, 
    type: payload.type, 
    Owner: { 
     NS_Account_Manager_Id__c: payload.Owner.NS_Account_Manager_Id__c, 
     Id: payload.Owner.Id, 
     type: payload.Owner.type, 
     Name: payload.Owner.Name 
    } 
} 

Antwort

3

Für eine einfache String-Manipulation Ich ziehe einen einfachen MEL Ausdruck zu verwenden, heren ein Beispiel für eine neue Variable zu erstellen.

<set-variable variableName="website" value="#[new java.net.URL(payload.Website).toString()]" doc:name="Variable"/> 

eine java transformations auf dem MuleMessage zu tun, ich ziehe die AbstractMessageTransformer Klasse zu erweitern.

public class ExampleAbstractMessageTransformer extends AbstractMessageTransformer { 

@Override 
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { 
    // TODO Auto-generated method stub 
    HashMap<String, String> payload = new HashMap<String, String>(); 
    String websiteUrl = new String(); 

    //Grab Payload 
    payload = (HashMap<String, String>) message.getPayload(); 
    try { 
     websiteUrl = stringToURL(payload.get("Website").toString()); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 


    message.setInvocationProperty("websiteUrl", websiteUrl); 
    return message; 
} 

public String stringToURL(String string) throws MalformedURLException { 
    return new java.net.URL(string).toString(); 
} 
} 

Implementierung innerhalb des Mulesoft-Flusses. Angenommen, der Java-Code ist als com.stackoverflow verpackt. Transformatoren verwenden die Komponente "custom-transformator".

<custom-transformer class="com.stackoverflow.transformers.ExampleAbstractMessageTransformer" doc:name="Java" /> 
0
@ContainsTransformerMethods // since Mule 3.0.1 
    public class MyTransformers {   
  @Transformer   
  public URL stringToURL(String string) {   
     return new java.net.URL(string); 
    } 
    @Transformer 
    public List<URL> stringsToURLs(String string) {     
     List<URL urls = new ArrayList<URL>();    
     for (StringTokenizer tokenizer = new StringTokenizer(string); tokenizer.hasMoreTokens();) {        
      urls.add(new URL(tokenizer.nextToken())); 
     }    
     return urls; 
    } 
} 
+0

Versuchen Sie, Ihre Antwort zu erklären.Gib nicht einfach den Code als Antwort an –