Are you sure that you don't have a merge conflict in your local copy? Andreas
On Tue, Jun 23, 2009 at 15:44, Bill Harts<[email protected]> wrote: > FYI, SYNAPSE-557 did fix the problem with returning attributes. What I am > reporting here seems to be something specific to using XPATH in a Log > mediator (i.e, it works ok in the Filter mediator). > > I am trying to get the latest trunk (787669) to compile now so I can debug > it. There are 2 problems in Endpoint.java that cause it not to compile. > > [INFO] > ------------------------------------------------------------------------ > [ERROR] BUILD FAILURE > [INFO] > ------------------------------------------------------------------------ > [INFO] Compilation failure > > C:\Apache\Synapse-Trunk\modules\core\src\main\java\org\apache\synapse\endpoints\ > Endpoint.java:[39,0] <identifier> expected > > C:\Apache\Synapse-Trunk\modules\core\src\main\java\org\apache\synapse\endpoints\ > Endpoint.java:[44,54] = expected > > > [INFO] > ------------------------------------------------------------------------ > [INFO] For more information, run Maven with the -e switch > [INFO] > ------------------------------------------------------------------------ > [INFO] Total time: 3 minutes 56 seconds > [INFO] Finished at: Tue Jun 23 09:36:12 EDT 2009 > [INFO] Final Memory: 30M/63M > [INFO] > ------------------------------------------------------------------------ > C:\Apache\Synapse-Trunk> > > Bill > > On Tue, Jun 23, 2009 at 5:32 AM, Andreas Veithen <[email protected]> > wrote: >> >> Strange, this is actually a problem that should have been fixed >> recently; see SYNAPSE-557. >> >> Andreas >> >> On Mon, Jun 22, 2009 at 23:28, Bill Harts<[email protected]> 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 <[email protected]> >> > 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 <[email protected]> >> >> 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 >> >> > <[email protected]> >> >> > 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 >> >> >> <[email protected]> >> >> >> 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 >> >> >>> <[email protected]> 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<[email protected]> >> >> >>>> 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: [email protected] >> >> >>>> > For additional commands, e-mail: [email protected] >> >> >>>> > >> >> >>>> > >> >> >>>> >> >> >>>> >> >> >>>> --------------------------------------------------------------------- >> >> >>>> To unsubscribe, e-mail: [email protected] >> >> >>>> For additional commands, e-mail: [email protected] >> >> >>>> >> >> >>> >> >> >>> >> >> >>> >> >> >>> -- >> >> >>> 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: [email protected] >> >> For additional commands, e-mail: [email protected] >> >> >> > >> > >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
