You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by ObjectOrange <br...@softechnics.com> on 2008/10/22 18:15:36 UTC

ServiceMix Drools SE: XPath XML Attribute Updates Support

Hello,

I've noticed in the examples for this component the use of XPath for
condition evaluation. Is there a way to update the XML within a Normalized
Message perhaps setting an XML attribute to a new value using the current
code or would this be a new feature?

Thx!

Brian
-- 
View this message in context: http://www.nabble.com/ServiceMix-Drools-SE%3A-XPath-XML-Attribute-Updates-Support-tp20114382p20114382.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: ServiceMix Drools SE: XPath XML Attribute Updates Support

Posted by ObjectOrange <br...@softechnics.com>.
BTW, what's the proper method for getting new code approved (by the
community?)?


ObjectOrange wrote:
> 
> Actually, I added these two:
> 
>     public void setAttributeWithValue(String xpath, String value) throws
> DOMException {
>         Element msgXML = getContent();
>         if(msgXML!=null) {
>             Attr attribute = msgXML.getAttributeNode(xpath);
>             if(attribute==null)
>                 throw new DOMException(DOMException.NOT_FOUND_ERR,
> "Attribute not found in message with xpath: "+xpath);
>             else
>                 attribute.setValue(value);
>         }
>     }
> 
>     public void setAttributeWithAttribute(String xpathToSet, String
> xpathValue) throws DOMException {
>         Element msgXML = getContent();
>         if(msgXML!=null) {
>             Attr attributeToSet = msgXML.getAttributeNode(xpathToSet);
>             Attr attributeValue = msgXML.getAttributeNode(xpathValue);
>             String faultMsg = "";
>             boolean fault = false;
>             if(attributeToSet==null) {
>                 fault = true;
>                 faultMsg = "Attribute not found in message with xpath:
> "+xpathToSet+"/n";
>             }
>             if(attributeValue==null) {
>                 fault = true;
>                 faultMsg += "Attribute not found in message with xpath:
> "+xpathValue+"/n";
>             }
>             if(fault)
>                 throw new DOMException(DOMException.NOT_FOUND_ERR,
> faultMsg);
>             else
>                 attributeToSet.setValue(attributeValue.getValue());
>         }
>     }
> 
> 
> ObjectOrange wrote:
>> 
>> I added the following code to the Message class:
>> 
>> public void setAttribute(String xpath, String value) throws DOMException
>> {
>>         Element msgXML = getContent();
>>         if(msgXML!=null) {
>>             Attr attribute = msgXML.getAttributeNode(xpath);
>>             if(attribute==null)
>>                 throw new DOMException(DOMException.NOT_FOUND_ERR,
>> "Attribute not found in message with xpath: "+xpath);
>>             else
>>                 attribute.setValue(value);
>>         }
>>     }
>> 
>> Does this work for everyone? If so, how do I (or can someone) add this to
>> our latest build?
>> 
>> 
>> lhe77 wrote:
>>> 
>>> Brian,
>>> 
>>> actually you can have to logic in your drl file.
>>> Just get the internal NormalizedMessage of the exchange and convert the 
>>> content to DOM document using SourceTransformer. Then change the
>>> attribute in 
>>> that document and put it back to the message content. That should do the 
>>> trick.
>>> 
>>> For details have a look at the drools engine source:
>>> http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-
>>> drools/trunk/src/main/java/org/apache/servicemix/drools/
>>> 
>>> Regards
>>> Lars
>>> 
>>> 
>>> Am Donnerstag 23 Oktober 2008 14:11:25 schrieb ObjectOrange:
>>>> Thx Lars!
>>>>
>>>> So, code and load a new 'helper' class that provides a
>>>> setXMLAttribute()
>>>> method?
>>>>
>>>> Does using these 'helper' classes interfere with the BRMS web
>>>> application
>>>> in managing the DRL files?
>>>>
>>>> lhe77 wrote:
>>>> > Brian,
>>>> >
>>>> > of course you can change the content of the message. Just retrieve
>>>> the
>>>> > MessageExchange's InMsg (Normalized Message) and use getContent() to
>>>> get
>>>> > the
>>>> > content of the message.
>>>> > Useful class here to convert the content to DOM document or String is
>>>> the
>>>> > SourceTransformer class.
>>>> >
>>>> > Regards
>>>> > Lars
>>>> >
>>>> > Am Mittwoch 22 Oktober 2008 18:15:36 schrieb ObjectOrange:
>>>> >> Hello,
>>>> >>
>>>> >> I've noticed in the examples for this component the use of XPath for
>>>> >> condition evaluation. Is there a way to update the XML within a
>>>> >> Normalized
>>>> >> Message perhaps setting an XML attribute to a new value using the
>>>> >> current code or would this be a new feature?
>>>> >>
>>>> >> Thx!
>>>> >>
>>>> >> Brian
>>> 
>>> 
>>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/ServiceMix-Drools-SE%3A-XPath-XML-Attribute-Updates-Support-tp20114382p20192303.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: ServiceMix Drools SE: XPath XML Attribute Updates Support

Posted by ObjectOrange <br...@softechnics.com>.
Actually, I added these two:

    public void setAttributeWithValue(String xpath, String value) throws
DOMException {
        Element msgXML = getContent();
        if(msgXML!=null) {
            Attr attribute = msgXML.getAttributeNode(xpath);
            if(attribute==null)
                throw new DOMException(DOMException.NOT_FOUND_ERR,
"Attribute not found in message with xpath: "+xpath);
            else
                attribute.setValue(value);
        }
    }

    public void setAttributeWithAttribute(String xpathToSet, String
xpathValue) throws DOMException {
        Element msgXML = getContent();
        if(msgXML!=null) {
            Attr attributeToSet = msgXML.getAttributeNode(xpathToSet);
            Attr attributeValue = msgXML.getAttributeNode(xpathValue);
            String faultMsg = "";
            boolean fault = false;
            if(attributeToSet==null) {
                faultMsg = "Attribute not found in message with xpath:
"+xpathToSet+"/n";
            }
            if(attributeValue==null) {
                faultMsg += "Attribute not found in message with xpath:
"+xpathValue+"/n";
            }
            if(fault)
                throw new DOMException(DOMException.NOT_FOUND_ERR,
faultMsg);
            else
                attributeToSet.setValue(attributeValue.getValue());
        }
    }


ObjectOrange wrote:
> 
> I added the following code to the Message class:
> 
> public void setAttribute(String xpath, String value) throws DOMException {
>         Element msgXML = getContent();
>         if(msgXML!=null) {
>             Attr attribute = msgXML.getAttributeNode(xpath);
>             if(attribute==null)
>                 throw new DOMException(DOMException.NOT_FOUND_ERR,
> "Attribute not found in message with xpath: "+xpath);
>             else
>                 attribute.setValue(value);
>         }
>     }
> 
> Does this work for everyone? If so, how do I (or can someone) add this to
> our latest build?
> 
> 
> lhe77 wrote:
>> 
>> Brian,
>> 
>> actually you can have to logic in your drl file.
>> Just get the internal NormalizedMessage of the exchange and convert the 
>> content to DOM document using SourceTransformer. Then change the
>> attribute in 
>> that document and put it back to the message content. That should do the 
>> trick.
>> 
>> For details have a look at the drools engine source:
>> http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-
>> drools/trunk/src/main/java/org/apache/servicemix/drools/
>> 
>> Regards
>> Lars
>> 
>> 
>> Am Donnerstag 23 Oktober 2008 14:11:25 schrieb ObjectOrange:
>>> Thx Lars!
>>>
>>> So, code and load a new 'helper' class that provides a setXMLAttribute()
>>> method?
>>>
>>> Does using these 'helper' classes interfere with the BRMS web
>>> application
>>> in managing the DRL files?
>>>
>>> lhe77 wrote:
>>> > Brian,
>>> >
>>> > of course you can change the content of the message. Just retrieve the
>>> > MessageExchange's InMsg (Normalized Message) and use getContent() to
>>> get
>>> > the
>>> > content of the message.
>>> > Useful class here to convert the content to DOM document or String is
>>> the
>>> > SourceTransformer class.
>>> >
>>> > Regards
>>> > Lars
>>> >
>>> > Am Mittwoch 22 Oktober 2008 18:15:36 schrieb ObjectOrange:
>>> >> Hello,
>>> >>
>>> >> I've noticed in the examples for this component the use of XPath for
>>> >> condition evaluation. Is there a way to update the XML within a
>>> >> Normalized
>>> >> Message perhaps setting an XML attribute to a new value using the
>>> >> current code or would this be a new feature?
>>> >>
>>> >> Thx!
>>> >>
>>> >> Brian
>> 
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/ServiceMix-Drools-SE%3A-XPath-XML-Attribute-Updates-Support-tp20114382p20132096.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: ServiceMix Drools SE: XPath XML Attribute Updates Support

Posted by ObjectOrange <br...@softechnics.com>.
I added the following code to the Message class:

public void setAttribute(String xpath, String value) throws DOMException {
        Element msgXML = getContent();
        if(msgXML!=null) {
            Attr attribute = msgXML.getAttributeNode(xpath);
            if(attribute==null)
                throw new DOMException(DOMException.NOT_FOUND_ERR,
"Attribute not found in message with xpath: "+xpath);
            else
                attribute.setValue(value);
        }
    }

Does this for everyone? If so, how do I (or can someone) add this to our
latest build?


lhe77 wrote:
> 
> Brian,
> 
> actually you can have to logic in your drl file.
> Just get the internal NormalizedMessage of the exchange and convert the 
> content to DOM document using SourceTransformer. Then change the attribute
> in 
> that document and put it back to the message content. That should do the 
> trick.
> 
> For details have a look at the drools engine source:
> http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-
> drools/trunk/src/main/java/org/apache/servicemix/drools/
> 
> Regards
> Lars
> 
> 
> Am Donnerstag 23 Oktober 2008 14:11:25 schrieb ObjectOrange:
>> Thx Lars!
>>
>> So, code and load a new 'helper' class that provides a setXMLAttribute()
>> method?
>>
>> Does using these 'helper' classes interfere with the BRMS web application
>> in managing the DRL files?
>>
>> lhe77 wrote:
>> > Brian,
>> >
>> > of course you can change the content of the message. Just retrieve the
>> > MessageExchange's InMsg (Normalized Message) and use getContent() to
>> get
>> > the
>> > content of the message.
>> > Useful class here to convert the content to DOM document or String is
>> the
>> > SourceTransformer class.
>> >
>> > Regards
>> > Lars
>> >
>> > Am Mittwoch 22 Oktober 2008 18:15:36 schrieb ObjectOrange:
>> >> Hello,
>> >>
>> >> I've noticed in the examples for this component the use of XPath for
>> >> condition evaluation. Is there a way to update the XML within a
>> >> Normalized
>> >> Message perhaps setting an XML attribute to a new value using the
>> >> current code or would this be a new feature?
>> >>
>> >> Thx!
>> >>
>> >> Brian
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/ServiceMix-Drools-SE%3A-XPath-XML-Attribute-Updates-Support-tp20114382p20131806.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: ServiceMix Drools SE: XPath XML Attribute Updates Support

Posted by Lars Heinemann <la...@compart.net>.
Brian,

actually you can have to logic in your drl file.
Just get the internal NormalizedMessage of the exchange and convert the 
content to DOM document using SourceTransformer. Then change the attribute in 
that document and put it back to the message content. That should do the 
trick.

For details have a look at the drools engine source:
http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-
drools/trunk/src/main/java/org/apache/servicemix/drools/

Regards
Lars


Am Donnerstag 23 Oktober 2008 14:11:25 schrieb ObjectOrange:
> Thx Lars!
>
> So, code and load a new 'helper' class that provides a setXMLAttribute()
> method?
>
> Does using these 'helper' classes interfere with the BRMS web application
> in managing the DRL files?
>
> lhe77 wrote:
> > Brian,
> >
> > of course you can change the content of the message. Just retrieve the
> > MessageExchange's InMsg (Normalized Message) and use getContent() to get
> > the
> > content of the message.
> > Useful class here to convert the content to DOM document or String is the
> > SourceTransformer class.
> >
> > Regards
> > Lars
> >
> > Am Mittwoch 22 Oktober 2008 18:15:36 schrieb ObjectOrange:
> >> Hello,
> >>
> >> I've noticed in the examples for this component the use of XPath for
> >> condition evaluation. Is there a way to update the XML within a
> >> Normalized
> >> Message perhaps setting an XML attribute to a new value using the
> >> current code or would this be a new feature?
> >>
> >> Thx!
> >>
> >> Brian


Re: ServiceMix Drools SE: XPath XML Attribute Updates Support

Posted by ObjectOrange <br...@softechnics.com>.
Thx Lars!

So, code and load a new 'helper' class that provides a setXMLAttribute()
method? 

Does using these 'helper' classes interfere with the BRMS web application in
managing the DRL files?


lhe77 wrote:
> 
> Brian,
> 
> of course you can change the content of the message. Just retrieve the 
> MessageExchange's InMsg (Normalized Message) and use getContent() to get
> the 
> content of the message.
> Useful class here to convert the content to DOM document or String is the 
> SourceTransformer class.
> 
> Regards
> Lars
> 
> 
> 
> Am Mittwoch 22 Oktober 2008 18:15:36 schrieb ObjectOrange:
>> Hello,
>>
>> I've noticed in the examples for this component the use of XPath for
>> condition evaluation. Is there a way to update the XML within a
>> Normalized
>> Message perhaps setting an XML attribute to a new value using the current
>> code or would this be a new feature?
>>
>> Thx!
>>
>> Brian
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/ServiceMix-Drools-SE%3A-XPath-XML-Attribute-Updates-Support-tp20114382p20129658.html
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: ServiceMix Drools SE: XPath XML Attribute Updates Support

Posted by Lars Heinemann <la...@compart.net>.
Brian,

of course you can change the content of the message. Just retrieve the 
MessageExchange's InMsg (Normalized Message) and use getContent() to get the 
content of the message.
Useful class here to convert the content to DOM document or String is the 
SourceTransformer class.

Regards
Lars



Am Mittwoch 22 Oktober 2008 18:15:36 schrieb ObjectOrange:
> Hello,
>
> I've noticed in the examples for this component the use of XPath for
> condition evaluation. Is there a way to update the XML within a Normalized
> Message perhaps setting an XML attribute to a new value using the current
> code or would this be a new feature?
>
> Thx!
>
> Brian