2016-04-18 3 views
1

Я использую объект java, который должен вернуть мне конечную точку, а затем я хочу вызвать службу, размещенную на указанной конечной точке. Пожалуйста помогите.Использовать объект Java в mule

Ниже мои усилия

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

Ниже мои 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 

и мой класс 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

Что вы пытаетесь достичь с помощью выражения-transformer? Также 'script: component' может быть заменен на' ' –

ответ

0

Получил ответ,

Как я использую заводной, комментировали Drools, и обновленный код, как показано ниже

<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" /> 

Использование заводной Я вызова сеттера и вызов геттерирующего иметь значение в переменной endpt. Теперь это может быть установлено как свойство в сообщении, и позже мы можем получить те же самые (внешние теги сценария groovy), используя #[flowVars['endpnt']]

Смежные вопросы