But bill my change only with resources picked from the registry. This issue
seems with XPath on Payload ...It is impossible to correlate those two .
Could you re-check please?

On Tue, Jun 23, 2009 at 10:34 AM, indika kumara <indika.k...@gmail.com>wrote:

>
> Bill I will check .. Thanks for pointing out issue .
>
> Thanks
> Inidka
>
> On Tue, Jun 23, 2009 at 2:58 AM, Bill Harts <prgt...@gmail.com> wrote:
>
>> Hi Guys:
>>
>> I'm not sure but I believe something has broken with using xpath
>> expressions in a log mediator possibly related to your recent changes.  I
>> think this was working until I downloaded yesterday's snapshot I was using a
>> 3-week old snapshot).
>>
>> Here's the code from my my mediator file:
>>
>> <!-- If there's a sessionID attribute in the message this must be a response 
>> to a Login -->
>> <filter 
>> xpath="boolean(//cfl:LoginResponse/cfl:LoginResponseData/@sessionID)" 
>> xmlns:cfl="http://www.harts.com/cfl"; >
>>
>>      <log level="custom">
>>
>>          <property name="sessID" 
>> expression="//cfl:LoginResponse/cfl:LoginResponseData/@sessionID" 
>> xmlns:cfl="http://www.harts.com/cfl"/>
>>
>>      </log>
>>
>>      <!-- Other logic goes here -->
>>
>> </filter>
>>
>> It passes the filter test but the log mediator just displays "sessID=".
>> Since the expressions in the filter and log mediators are the same I don't
>> think this should happen.
>>
>> Bill
>>
>>
>> On Sun, Jun 21, 2009 at 1:11 PM, indika kumara <indika.k...@gmail.com>wrote:
>>
>>> Hi Saliya
>>>
>>> This Use case scenario is related with XPath evaluation on the
>>> resources picked from the registry. After reading the resource we
>>> close input stream as it is needed.
>>>
>>> In this use case, parent is always an OMDocument.
>>>
>>> For both following code, you get ‘org.apache.axiom.om.OMException:
>>> com.ctc.wstx.exc.WstxIOException: Stream closed’.
>>>
>>> 1)     remove result.detach()
>>>
>>> 2)     replace result.detach() with  result.build()
>>>
>>> (Please refers SimpleURLRegistry.java)
>>>
>>> Note that here ‘result = builder.getDocumentElement();’ and it is not
>>> builder.getDocument(). If It is possible to call build() method on
>>> OMDocument this issue (‘Stream closed’) may not be occurred (I didn’t
>>> look at AXIOM code).  As Andreas pointed out ‘OMDocument has no method
>>> to build the entire tree and detach() do that as a side effect”.
>>>
>>> I didn't look at deep but feel current possible solutions are what
>>> Andreas suggested.
>>>
>>> Thanks
>>> Indika
>>>
>>> On Sun, Jun 21, 2009 at 5:31 PM, Saliya Ekanayake <esal...@gmail.com>
>>> wrote:
>>> >
>>> > Hi Indika,
>>> >
>>> > I tested your point and found the cause. Simply, in the second case
>>> there is no parent for the root element. Therefore, evaluating an XPath
>>> containing <hello> element will cause an exception. But if you evaluate an
>>> XPath like, //anotherthing/insideanother, you will get the desired result.
>>> >
>>> > So the solution I would like to suggest in this case is to first check
>>> the parent of the element. If the parent is an instance of OMDocument then
>>> we need not detach (if you need to build then just use OMNode#build()). If
>>> the parent is an instance of OMElement then you need to detach since you
>>> want the element to be isolated from the connecting tree.
>>> >
>>> > Thanks,
>>> > Saliya
>>> >
>>> > On Sun, Jun 21, 2009 at 11:06 AM, indika kumara <indika.k...@gmail.com>
>>> wrote:
>>> >>
>>> >>         Hi Saliya
>>> >>
>>> >>         Following shown my scenarios.
>>> >>
>>> >>
>>> >>        Scenario 1  - without detach on root element
>>> >>
>>> >>         String str = "<hello><something>wow
>>> nice</something><anotherthing><insideanother>great</insideanother></anotherthing></hello>";
>>> >>         XMLStreamReader parser = XMLInputFactory.newInstance().
>>> >>                 createXMLStreamReader(new
>>> ByteArrayInputStream(str.getBytes()));
>>> >>         StAXOMBuilder builder = new StAXOMBuilder(parser);
>>> >>         OMElement root = builder.getDocumentElement();
>>> >> //        root.detach();
>>> >>
>>> >>         AXIOMXPath xpath = new AXIOMXPath("//hello/something");
>>> >>         OMElement node = (OMElement) xpath.selectSingleNode(root);
>>> >>         System.out.println(node == null);
>>> >>         if (node != null) {
>>> >>             System.out.println(node.getText());
>>> >>         }
>>> >>
>>> >>
>>> >>       Out put :
>>> >>
>>> >>        false
>>> >>        wow nice
>>> >>
>>> >>
>>> >>        Scenario 2 - with  detach on root element
>>> >>
>>> >>         String str = "<hello><something>wow
>>> nice</something><anotherthing><insideanother>great</insideanother></anotherthing></hello>";
>>> >>         XMLStreamReader parser = XMLInputFactory.newInstance().
>>> >>                 createXMLStreamReader(new
>>> ByteArrayInputStream(str.getBytes()));
>>> >>         StAXOMBuilder builder = new StAXOMBuilder(parser);
>>> >>         OMElement root = builder.getDocumentElement();
>>> >>         root.detach();
>>> >>
>>> >>         AXIOMXPath xpath = new AXIOMXPath("//hello/something");
>>> >>         OMElement node = (OMElement) xpath.selectSingleNode(root);
>>> >>         System.out.println(node == null);
>>> >>         if (node != null) {
>>> >>             System.out.println(node.getText());
>>> >>         }
>>> >>
>>> >>        Output
>>> >>
>>> >>        true
>>> >>
>>> >>
>>> >>    In second case , XPath  have not been evaluated correctly.
>>> >>
>>> >> Thanks
>>> >> Indika
>>> >>
>>> >> On Sat, Jun 20, 2009 at 9:40 PM, Saliya Ekanayake <esal...@gmail.com>
>>> wrote:
>>> >>>
>>> >>> Hi,
>>> >>>
>>> >>> Um, I am not really clarified with the problem here. I agree that the
>>> full tree should be built before we can evaluate XPath. Adding the element
>>> to a new OMDocument, however, just to get this done seems not right.
>>> Additionally, the original OMDocument created by the builder will be there
>>> even if you detach the element. Detach will only remove the element from the
>>> tree to which it belongs. To check this, you can get the builder from the
>>> detached element and ask for the OMDocument.  IMHO, we can call
>>> result.build() if necessary.
>>> >>>
>>> >>> Btw. I am not clear why XPath doesn't work on the detached element. I
>>> did a simple test as follows and XPath worked, may be I have missed
>>> something (please let me know if so).
>>> >>>
>>> >>>     public static void main(String[] args) throws XMLStreamException,
>>> JaxenException {
>>> >>>         String str = "<hello><something>wow
>>> nice</something><anotherthing><insideanother>great</insideanother></anotherthing></hello>";
>>> >>>         StAXOMBuilder builder = new StAXOMBuilder(new
>>> ByteArrayInputStream(str.getBytes()));
>>> >>>         OMElement root = builder.getDocumentElement();
>>> >>>
>>> >>>         OMDocument doc = builder.getDocument();
>>> >>>         System.out.println(doc == null);
>>> >>>
>>> >>>         OMElement anotherthing = root.getFirstChildWithName(new
>>> QName("anotherthing"));
>>> >>>         anotherthing.detach();
>>> >>>
>>> >>>         doc =
>>> ((StAXOMBuilder)anotherthing.getBuilder()).getDocument();
>>> >>>         System.out.println(doc == null);
>>> >>>
>>> >>>         AXIOMXPath xpath = new AXIOMXPath("//insideanother");
>>> >>>         OMElement node = (OMElement)
>>> xpath.selectSingleNode(anotherthing);
>>> >>>         System.out.println(node.getText());
>>> >>>     }
>>> >>>
>>> >>> Thanks,
>>> >>> Saliya
>>> >>>
>>> >>> On Sat, Jun 20, 2009 at 4:45 AM, Andreas Veithen <
>>> andreas.veit...@gmail.com> wrote:
>>> >>>>
>>> >>>> StAXOMBuilder actually already creates an OMDocument (which can be
>>> >>>> retrieved by the getDocument method). The important thing is that we
>>> >>>> need to make sure that the Axiom tree is fully built before closing
>>> >>>> the input stream. I guess that the detach method is used because it
>>> >>>> has the side effect of fully building the element and because
>>> >>>> OMDocument has no method to build the entire tree (see
>>> WSCOMMONS-479).
>>> >>>>
>>> >>>> This gives us two solutions:
>>> >>>>
>>> >>>> - Use StAXOMBuilder#getDocument and iterate over its children to
>>> make
>>> >>>> sure the document is fully built.
>>> >>>> - Continue to use "detach" and add the element to a new document, as
>>> >>>> you suggested. Note that you should not use OMDocumentImpl directly,
>>> >>>> but create it using the OMFactory.
>>> >>>>
>>> >>>> Andreas
>>> >>>>
>>> >>>> On Fri, Jun 19, 2009 at 09:30, indika kumara<indika.k...@gmail.com>
>>> wrote:
>>> >>>> > Devs
>>> >>>> >
>>> >>>> > $subject is due to we do  'detach()'  on picked resource OMElement
>>> .
>>> >>>> > If I add detached element to a OMDocument as a child, it works
>>> >>>> >
>>> >>>> > Existing code  SImpleURLRegistry
>>> >>>> >
>>> >>>> > result.detach();
>>> >>>> > inputStream.close();
>>> >>>> >
>>> >>>> >
>>> >>>> > Modified code
>>> >>>> >
>>> >>>> > result.detach();
>>> >>>> > OMDocumentImpl omDocument = new OMDocumentImpl();
>>> >>>> > omDocument.addChild(result);
>>> >>>> > inputStream.close();
>>> >>>> >
>>> >>>> >
>>> >>>> > Are there any best solution other than what I did ?  I haven't
>>> deep
>>> >>>> > AXIOM knowledge?  Could anyone help me?
>>> >>>> >
>>> >>>> > Thanks
>>> >>>> > Indika
>>> >>>> >
>>> >>>> >
>>> ---------------------------------------------------------------------
>>> >>>> > To unsubscribe, e-mail: dev-unsubscr...@synapse.apache.org
>>> >>>> > For additional commands, e-mail: dev-h...@synapse.apache.org
>>> >>>> >
>>> >>>> >
>>> >>>>
>>> >>>>
>>> ---------------------------------------------------------------------
>>> >>>> To unsubscribe, e-mail: dev-unsubscr...@synapse.apache.org
>>> >>>> For additional commands, e-mail: dev-h...@synapse.apache.org
>>> >>>>
>>> >>>
>>> >>>
>>> >>>
>>> >>> --
>>> >>> Saliya Ekanayake
>>> >>> http://www.esaliya.blogspot.com
>>> >>> http://www.esaliya.wordpress.com
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > Saliya Ekanayake
>>> > http://www.esaliya.blogspot.com
>>> > http://www.esaliya.wordpress.com
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@synapse.apache.org
>>> For additional commands, e-mail: dev-h...@synapse.apache.org
>>>
>>>
>>
>

Reply via email to