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]

Reply via email to