I will try to debug it today. Bill On Tue, Jun 23, 2009 at 1:07 AM, indika kumara <indika.k...@gmail.com>wrote:
> 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 >>>> >>>> >>> >> >