Использование XMLDumper JBoss DROOLS с файлом .dslr - PullRequest
1 голос
/ 17 февраля 2010

У меня есть файл .dslr, состоящий из правила (dslr) и файла dsl. Мне нужно получить вывод XML DRL из этого dslr.

Я пробовал разные способы с XMLDumper, но не могу заставить его работать. Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Сначала преобразуйте файл DSLR в DRL, затем сделайте то же самое, что и раньше. Смотрите следующую ссылку для примера того, как конвертировать DSLR в DRL:

http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/DrlParserTest.java

0 голосов
/ 27 июля 2013

Я переупаковал вышеописанный модульный тест в утилиту командной строки, удобную для отладки.

Dslr2Drl.java

package org.drools.compiler;

// Based on:
// http://stackoverflow.com/questions/2280068
// http://stackoverflow.com/questions/2402545
// http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/compiler/DrlParserTest.java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;

/***
// Include these if using Injected Expander
import org.drools.RuntimeDroolsException;
import org.drools.lang.Expander;
import org.drools.lang.dsl.DSLMappingFile;
import org.drools.lang.dsl.DSLTokenizedMappingFile;
import org.drools.lang.dsl.DefaultExpander;
import org.drools.lang.dsl.DefaultExpanderResolver;
***/

public class Dslr2Drl {
    public static String readFileAsString( String inFileName ) throws IOException {
        StringBuffer buff = new StringBuffer();
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(inFileName), "UTF-8"));
        while( true ) {
            String line = in.readLine();
            if ( null==line ) {
                break;
            }
            buff.append( line ).append( "\r\n" );
        }
        in.close();
        return new String( buff );
    }
    public static void main(String[] args) throws DroolsParserException, IOException {
        if ( 2 != args.length ) {
            System.err.println( "syntax: Dslr2Drl sentences.dslr transform.dsl > output.drl" );
            System.exit(1);
        }
        // String dslr = "rule 'foo' \n when \n Something \n then \n another \nend";
        String dslr = readFileAsString( args[0] );
        // String dsl = "[condition]Something=Something()\n[then]another=another();";
        String dsl = readFileAsString( args[1] );
        // String expect = "rule 'foo' \n when \n Something() \n then \n another(); \nend";

        DrlParser parser = new DrlParser();
        String result = parser.getExpandedDRL( dslr, new StringReader(dsl) );
        System.out.println( result );

        /***
        // Using Injected Expander
        DefaultExpanderResolver resolver = new DefaultExpanderResolver(new StringReader(dsl));
        final DSLMappingFile file = new DSLTokenizedMappingFile();
        if ( file.parseAndLoad( new StringReader(dsl) ) ) {
            final Expander expander = new DefaultExpander();
            expander.addDSLMapping( file.getMapping() );
            resolver.addExpander("*", expander);
        } else {
            throw new RuntimeDroolsException( "Error parsing and loading DSL file." + file.getErrors() );
        }
        DrlParser parser = new DrlParser();
        String result = parser.getExpandedDRL( drl, resolver);
        ***/
    }
}
...