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.

Reply via email to