I take that back. It worked one time, but not the next time. However, my hack works with every run.
On 12/4/12 1:50 AM, "Jason Chaffee" <[email protected]> wrote: >If I use String.class instead of Integer.class it works. It could be an >issue with my javascript why the Integer.class didn¹t work. > > > >On 12/4/12 1:20 AM, "Jason Chaffee" <[email protected]> wrote: > >>Tried that, but for some reason it fails to give me the expected results >>as it stops processing after 18,000 records whereas my "hack" finishes >>correctly after 34254 records. >> >> >> >>On 12/3/12 11:19 PM, "Willem jiang" <[email protected]> wrote: >> >>>Hi, >>> >>>You should be able to set the xpath expression result like this >>>.setHeader("hasMore", >>>ns.xpath("/soapenv:Envelope/soapenv:Body/ns1:getItemsResponse/ns1:out/ns >>>1 >>>: >>>hasMore/text()", Integer.class)) >>> >>>The you don't need to header in you processor. >>> >>>-- >>>Willem Jiang >>> >>>Red Hat, Inc. >>>FuseSource is now part of Red Hat >>>Web: http://www.fusesource.com | http://www.redhat.com >>>Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) >>>(English) >>> http://jnn.javaeye.com (http://jnn.javaeye.com/) (Chinese) >>>Twitter: willemjiang >>>Weibo: willemjiang >>> >>> >>> >>> >>> >>>On Tuesday, December 4, 2012 at 11:00 AM, Jason Chaffee wrote: >>> >>>> Currently, I am using Xpath to read some elements from the body that >>>>are integers. Later in the process, I need to use those integers in a >>>>scripting language to do some comparisons and arithmetic. The problem I >>>>am seeing is that when I set the header it is a NodeList object instead >>>>of the integer or string from the XML, this causes the logic in the >>>>javascript to fail. I was able to work around the issue, but accessing >>>>the NodeList in a Processor and converting it and saving it back in the >>>>header. However, this seems very clunky and an extra step that I would >>>>expect to have to do. >>>> >>>> Code example is below, is there a better or cleaner way? >>>> >>>> val ns: Namespaces = new Namespaces("soapenv", >>>>"http://schemas.xmlsoap.org/soap/envelope/") >>>> ns.add("ns1", "https://foobar.com/item/v2") >>>> >>>> >>>> from("seda:Soap") >>>> .routeId("Soap") >>>> .setHeader("SOAPAction", constant("\"getItems\"")) >>>> .to("cxf://" + savingsUri.toString()) >>>> .unmarshal().string("UTF-8") >>>> .setHeader("hasMore", >>>>ns.xpath("/soapenv:Envelope/soapenv:Body/ns1:getItemsResponse/ns1:out/n >>>>s >>>>1 >>>>:hasMore/text()")) >>>> .setHeader("recordsReturned", >>>>ns.xpath("/soapenv:Envelope/soapenv:Body/ns1:getItemsResponse/ns1:out/n >>>>s >>>>1 >>>>:recordsReturned/text()")) >>>> .setHeader("totalRecordsAvailable", >>>>ns.xpath("/soapenv:Envelope/soapenv:Body/ns1:getItemsResponse/ns1:out/n >>>>s >>>>1 >>>>:totalRecordsAvailable/text()")) >>>> .process(new Processor { >>>> override def process(exchange: Exchange) { >>>> val message: Message = exchange.getIn() >>>> >>>> val hasMore: NodeList = message.getHeader("hasMore", >>>>classOf[NodeList]) >>>> message.setHeader("hasMore", hasMore.item(0).getTextContent()) >>>> >>>> val recordsReturned: NodeList = message.getHeader("recordsReturned", >>>>classOf[NodeList]) >>>> message.setHeader("recordsReturned", >>>>recordsReturned.item(0).getTextContent()) >>>> >>>> val totalRecordsAvailable: NodeList = >>>>message.getHeader("totalRecordsAvailable", classOf[NodeList]) >>>> message.setHeader("totalRecordsAvailable", >>>>totalRecordsAvailable.item(0).getTextContent()) >>>> } >>>> }) >>>> .choice() >>>> >>>>.when().javaScript("parseInt(request.headers.get('totalRecordsAvailable >>>>' >>>>) >>>>) > parseInt(request.headers.get('StartIndex'))") >>>> >>>>.setHeader("StartIndex").javaScript("(parseInt(request.headers.get('Sav >>>>i >>>>n >>>>gsStartIndex')) + >>>>parseInt(request.headers.get('SavingsPageSize'))).toFixed()") >>>> .choice() >>>> >>>>.when().javaScript("parseInt(request.headers.get('totalRecordsAvailable >>>>' >>>>) >>>>) - parseInt(request.headers.get('StartIndex')) < >>>>parseInt(request.headers.get('PageSize'))") >>>> >>>>.setHeader("PageSize").javaScript("(parseInt(request.headers.get('total >>>>R >>>>e >>>>cordsAvailable')) - >>>>parseInt(request.headers.get('StartIndex'))).toFixed()") >>>> .endChoice() >>>> .wireTap("seda:CreateMessage") >>>> .endChoice() >>>> .split() >>>> .tokenizeXML("ns1:items") >>>> .parallelProcessing() >>>> .streaming() >>>> .to("jms:queue:Split") >>> >>> >>> >>> >> >> > >
