channel closure on channel using SslHandler sometimes triggers IllegalReferenceCountException - ssl

I'm using Netty 4.1.58 [Update: and I also tried Netty 4.1.60]
Closing a channel that includes the SslHandler in its pipeline using the following methodology:
channel.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
Sometimes (about 10% of the time) triggers an IllegalReferenceCountException with the following stack:
io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1
at io.netty.util.internal.ReferenceCountUpdater.toLiveRealRefCnt(ReferenceCountUpdater.java:74) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.internal.ReferenceCountUpdater.release(ReferenceCountUpdater.java:138) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:100) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:88) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.ReferenceCountUtil.safeRelease(ReferenceCountUtil.java:113) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.ChannelOutboundBuffer.remove0(ChannelOutboundBuffer.java:306) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.ChannelOutboundBuffer.failFlushed(ChannelOutboundBuffer.java:660) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannel$AbstractUnsafe.closeOutboundBufferForShutdown(AbstractChannel.java:678) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannel$AbstractUnsafe.shutdownOutput(AbstractChannel.java:671) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannel$AbstractUnsafe.handleWriteError(AbstractChannel.java:963) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:943) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.epoll.AbstractEpollChannel$AbstractEpollUnsafe.flush0(AbstractEpollChannel.java:520) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:905) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.handler.ssl.SslHandler.forceFlush(SslHandler.java:2099) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.handler.ssl.SslHandler.wrapAndFlush(SslHandler.java:815) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.handler.ssl.SslHandler.flush(SslHandler.java:792) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.handler.ssl.SslHandler.flush(SslHandler.java:1953) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.handler.ssl.SslHandler.closeOutboundAndChannel(SslHandler.java:1921) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.handler.ssl.SslHandler.close(SslHandler.java:743) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannelHandlerContext.invokeClose(AbstractChannelHandlerContext.java:622) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannelHandlerContext.close(AbstractChannelHandlerContext.java:606) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannelHandlerContext.close(AbstractChannelHandlerContext.java:472) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.DefaultChannelPipeline.close(DefaultChannelPipeline.java:957) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.AbstractChannel.close(AbstractChannel.java:232) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.ChannelFutureListener$1.operationComplete(ChannelFutureListener.java:44) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.ChannelFutureListener$1.operationComplete(ChannelFutureListener.java:41) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:184) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30) ~[baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.baffle.shield.sql.mssql.ProxySession$ChannelConfiguration.close(ProxySession.java:582) ~[main/:?]
at io.baffle.shield.sql.mssql.ProxySession.release(ProxySession.java:290) ~[main/:?]
at io.baffle.shield.sql.mssql.SslUtil.lambda$configureSsl$0(SslUtil.java:248) ~[main/:?]
at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:609) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:117) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.handler.ssl.SslHandler$5.run(SslHandler.java:2079) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:384) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [baffle-client-local-shaded-INTERNAL.jar:tier0-mvp]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_252]

Related

Using XMLNamespaces in SQL Query

This is a file received from customer.
I tried everything to go over the namespace in the file.
Always getting Null value. If I remove everything after Report in the header, it works fine.
I tried WITH XMLNamespaces in many different ways without success.
Please help me having this script working:
DECLARE #data XML;
SET #data =
'<Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="Support_x0020_Contract_x0020_Estimate" xsi:schemaLocation="Support_x0020_Contract_x0020_Estimate http://iomlkfsqlp08.corp.com/ReportServer?%2FIT%20Operations%2FSupport%20Contract%20Estimate&rs%3ACommand=Render&rs%3AFormat=XML&rs%3ASessionID=t3f0mu45i0embcmvkcoardad&rc%3ASchema=True" Name="Support Contract Estimate">
<table3 textbox44="249161.2050" textbox64="249161.20500000">
<table3_Group1_Collection>
<table3_Group1 textbox38="Q.I.T. - Fer et Titane Inc. - Customer Site ID: 16849
1625 Marie-Victorin
Tracy, Quebec J3R 1M6
CANADA
(450) 746-3000
CF Agreement#: 32466
Percentage Support - Standard Support Level
Start Date: 17-Jan-2021 - End Date: 16-Jan-2022
">
<Detail_Collection>
<Detail textbox42="Q.I.T. - Fer et Titane Inc. - Customer Site ID: 16849
1625 Marie-Victorin
Tracy, Quebec J3R 1M6
CANADA
(450) 746-3000
CF Agreement#: 32466
Percentage Support - Standard Support Level
Start Date: 17-Jan-2021 - End Date: 16-Jan-2022
" />
<Detail textbox42="CF Agreement Net Price" textbox46="245523.4050" textbox63="245523.40500000" />
</Detail_Collection>
</table3_Group1>
</table3_Group1_Collection>
</table3>
<table5>
<table4_Group3_Collection>
<table4_Group3 pricingresult1="Q.I.T. - Fer et Titane Inc. - Customer Site ID: 16849
1625 Marie-Victorin
Tracy, Quebec J3R 1M6
CANADA
(450) 746-3000
CF Agreement#: 32466
Percentage Support - Standard Support Level
Start Date: 17-Jan-2021 - End Date: 16-Jan-2022
" Textbox11="1 USD:
1.0000 USD" textbox72="2403700.0000" Textbox135="245523.4050" Textbox18="245523.40500000">
<table4_Group4_Collection>
<table4_Group4 textbox68="CF-STANDRD-R-HST" textbox69="772685.0000" pricingmethodtiermultiplier="0.17" Textbox104="131356.45" renewalvolumediscount="0.399999999999999" Textbox112="78813.8700000001" Textbox17="78813.8700000001" />
<table4_Group4 textbox68="CF-STANDRD-R-MES" textbox69="10485.0000" pricingmethodtiermultiplier="0.225" Textbox104="2359.125" renewalvolumediscount="0.4" Textbox112="1415.475" Textbox17="1415.475" />
<table4_Group4 textbox68="CF-STANDRD-R-WW" textbox69="1620530.0000" pricingmethodtiermultiplier="0.170000000000001" Textbox104="275490.100000002" renewalvolumediscount="0.400000000000004" Textbox112="165294.06" Textbox17="165294.06" />
</table4_Group4_Collection>
<table4>
<table4_Group2_Collection>
<table4_Group2>
<table4_Group1_Collection>
<table4_Group1>
<Detail_Collection>
<Detail textbox15="Renewal Volume Discount (40.00%)" textbox16="-163682.2700" Textbox61="-163682.27000000" />
</Detail_Collection>
</table4_Group1>
<table4_Group1>
<Detail_Collection>
<Detail textbox15="CF Agreement Net Price" textbox16="245523.4050" Textbox61="245523.40500000" />
</Detail_Collection>
</table4_Group1>
<table4_Group1>
<Detail_Collection>
<Detail textbox15="Cost to upgrade to Premium ($43,235.15)" textbox16="288758.5500" Textbox61="288758.55000000" />
<Detail textbox15="Cost to upgrade to Elite ($86,501.75)" textbox16="332025.1500" Textbox61="332025.15000000" />
</Detail_Collection>
</table4_Group1>
</table4_Group1_Collection>
</table4_Group2>
</table4_Group2_Collection>
</table4>
<table6 Textbox9="3RD PARTY PRODUCT FOR CUSTOMER SITE ID: 16849">
<table4_Group5_Collection>
<table4_Group5 Textbox12="1 USD:
1.0000 USD" textbox76="20210.0000" Textbox116="3637.8000" Textbox20="3637.80000000">
<table4_Group6_Collection>
<table4_Group6 textbox73="10-7008R" textbox74="20210.0000" pricingmethodtiermultiplier2="0.18" Textbox107="3637.8" renewalvolumediscount2="0" Textbox115="3637.8" Textbox19="3637.8" />
</table4_Group6_Collection>
</table4_Group5>
</table4_Group5_Collection>
</table6>
</table4_Group3>
</table4_Group3_Collection>
</table5>
<table2 />
<table1>
<table1_Group1_Collection>
<table1_Group1 textbox7="PRICING DETAIL BY LICENSE FOR CUSTOMER SITE ID: 16849 - CFA#: 32466" textbox3="1 USD:
1.0000 USD" listprice_csequiv_1="2423910.0000" textbox4="2423910.00000000">
<Detail_Collection>
<Detail sw_ser_no="408997-13" sw_sell_part_no="InTch-06-C-20" sw_part_desc="UpgC, InTouch HMI 2020 Wrkst 60000 Tag with I/O" numofconcurusers="1" listprice_csequiv="6490.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-11-25T07:45:26.6" pricingvalue="6490.00000000" />
<Detail sw_ser_no="408998-13" sw_sell_part_no="InTch-06-C-20" sw_part_desc="UpgC, InTouch HMI 2020 Wrkst 60000 Tag with I/O" numofconcurusers="1" listprice_csequiv="6490.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-11-25T07:45:26.66" pricingvalue="6490.00000000" />
<Detail sw_ser_no="408999-13" sw_sell_part_no="InTch-06-C-20" sw_part_desc="UpgC, InTouch HMI 2020 Wrkst 60000 Tag with I/O" numofconcurusers="1" listprice_csequiv="6490.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-11-25T07:45:26.72" pricingvalue="6490.00000000" />
<Detail sw_ser_no="409000-13" sw_sell_part_no="InTch-06-C-20" sw_part_desc="UpgC, InTouch HMI 2020 Wrkst 60000 Tag with I/O" numofconcurusers="1" listprice_csequiv="6490.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-11-25T07:45:26.783" pricingvalue="6490.00000000" />
<Detail sw_ser_no="416268-14" sw_sell_part_no="InTDev-01-C-20" sw_part_desc="UpgC, Dev Studio 2020 Limited InTouch Dev/RT 64Tag" numofconcurusers="1" listprice_csequiv="940.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-07-30T07:31:46.553" pricingvalue="940.00000000" />
</Detail_Collection>
</table1_Group1>
</table1_Group1_Collection>
</table1>
</Report>';
---WITH XMLNAMESPACES (DEFAULT'xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance')
SELECT #data.value('(Report/table1/table1_Group1_Collection/table1_Group1/Detail_Collection/Detail/#sw_ser_no)[1]', 'nvarchar(50)') as sw_ser_no
Your default namespace is 'Support_x0020_Contract_x0020_Estimate'
DECLARE #data XML;
SET #data =
'<Report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="Support_x0020_Contract_x0020_Estimate" xsi:schemaLocation="Support_x0020_Contract_x0020_Estimate http://iomlkfsqlp08.corp.com/ReportServer?%2FIT%20Operations%2FSupport%20Contract%20Estimate&rs%3ACommand=Render&rs%3AFormat=XML&rs%3ASessionID=t3f0mu45i0embcmvkcoardad&rc%3ASchema=True" Name="Support Contract Estimate">
<table3 textbox44="249161.2050" textbox64="249161.20500000">
<table3_Group1_Collection>
<table3_Group1 textbox38="Q.I.T. - Fer et Titane Inc. - Customer Site ID: 16849
1625 Marie-Victorin
Tracy, Quebec J3R 1M6
CANADA
(450) 746-3000
CF Agreement#: 32466
Percentage Support - Standard Support Level
Start Date: 17-Jan-2021 - End Date: 16-Jan-2022
">
<Detail_Collection>
<Detail textbox42="Q.I.T. - Fer et Titane Inc. - Customer Site ID: 16849
1625 Marie-Victorin
Tracy, Quebec J3R 1M6
CANADA
(450) 746-3000
CF Agreement#: 32466
Percentage Support - Standard Support Level
Start Date: 17-Jan-2021 - End Date: 16-Jan-2022
" />
<Detail textbox42="CF Agreement Net Price" textbox46="245523.4050" textbox63="245523.40500000" />
</Detail_Collection>
</table3_Group1>
</table3_Group1_Collection>
</table3>
<table5>
<table4_Group3_Collection>
<table4_Group3 pricingresult1="Q.I.T. - Fer et Titane Inc. - Customer Site ID: 16849
1625 Marie-Victorin
Tracy, Quebec J3R 1M6
CANADA
(450) 746-3000
CF Agreement#: 32466
Percentage Support - Standard Support Level
Start Date: 17-Jan-2021 - End Date: 16-Jan-2022
" Textbox11="1 USD:
1.0000 USD" textbox72="2403700.0000" Textbox135="245523.4050" Textbox18="245523.40500000">
<table4_Group4_Collection>
<table4_Group4 textbox68="CF-STANDRD-R-HST" textbox69="772685.0000" pricingmethodtiermultiplier="0.17" Textbox104="131356.45" renewalvolumediscount="0.399999999999999" Textbox112="78813.8700000001" Textbox17="78813.8700000001" />
<table4_Group4 textbox68="CF-STANDRD-R-MES" textbox69="10485.0000" pricingmethodtiermultiplier="0.225" Textbox104="2359.125" renewalvolumediscount="0.4" Textbox112="1415.475" Textbox17="1415.475" />
<table4_Group4 textbox68="CF-STANDRD-R-WW" textbox69="1620530.0000" pricingmethodtiermultiplier="0.170000000000001" Textbox104="275490.100000002" renewalvolumediscount="0.400000000000004" Textbox112="165294.06" Textbox17="165294.06" />
</table4_Group4_Collection>
<table4>
<table4_Group2_Collection>
<table4_Group2>
<table4_Group1_Collection>
<table4_Group1>
<Detail_Collection>
<Detail textbox15="Renewal Volume Discount (40.00%)" textbox16="-163682.2700" Textbox61="-163682.27000000" />
</Detail_Collection>
</table4_Group1>
<table4_Group1>
<Detail_Collection>
<Detail textbox15="CF Agreement Net Price" textbox16="245523.4050" Textbox61="245523.40500000" />
</Detail_Collection>
</table4_Group1>
<table4_Group1>
<Detail_Collection>
<Detail textbox15="Cost to upgrade to Premium ($43,235.15)" textbox16="288758.5500" Textbox61="288758.55000000" />
<Detail textbox15="Cost to upgrade to Elite ($86,501.75)" textbox16="332025.1500" Textbox61="332025.15000000" />
</Detail_Collection>
</table4_Group1>
</table4_Group1_Collection>
</table4_Group2>
</table4_Group2_Collection>
</table4>
<table6 Textbox9="3RD PARTY PRODUCT FOR CUSTOMER SITE ID: 16849">
<table4_Group5_Collection>
<table4_Group5 Textbox12="1 USD:
1.0000 USD" textbox76="20210.0000" Textbox116="3637.8000" Textbox20="3637.80000000">
<table4_Group6_Collection>
<table4_Group6 textbox73="10-7008R" textbox74="20210.0000" pricingmethodtiermultiplier2="0.18" Textbox107="3637.8" renewalvolumediscount2="0" Textbox115="3637.8" Textbox19="3637.8" />
</table4_Group6_Collection>
</table4_Group5>
</table4_Group5_Collection>
</table6>
</table4_Group3>
</table4_Group3_Collection>
</table5>
<table2 />
<table1>
<table1_Group1_Collection>
<table1_Group1 textbox7="PRICING DETAIL BY LICENSE FOR CUSTOMER SITE ID: 16849 - CFA#: 32466" textbox3="1 USD:
1.0000 USD" listprice_csequiv_1="2423910.0000" textbox4="2423910.00000000">
<Detail_Collection>
<Detail sw_ser_no="408997-13" sw_sell_part_no="InTch-06-C-20" sw_part_desc="UpgC, InTouch HMI 2020 Wrkst 60000 Tag with I/O" numofconcurusers="1" listprice_csequiv="6490.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-11-25T07:45:26.6" pricingvalue="6490.00000000" />
<Detail sw_ser_no="408998-13" sw_sell_part_no="InTch-06-C-20" sw_part_desc="UpgC, InTouch HMI 2020 Wrkst 60000 Tag with I/O" numofconcurusers="1" listprice_csequiv="6490.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-11-25T07:45:26.66" pricingvalue="6490.00000000" />
<Detail sw_ser_no="408999-13" sw_sell_part_no="InTch-06-C-20" sw_part_desc="UpgC, InTouch HMI 2020 Wrkst 60000 Tag with I/O" numofconcurusers="1" listprice_csequiv="6490.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-11-25T07:45:26.72" pricingvalue="6490.00000000" />
<Detail sw_ser_no="409000-13" sw_sell_part_no="InTch-06-C-20" sw_part_desc="UpgC, InTouch HMI 2020 Wrkst 60000 Tag with I/O" numofconcurusers="1" listprice_csequiv="6490.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-11-25T07:45:26.783" pricingvalue="6490.00000000" />
<Detail sw_ser_no="416268-14" sw_sell_part_no="InTDev-01-C-20" sw_part_desc="UpgC, Dev Studio 2020 Limited InTouch Dev/RT 64Tag" numofconcurusers="1" listprice_csequiv="940.0000" pricingmethodid2="WW HMI SCADA" intropricingflag="No" create_date="2020-07-30T07:31:46.553" pricingvalue="940.00000000" />
</Detail_Collection>
</table1_Group1>
</table1_Group1_Collection>
</table1>
</Report>';
WITH XMLNAMESPACES (DEFAULT 'Support_x0020_Contract_x0020_Estimate')
SELECT #data.value('(Report/table1/table1_Group1_Collection/table1_Group1/Detail_Collection/Detail/#sw_ser_no)[1]', 'nvarchar(50)') as sw_ser_no
Returns
sw_ser_no
408997-13
Edit
Extract all items as nodes:
...
SELECT t.n.value('(#sw_ser_no)[1]', 'nvarchar(50)') as sw_ser_no
FROM #data.nodes('Report/table1/table1_Group1_Collection/table1_Group1/Detail_Collection/Detail') t(n)

Site Map issue with format in VB 2010

<siteMapNode url="Customer support.aspx" title="Customer support" description=""/>
<siteMapNode url="ProductRegistration.aspx" title="Register products" description=""/>
<siteMapNode url="CustomerSurvey.aspx" title="Complete customer survey" description=""/>
<siteMapNode url="ContactUs.aspx" title="Contact us" description=""/>
<siteMapNode url="TechnicianSupport.aspx" title="Technician support" description=""/>
<siteMapNode url="CustomerIncidentDisplay.aspx" title="Display customer incidents" description=""/>
<siteMapNode url="IncidentUpdate.aspx" title="Update incidents" description="">
</siteMapNode>
<siteMapNode url="Administration.aspx" title="Administration" description=""/>
<siteMapNode url="ProductMaintenance.aspx" title="Maintain products" description=""/>
<siteMapNode url="CustomerMaintenance.aspx" title="Maintain customers" description=""/>
<siteMapNode url="TechnicianMaintenance.aspx" title="Maintain technicians" description=""/>
<siteMapNode url="IncidentCreation.aspx" title="Create incidents" description=""/>
<siteMapNode url="TechnicianIncidentSummary.aspx" title="Display techninican incidents" description=""/>
<siteMapNode url="IncidentAssignment.aspx" title="Assign incidents" description=""/>
<siteMapNode url="IncidentDisplay.aspx" title="Display incidents" description=""/>
<siteMapNode url="CustomerDisplay.aspx" title="Display customers" description=""/>
<siteMapNode url="Map.aspx" title="Site Map" description="">
</siteMapNode>
It doesn't turn out exactly right... When I add a TreeView to my Map.aspx webpage It shows Home as the only Parent Node. Home should be the main with Customer Support, Technician support, and administration as the next head nodes then all others under that.
Does this make sense?
Home is the root node that all the other nodes are under.
I've never used the TreeView personally, but when I used a SiteMapDataSource to build a navigation menu, I set ShowStartingNode="false" to skip the root node.

Primefaces <p:fileUpload> component stops working

I've been working on this for a while and I managed to make this component work perfectly like this:
<h:form enctype="multipart/form-data">
<p:panelGrid columns="2">
<p:outputLabel value="Nombre:" for="nombre"/>
<p:inputText id="nombre" value="# {controladorProducto.producto.nombre}"/>
<p:outputLabel value="Descripción" for="descripcion"/>
<p:inputText id="descripcion" value="#{controladorProducto.producto.descripcion}"/>
<p:outputLabel value="Precio" for="precio"/>
<p:inputText id="precio" value="#{controladorProducto.producto.precio}"/>
<p:fileUpload id="fileuploader" value="#{controladorProducto.uploadedFile}"
mode="simple" />
<p:commandButton id="boton_cargar" value="Cargar" actionListener="#{controladorProducto.handleProductImageUpload}"
update="fotoProducto" ajax="true"/>
<p:outputLabel value="Imagen:" for="fotoProducto"/>
<p:graphicImage id="fotoProducto" value="#{controladorProducto.producto.imageToShow}"/>
<p:commandButton value="Insertar" action="#{controladorProducto.insertarProducto()}"/>
</p:panelGrid>
</h:form>
So as soon as I add any UI Component (you know, templates) it stops working. Here is the form with the template codes:
<ui:define name="top">
<h1>Buscador Clientes</h1>
<h:form id="form_growl">
<p:growl showDetail="false" />
</h:form>
</ui:define>
<ui:define name="left">
<h:form>
<p:menubar>
<p:menuitem value="Clientes" action="#{controladorCliente.buscarTodosClientes}" />
<p:separator/>
<p:menuitem value="Productos" action="#{controladorProducto.buscarTodosProductos}"/>
<p:separator/>
<p:menuitem value="Pedidos" url="#"/>
</p:menubar>
</h:form>
</ui:define>
<ui:define name ="content">
<h:form enctype="multipart/form-data">
<p:panelGrid columns="2">
<p:outputLabel value="Nombre:" for="nombre"/>
<p:inputText id="nombre" value="#{controladorProducto.producto.nombre}"/>
<p:outputLabel value="Descripción" for="descripcion"/>
<p:inputText id="descripcion" value="#{controladorProducto.producto.descripcion}"/>
<p:outputLabel value="Precio" for="precio"/>
<p:inputText id="precio" value="#{controladorProducto.producto.precio}"/>
<p:fileUpload id="fileuploader" value="#{controladorProducto.uploadedFile}"
mode="simple" />
<p:commandButton id="boton_cargar" value="Cargar" actionListener="#{controladorProducto.handleProductImageUpload}"
update="fotoProducto" ajax="true"/>
<p:outputLabel value="Imagen:" for="fotoProducto"/>
<p:graphicImage id="fotoProducto" value="#{controladorProducto.producto.imageToShow}"/>
<p:commandButton value="Insertar" action="#{controladorProducto.insertarProducto()}"/>
</p:panelGrid>
</h:form>
</ui:define>
</ui:composition>
Is there any problem, I've used the same template in other places of my project and it worked fine, its just here where it crashes. I get a NullPointerException and when i Debug it It didnt even call the bean.
At this point I´ve been looking around the Internet and I've not found anything.
Does anybody has any idea of why it doesnt works?
By the way, Im using NetBeans 7.3, GlassFish 3.1.2, Primefaces 3.5, JSF 2.1....
I hope someone answers me, I'd appreciate any help or clue on this.
This is the Error trace I get:
SEVERE: Se ha recibido 'java.lang.NullPointerException' al invocar la escucha de acción '#{controladorProducto.handleProductImageUpload}' para el componente 'boton_cargar'
SEVERE: java.lang.NullPointerException
at Controlador.ControladorProducto.handleProductImageUpload(ControladorProducto.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.el.parser.AstValue.invoke(AstValue.java:254)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
SEVERE: JSF1073: se ha interceptado javax.faces.event.AbortProcessingException durante el procesamiento de INVOKE_APPLICATION 5 : UIComponent-ClientId=j_idt22:boton_cargar, Mensaje=java.lang.NullPointerException
SEVERE: java.lang.NullPointerException
javax.faces.event.AbortProcessingException: java.lang.NullPointerException
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
at Controlador.ControladorProducto.handleProductImageUpload(ControladorProducto.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.sun.el.parser.AstValue.invoke(AstValue.java:254)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
... 38 more

Grouping nested elements in xslt 1.0

I've been looking at examples of Muenchian grouping in XSLT 1.0, specifically this example here. However I'm unable to get it working on a more complex XML structure.
My XML currently looks like this:
<?xml version="1.0" encoding="utf-8"?>
<ContestResults>
<Contests>
<Contest sportId="35">
<Sport>Beach Volleyball</Sport>
<Event>Men's</Event>
<Ranks>
<Rank position="1" eventId="1">
<Athlete>Athlete 1a / Athlete 2a [GER]</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="1">
<Athlete>Athlete 1b / Athlete 2b [NED]</Athlete>
<Result>0</Result>
</Rank>
</Ranks>
</Contest>
<Contest sportId="32">
<Sport>Tennis</Sport>
<Event>Women's Singles</Event>
<Ranks>
<Rank position="1" eventId="2">
<Athlete>Tennis Athlete 1</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="2">
<Athlete>Tennis Athlete 2</Athlete>
<Result>1</Result>
</Rank>
</Ranks>
</Contest>
<Contest sportId="35">
<Sport>Beach Volleyball</Sport>
<Event>Men's</Event>
<Ranks>
<Rank position="1" eventId="3">
<Athlete>Athlete 3a / Athlete 4a [AUT]</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="3">
<Athlete>Athlete 3b / Athlete 4b [SUI]</Athlete>
<Result>0</Result>
</Rank>
</Ranks>
</Contest>
</Contests>
</ContestResults>
However I want to group the Rank nodes under the same Ranks parent when they have the same Sport and Event. So I want the result to look like this:
<?xml version="1.0" encoding="utf-8"?>
<ContestResults>
<Contests>
<Contest sportId="35">
<Sport>Beach Volleyball</Sport>
<Event>Men's</Event>
<Ranks>
<Rank position="1" eventId="1">
<Athlete>Athlete 1a / Athlete 2a [GER]</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="1">
<Athlete>Athlete 1b / Athlete 2b [NED]</Athlete>
<Result>0</Result>
</Rank>
<Rank position="1" eventId="3">
<Athlete>Athlete 3a / Athlete 4a [AUT]</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="3">
<Athlete>Athlete 3b / Athlete 4b [SUI]</Athlete>
<Result>0</Result>
</Rank>
</Ranks>
</Contest>
<Contest sportId="32">
<Sport>Tennis</Sport>
<Event>Women's Singles</Event>
<Ranks>
<Rank position="1" eventId="2">
<Athlete>Tennis Athlete 1</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="2">
<Athlete>Tennis Athlete 2</Athlete>
<Result>1</Result>
</Rank>
</Ranks>
</Contest>
</Contests>
</ContestResults>
I'm just a little lost how to do this as the only other examples are dealing with a much simpler structure and I'm not sure if it's possible or how my key and templates need to be structured to do this. Can anyone provide some examples how this might be achieved?
Any advice would be appreciated.
This transformation:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="kContestById" match="Contest" use="#sportId"/>
<xsl:template match="node()|#*">
<xsl:copy>
<xsl:apply-templates select="node()|#*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Contests">
<Contests>
<xsl:apply-templates/>
</Contests>
</xsl:template>
<xsl:template match=
"Contest
[not(generate-id()
=
generate-id(key('kContestById', #sportId)[1]))
]"/>
<xsl:template match="Ranks">
<Ranks>
<xsl:apply-templates select="key('kContestById', ../#sportId)/Ranks/Rank"/>
</Ranks>
</xsl:template>
</xsl:stylesheet>
when applied on the provided XML document:
<ContestResults>
<Contests>
<Contest sportId="35">
<Sport>Beach Volleyball</Sport>
<Event>Men's</Event>
<Ranks>
<Rank position="1" eventId="1">
<Athlete>Athlete 1a / Athlete 2a [GER]</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="1">
<Athlete>Athlete 1b / Athlete 2b [NED]</Athlete>
<Result>0</Result>
</Rank>
</Ranks>
</Contest>
<Contest sportId="32">
<Sport>Tennis</Sport>
<Event>Women's Singles</Event>
<Ranks>
<Rank position="1" eventId="2">
<Athlete>Tennis Athlete 1</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="2">
<Athlete>Tennis Athlete 2</Athlete>
<Result>1</Result>
</Rank>
</Ranks>
</Contest>
<Contest sportId="35">
<Sport>Beach Volleyball</Sport>
<Event>Men's</Event>
<Ranks>
<Rank position="1" eventId="3">
<Athlete>Athlete 3a / Athlete 4a [AUT]</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="3">
<Athlete>Athlete 3b / Athlete 4b [SUI]</Athlete>
<Result>0</Result>
</Rank>
</Ranks>
</Contest>
</Contests>
</ContestResults>
produces the wanted, correct result:
<ContestResults>
<Contests>
<Contest sportId="35">
<Sport>Beach Volleyball</Sport>
<Event>Men's</Event>
<Ranks>
<Rank position="1" eventId="1">
<Athlete>Athlete 1a / Athlete 2a [GER]</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="1">
<Athlete>Athlete 1b / Athlete 2b [NED]</Athlete>
<Result>0</Result>
</Rank>
<Rank position="1" eventId="3">
<Athlete>Athlete 3a / Athlete 4a [AUT]</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="3">
<Athlete>Athlete 3b / Athlete 4b [SUI]</Athlete>
<Result>0</Result>
</Rank>
</Ranks>
</Contest>
<Contest sportId="32">
<Sport>Tennis</Sport>
<Event>Women's Singles</Event>
<Ranks>
<Rank position="1" eventId="2">
<Athlete>Tennis Athlete 1</Athlete>
<Result>2</Result>
</Rank>
<Rank position="2" eventId="2">
<Athlete>Tennis Athlete 2</Athlete>
<Result>1</Result>
</Rank>
</Ranks>
</Contest>
</Contests>
</ContestResults>
Explanation:
Proper use of the Muenchian grouping method and overriding the identity rule.

sharepoint 2010 sitemap duplicate node urls

Is there any way at all to disable a link on a node?
For example, I would like to disable the "Dashboards" menu item/node, ie, clicking on it on the site will do nothing.
Is this possible?
thanks,
KS
<?xml version="1.0" encoding="utf-8" ?>
<siteMap>
<siteMapNode title="" url="">
<siteMapNode title="BI Home" url="/Home.aspx"/>
<siteMapNode title="Scorecards" url="/Scorecards.aspx">
<siteMapNode title="Performance Scorecard" url="/Perfomance-Card.aspx"/>
<siteMapNode title="Quality Scorecard" url="/Quality-Card.aspx"/>
<siteMapNode title="Service Scorecard" url="/Service-Card.aspx"/>
<siteMapNode title="Financial Operations Scorecard" url="/FinancialOps-Card.aspx"/>
</siteMapNode>
<siteMapNode title="Dashboards">
<siteMapNode title="Executive Dashboard" url="/Executive-Dash.aspx"/>
<siteMapNode title="Operational Scorecard" url="/Operational-Card.aspx"/>
</siteMapNode>
<siteMapNode title="Manual Entry">
<siteMapNode title="Labor Hours" url="/Labor-Hours.aspx"/>
<siteMapNode title="Lost Time Accidents" url="/Lost-Time-Accidents.aspx"/>
<siteMapNode title="Action Items" url="/Action-Items.aspx"/>
</siteMapNode>
<siteMapNode title="Reports" url="/Reports.aspx"/>
</siteMapNode>
</siteMap>
Ok, so I settled for second best. What is second best?
Well, I set the main menu item to the same url as the first option beneath it.
But you cannot have duplicate urls in the sitemap nodes I hear you say!
Bypassed this by appending a querystring parameter to the end of the url.
I changed dashboards like so:
<siteMapNode title="Dashboards" url="/Executive-Dash.aspx?S=1"/>
Not very elegant but it is acceptable for my sce