I am creating a bundle with drools where at the moment of running a main class of tests it returns me Error: unable to solve method using strict-mode
My Main class (TestFunctions.java)
public class TestFunciones{
public static final void main(String[]args){
PeticionFel req = new PeticionFel();
try{
KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
KieSession kss = kc.newKieSession("k-reglas");
System.setProperty("drools.dialect.mvel.strict", "false");
kss.insert(GranTotal(req));
kss.fireAllRules();
System.out.println("Cambió a estado: " + req.getDescripcion());
System.out.println("**********FIN DEL BUNDLE VALIDACIONES PARTE TRES**********");
}catch(Throwable t){
System.err.println("ERROR: " + t);
}
}
public static PeticionFel GranTotal(PeticionFel req){
try{
JAXBContext jaxbC = JAXBContext.newInstance("com.base");
Unmarshaller jaxbUn = jaxbC.createUnmarshaller();
InputStream strm = new ByteArrayInputStream(req.getCarga_util().getBytes(StandardCharsets.UTF_8.name()));
GTDocumento test = (GTDocumento) jaxbUn.unmarshal(strm);
GTDocumento.SAT uDTE = (GTDocumento.SAT) test.getContent().get(0).getValue();
if(!uDTE.getDTE().getDatosEmision().getItems().getItem().isEmpty()){
System.out.println("La cantidad de items es: " + uDTE.getDTE().getDatosEmision().getItems().getItem().size());
List<GTDocumento.SAT.DTE.DatosEmision.Items.Item> lines = new ArrayList<>();
lines = uDTE.getDTE().getDatosEmision().getItems().getItem();
lines.stream()
.filter(p -> p.getPrecio() == p.getPrecio().plus(MathContext.UNLIMITED))
.forEach((p)-> {
System.out.println("PRECIO " + p.getPrecio());
});
lines.forEach((invoice) -> System.out.println("PRECIO: " + invoice.getPrecio() + " de la línea " + invoice.getNumeroLinea()));
BigDecimal sumas = lines.stream().map((x) -> x.getPrecio()).reduce((x, y) -> x.add(y)).get();
System.out.println("SUMA = " + sumas);
BigDecimal total = uDTE.getDTE().getDatosEmision().getTotales().getGranTotal();
System.out.println("GRAN TOTAL: " + total);
int comparar = sumas.compareTo(total);
if(comparar == 0){
System.out.println("Gran Total calculado correctamente");
}
}else{
System.err.println("La casilla de ITEM no está presente en el XML");
}
}catch(UnsupportedEncodingException | JAXBException t){
System.err.println("Error: " + t.getMessage());
}
return req;
}
}
FILE TestFunctions.java
package com.principal;
import com.base.GTDocumento;
import estructuras.PeticionFel;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
/**
* @author einsen
*/
public class TestFunciones {
public static final void main(String[]args){
PeticionFel req = new PeticionFel();
try{
KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
KieSession kss = kc.newKieSession("k-reglas");
System.setProperty("drools.dialect.mvel.strict", "false");
kss.insert(GranTotal(req));
kss.fireAllRules();
System.out.println("Cambió a estado: " + req.getDescripcion());
System.out.println("**********FIN DEL BUNDLE VALIDACIONES PARTE TRES**********");
}catch(Throwable t){
System.err.println("ERROR: " + t);
}
}
public static PeticionFel GranTotal(PeticionFel req){
try{
JAXBContext jaxbC = JAXBContext.newInstance("com.base");
Unmarshaller jaxbUn = jaxbC.createUnmarshaller();
InputStream strm = new ByteArrayInputStream(req.getCarga_util().getBytes(StandardCharsets.UTF_8.name()));
GTDocumento test = (GTDocumento) jaxbUn.unmarshal(strm);
GTDocumento.SAT uDTE = (GTDocumento.SAT) test.getContent().get(0).getValue();
if(!uDTE.getDTE().getDatosEmision().getItems().getItem().isEmpty()){
System.out.println("La cantidad de items es: " + uDTE.getDTE().getDatosEmision().getItems().getItem().size());
List<GTDocumento.SAT.DTE.DatosEmision.Items.Item> lines = new ArrayList<>();
lines = uDTE.getDTE().getDatosEmision().getItems().getItem();
lines.stream()
.filter(p -> p.getPrecio() == p.getPrecio().plus(MathContext.UNLIMITED))
.forEach((p)-> {
System.out.println("PRECIO " + p.getPrecio());
});
lines.forEach((invoice) -> System.out.println("PRECIO: " + invoice.getPrecio() + " de la línea " + invoice.getNumeroLinea()));
BigDecimal sumas = lines.stream().map((x) -> x.getPrecio()).reduce((x, y) -> x.add(y)).get();
System.out.println("SUMA = " + sumas);
BigDecimal total = uDTE.getDTE().getDatosEmision().getTotales().getGranTotal();
System.out.println("GRAN TOTAL: " + total);
int comparar = sumas.compareTo(total);
if(comparar == 0){
System.out.println("Gran Total calculado correctamente");
}
}else{
System.err.println("La casilla de ITEM no está presente en el XML");
}
}catch(UnsupportedEncodingException | JAXBException t){
System.err.println("Error: " + t.getMessage());
}
return req;
}
}
ARCHIVE DRL
package com.principal
import com.principal.Funciones.*;
import com.base.GTDocumento;
import estructuras.PeticionFel;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.MathContext;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
rule "Total Total"
when
$total : TestFunciones(GranTotal())
then
System.err.println("ERROR. Gran Total calculado incorrectamente. El contenido de la casilla <dte:GranTotal>"
+ "es diferente a la sumatoria de las casillas <dte:Total>");
end