2016-04-18 6 views
1

Ich verwende ein Java-Objekt, das mir einen Endpunkt zurückgeben soll, dann möchte ich einen Dienst aufrufen, der am angegebenen Endpunkt gehostet wird. Bitte helfen.Verwenden Sie Java-Objekt in mule

Unten ist mein Bemühen

In mule.xml

<spring:beans> 
     <spring:bean id="reqUrl" class="com.mule.sbus.drools.RequestUrl" 
      scope="singleton" /> 
    </spring:beans> 

    <bpm:drools /> 
    <http:listener-config name="NorthboundSingleEntrypoint" 
     host="0.0.0.0" port="8191" doc:name="HTTP Listener Configuration" /> 

    <http:request-config name="HTTP_Request_Configuration" 
     host="acdc3a38cffc411e5a18606a62b4ee07-877599714.us-west-1.elb.amazonaws.com" 
     port="80" doc:name="HTTP Request Configuration" /> 

    <flow name="sbusdroolsFlow"> 
     <http:listener config-ref="NorthboundSingleEntrypoint" 
      path="/*" doc:name="HTTP" /> 

     <set-variable variableName="requestUrl" 
      value="#[message.inboundProperties.'http.request.path']" doc:name="RequestUrl" /> 

     <script:component doc:name="Script"> 
      <script:script engine="groovy"> 
       <![CDATA[ 
        return requestUrl; 
       ]]> 
      </script:script> 
     </script:component> 

     <bpm:rules rulesDefinition="routingRules.drl" 
      initialFacts-ref="reqUrl" /> 
     <expression-transformer evaluator="groovy" 
      expression="message.getPayload().getObject()" doc:name="Expression" /> 

     <logger message="#[groovy:message.getPayload().getObject()]" level="INFO" 
      doc:name="LoggerResp" /> 

    </flow> 

Unten ist mein drools .drl

#default dialect for the semantic code will be MVEL 
global org.mule.module.bpm.MessageService mule; 

import com.mule.sbus.drools.RequestUrl 

dialect "mvel" 

declare RequestUrl 
    @role(event) 
end 

rule "test123" 
    lock-on-active 
when 
    $url:RequestUrl(url=="test123") 
then 
    #order.setDestination("WAREHOUSE_A"); 
    modify($url){setEndPoint("test123")} 
end 

rule "test234" 
    lock-on-active 
when 
    $url:RequestUrl(url=="test234") 
then 
    #order.setDestination("WAREHOUSE_A"); 
    modify($url){setEndPoint("test234")} 
end 

und meine Java-Klasse

package com.mule.sbus.drools; 

public class RequestUrl { 

    private String url; 

    private String endPoint; 

    public String getUrl() { 
     return url; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public String getEndPoint() { 
     return endPoint; 
    } 

    public void setEndPoint(String endPoint) { 
     /*if(endPoint=="test123") 
      this.endPoint = endPoint; 
     else*/ 
      this.endPoint = "/checkcibil"; 
      System.out.println("inside java :::: " + endPoint); 
    } 

    @Override 
    public String toString() { 
     // TODO Auto-generated method stub 
     return "url : " + url + " endPoint : " + endPoint; 
    } 

} 

Wie Sie können siehe ich rufe an meine Setter aus den drools Datei und sobald ich die Zeichenfolge bekommen möchte ich das gleiche drucken

<logger message="#[groovy:message.getPayload().getObject()]" level="INFO" 
      doc:name="LoggerResp" /> 

verwenden, aber ich weiß nicht, was die message value sein sollte zu verwenden. Bitte helfen

+0

abrufen Die Drools-Datei sieht nicht wie XML aus, ich würde das korrigieren :) – Majora320

+0

Tut mir leid, Drools-Datei ist eine .drl-Datei, wird es aktualisieren –

+1

Was versuchen Sie mit dem Ausdruck-Transformator zu erreichen? Auch das 'script: component' kann durch' ' –

Antwort

0

die Antwort erhielt,

Als ich groovy verwende, haben drools kommentiert, und der den Code aktualisiert, wie unten

<script:component doc:name="Script"> 
      <script:script engine="groovy"> 
       <![CDATA[ 
       reqUrl.setEndPoint(requestUrl); 
       String endpnt = reqUrl.getEndPoint(); 
       message.setProperty('endpnt', endpnt,org.mule.api.transport.PropertyScope.INVOCATION); 
       ]]> 
      </script:script> 
     </script:component> 

       <logger message="#[flowVars['endpnt']]" level="INFO" doc:name="LoggerResp" /> 

groovy ich mit dem Setter bin aufrufen und den Ruf der Getter um den Wert in endpt variabel zu haben. Dies kann jetzt als eine Eigenschaft in der Nachricht festgelegt werden und später können wir die gleiche (außerhalb groovy Skript-Tags), mit #[flowVars['endpnt']]