2016-04-18 28 views
1

我正在使用一個java對象,它應該返回一個端點,然後我想調用託管在指定端點的服務。請協助。在mule中使用Java對象

下面是我的心血

在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> 

下面是我滴料.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 

和我的java類

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; 
    } 

} 

,你可以看到我在調用從我的Drools的文件制定者,一旦我得到的字符串我想用

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

打印相同的,但我不知道應該是什麼message value使用。請協助

+0

drools文件看起來不像XML,我會更正:) – Majora320

+0

對不起, drools文件是一個.drl文件,將更新它 –

+1

你想用'expression-transformer'實現什麼?此外'script:component'可以替換爲'' –

回答

0

得到了答案,

由於我使用Groovy,有評論滴料,更新的代碼如下

<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,我調用調節器和調用的getter使其值在endpt中變化。這現在可以設置爲郵件屬性,後來我們可以檢索相同的(groovy腳本標籤外),使用#[flowVars['endpnt']]