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/ns1 >>: >>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/ns >>>1 >>>:hasMore/text()")) >>> .setHeader("recordsReturned", >>>ns.xpath("/soapenv:Envelope/soapenv:Body/ns1:getItemsResponse/ns1:out/ns >>>1 >>>:recordsReturned/text()")) >>> .setHeader("totalRecordsAvailable", >>>ns.xpath("/soapenv:Envelope/soapenv:Body/ns1:getItemsResponse/ns1:out/ns >>>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('Savi >>>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('totalR >>>e >>>cordsAvailable')) - >>>parseInt(request.headers.get('StartIndex'))).toFixed()") >>> .endChoice() >>> .wireTap("seda:CreateMessage") >>> .endChoice() >>> .split() >>> .tokenizeXML("ns1:items") >>> .parallelProcessing() >>> .streaming() >>> .to("jms:queue:Split") >> >> >> >> > >
