Revert to eval() which lets you write plain old Java code:
$sc: StringCapability(name=="data.modelCode",
eval( $sc.getValue().matches( "^5G1.*") ) )
Perhaps you may have to add a cast.
-W
On 31/01/2013, CAK <carsten.kaiser(a)valtech.de> wrote:
Hello forum,
we currently encounter the following problem on Drools 5.1.1:
Evaluator 'matches' does not support type 'ValueType = 'Object' for
the
following rule:
rule "Create_License"
when
StringCapability(name=="service", value=="service_v1")
StringCapability(name=="data.modelCode", value matches "^5G1.*")
then
License license = new License();
license.setDuration("30 years");
license.setName("30Years");
license.setState(State.NOTACTIVATED);
license.setType(Type.IMPLICIT);
license.setWarn(false);
insert(license);
end
StringCapability derives from a generic class and is defined as follows:
public class StringCapability extends Capability <String>
{
public StringCapability(String name, String value)
{
super(name, value);
}
}
whereas the superclass looks like this
public abstract class Capability<T>
{
private final String name;
private final T value;
protected Capability(String name, T value)
{
this.name = name;
this.value = value;
}
@Override
public boolean equals(Object object)
{
if (this == object)
{
return true;
}
if (object == null)
{
return false;
}
if (getClass() != object.getClass())
{
return false;
}
Capability <?> other = (Capability <?>) object;
if (name == null)
{
if (other.name != null)
{
return false;
}
}
else if (!name.equals(other.name))
{
return false;
}
if (value == null)
{
if (other.value != null)
{
return false;
}
}
else if (!value.equals(other.value))
{
return false;
}
return true;
}
public String getName()
{
return name;
}
public T getValue()
{
return value;
}
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = prime * result + getClass().hashCode();
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((value == null) ? 0 : value.hashCode());
return result;
}
@Override
public String toString()
{
return new StringBuilder(getClass().getSimpleName()).append(" -
name:").append(name).append(", value:")
.append(String.valueOf(value)).toString();
}
The problem occurs when the rule is supposed to be compiled on
initialization of the knowledge base. So from my point of view, the value
returned by class StringCapability is of type String. Why do I get this
error? How can I workaround this problem without any code change (I just
can
provide another rule file)
Any help appreciated!
Thank you,
CAK
--
View this message in context:
http://drools.46999.n3.nabble.com/Evaluator-matches-does-not-support-type...
Sent from the Drools: User forum mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users