Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id D1B7E200D54 for ; Fri, 8 Dec 2017 12:58:36 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id D02B5160C0D; Fri, 8 Dec 2017 11:58:36 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 5094A160BF2 for ; Fri, 8 Dec 2017 12:58:35 +0100 (CET) Received: (qmail 64683 invoked by uid 500); 8 Dec 2017 11:58:29 -0000 Mailing-List: contact taglibs-user-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tag Libraries Users List" Delivered-To: mailing list taglibs-user@tomcat.apache.org Received: (qmail 64671 invoked by uid 99); 8 Dec 2017 11:58:29 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 08 Dec 2017 11:58:29 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id B64381A0734 for ; Fri, 8 Dec 2017 11:58:28 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.898 X-Spam-Level: * X-Spam-Status: No, score=1.898 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_COUK=1.1, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id H79Ce_xcUv85 for ; Fri, 8 Dec 2017 11:58:24 +0000 (UTC) Received: from ns1.nbmlaw.co.uk (ns1.nbmlaw.co.uk [217.174.253.19]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTPS id B6C785FB16 for ; Fri, 8 Dec 2017 11:58:23 +0000 (UTC) Received: from Mac-mini-2.local (124.red-83-55-185.dynamicip.rima-tde.net [83.55.185.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by ns1.nbmlaw.co.uk (Postfix) with ESMTPSA id 8393B2C386B; Fri, 8 Dec 2017 11:58:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 ns1.nbmlaw.co.uk 8393B2C386B Authentication-Results: ns1.nbmlaw.co.uk; dmarc=fail (p=quarantine dis=none) header.from=nbmlaw.co.uk Authentication-Results: ns1.nbmlaw.co.uk; spf=fail smtp.mailfrom=matthew.broadhead@nbmlaw.co.uk Subject: Re: xalan usage in taglibs From: Matthew Broadhead To: Romain Manni-Bucau Cc: Tag Libraries Users List , Jeremy Boynes Reply-To: Tag Libraries Users List References: <66442bd7-e0db-31ec-00d3-76dd2f660b48@nbmlaw.co.uk> <0874B620-1354-45D8-8468-3C73BE493FA5@apache.org> <786191b4-42ec-2aee-1632-8444d831c4ab@nbmlaw.co.uk> <6BE4CAF3-41A1-4725-8D80-AAD26BA9C554@boynes.com> <493466c1-8c4b-fe60-2efd-e9c9e3c9ceb9@nbmlaw.co.uk> <3CADD70C-C371-48E0-81C9-0EEE7E9A0D9E@apache.org> <978AFC4F-7B5E-47A4-8DE8-D9834E6F1DA7@apache.org> <37a71a72-df57-d2c4-aab6-481cf819e95a@nbmlaw.co.uk> <9fd9d289-dc5b-dba2-fda6-ea61f4ccad5d@nbmlaw.co.uk> <09cf686c-4853-93d0-95bf-07ea541944b9@nbmlaw.co.uk> Message-ID: <6735a72e-b8d0-2db1-8dfa-b31b49b92da7@nbmlaw.co.uk> Date: Fri, 8 Dec 2017 12:58:22 +0100 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <09cf686c-4853-93d0-95bf-07ea541944b9@nbmlaw.co.uk> Content-Type: multipart/mixed; boundary="------------08DDA4133019168B3DB4F9BE" Content-Language: en-US archived-at: Fri, 08 Dec 2017 11:58:37 -0000 --------------08DDA4133019168B3DB4F9BE Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit here is a patch which removes the xalan dependency.  but it breaks the ForEachTagTest. i notice that every constructor generates a JSTLXPathCompiler. could it not be a singleton? On 07/12/2017 15:08, Matthew Broadhead wrote: > is there any other way to rewrite it so that it doesn't use > DTMManager?  that would also keep the speed?  is it a matter of > keeping the object in memory so that it doesn't have to keep building > fragments? > also could i build the old version that doesn't need DTMManager and > drop it in my system to see what effect it has? > > On 06/12/2017 14:30, Romain Manni-Bucau wrote: >> requires a classloader hack, no other trivial way, and that's why we >> removed it from tomee >> >> 2017-12-06 14:27 GMT+01:00 Matthew Broadhead >> : >>> is there any way that i can get the correct xalan at runtime? >>> >>> to recap this is the code that is blowing up for me: >>> Reader xsl = new InputStreamReader(filepath.openStream()); >>> TransformerFactory transformerfactory = >>> TransformerFactory.newInstance(); >>> StreamSource ssXsl = new StreamSource(xsl); >>> ssXsl.setSystemId(filepath.toExternalForm()); >>> Templates templates = transformerfactory.newTemplates(ssXsl); >>> Transformer transformer = templates.newTransformer(); >>> >>> last line causes: >>> java.lang.ClassCastException: org.apache.xml.dtm.ref.DTMManagerDefault >>> cannot be cast to org.apache.xml.dtm.DTMManager >>>      at org.apache.xml.dtm.DTMManager.newInstance(DTMManager.java:137) >>>      at org.apache.xpath.XPathContext.(XPathContext.java:102) >>>      at org.apache.xpath.XPathContext.(XPathContext.java:349) >>>      at org.apache.xpath.XPathContext.(XPathContext.java:337) >>>      at >>> org.apache.xalan.transformer.TransformerImpl.(TransformerImpl.java:397) >>> >>>      at >>> org.apache.xalan.templates.StylesheetRoot.newTransformer(StylesheetRoot.java:200) >>> >>> >>> maybe you know some way to find the Impl with the correct DTMManager? >>> >>> >>> On 30/11/2017 17:30, Romain Manni-Bucau wrote: >>>> 2017-11-30 16:51 GMT+01:00 Jeremy Boynes : >>>>>> On Nov 30, 2017, at 3:14 AM, Matthew Broadhead >>>>>> wrote: >>>>>> >>>>>> has anything been decided?  if i try to redeploy a context in >>>>>> production >>>>>> all my xslt processors blow up.  there should be a solution that >>>>>> fits all? >>>>> Taglibs (both Apache and Glassfish) has always had a dependency on >>>>> Xalan. >>>>> My understanding is that TomEE did not include it and so broke >>>>> users that >>>>> use the XML tags. If so, TomEE should fix that. >>>> Sadly this is not a bug on tomee but the best solution we went through >>>> after having delivered xalan for some releases. Xalan dependency >>>> breaks 80% of apps so no way to include it - and this is the issue of >>>> Matthew. Note it also affects simple apps in tomcat including taglib >>>> and other libs. >>>> >>>>> You can probably add Xalan to your TomEE installation somehow to work >>>>> around it but how to do that is really a question for the TomEE >>>>> users list. >>>>> >>>>> A patch for Taglibs that removes the Xalan dependency and doesn't >>>>> regress >>>>> the #27717 performance fix would be great. A patch that removed the >>>>> dependency but regressed performance would have to be evaluated at >>>>> the time. >>>>> The previous decision was not to do that. >>>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: taglibs-user-unsubscribe@tomcat.apache.org >>>> For additional commands, e-mail: taglibs-user-help@tomcat.apache.org >>>> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: taglibs-user-unsubscribe@tomcat.apache.org > For additional commands, e-mail: taglibs-user-help@tomcat.apache.org > --------------08DDA4133019168B3DB4F9BE Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="apache-taglibs-trunk.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="apache-taglibs-trunk.patch" SW5kZXg6IGFwYWNoZS10YWdsaWJzLXRydW5rL2ltcGwvcG9tLnhtbAo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3BvbS54bWwJKHJldmlzaW9uIDE4MTU4 OTMpCisrKyBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3BvbS54bWwJKHdvcmtpbmcgY29w eSkKQEAgLTkxLDEzICs5MSwxMyBAQAogICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJz aW9uPgogICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9k ZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPCEtLSA8ZGVwZW5k ZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPnhhbGFuPC9ncm91cElkPgogICAgICAgICAg ICAgPGFydGlmYWN0SWQ+eGFsYW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lv bj4yLjcuMTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+ CiAgICAgICAgICAgICA8b3B0aW9uYWw+dHJ1ZTwvb3B0aW9uYWw+Ci0gICAgICAgIDwvZGVw ZW5kZW5jeT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAtLT4KIAogICAgICAgICA8ZGVwZW5k ZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgpJbmRleDogYXBh Y2hlLXRhZ2xpYnMtdHJ1bmsvaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdGFnbGli cy9zdGFuZGFyZC90YWcvY29tbW9uL3htbC9FeHByU3VwcG9ydC5qYXZhCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGFwYWNoZS10YWdsaWJzLXRydW5rL2ltcGwvc3JjL21haW4vamF2YS9vcmcvYXBh Y2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1vbi94bWwvRXhwclN1cHBvcnQuamF2YQko cmV2aXNpb24gMTgxNTg5MykKKysrIGFwYWNoZS10YWdsaWJzLXRydW5rL2ltcGwvc3JjL21h aW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1vbi94bWwvRXhw clN1cHBvcnQuamF2YQkod29ya2luZyBjb3B5KQpAQCAtMjIsNTIgKzIyLDU1IEBACiBpbXBv cnQgamF2YXguc2VydmxldC5qc3AuSnNwRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4LnNlcnZs ZXQuanNwLkpzcFRhZ0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdl eHQuVGFnU3VwcG9ydDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVy RXhjZXB0aW9uOworLy9pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4 Y2VwdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC51dGlsLkVz Y2FwZVhNTDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOwotaW1wb3J0IG9yZy5h cGFjaGUueHBhdGguWFBhdGhDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5z dGFuZGFyZC54cGF0aC5KU1RMWFBhdGhDb21waWxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRh Z2xpYnMuc3RhbmRhcmQueHBhdGguSlNUTFhQYXRoRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcu YXBhY2hlLnRhZ2xpYnMuc3RhbmRhcmQueHBhdGguSlNUTFhQYXRoRmFjdG9yeTsKKy8vaW1w b3J0IG9yZy5hcGFjaGUueHBhdGguWFBhdGg7CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhwYXRo LlhQYXRoQ29udGV4dDsKIAogLyoqCi0gKiBUYWcgaGFuZGxlciBmb3IgJmx0O291dCZndDsg aW4gSlNUTCdzIFhNTCBsaWJyYXJ5LgotICogVE9ETzogc2hvdWxkIHdlIHJlbmFtZSB0aGlz IHRvIE91dFN1cHBvcnQgdG8gbWF0Y2ggdGhlIHRhZyBuYW1lPworICogVGFnIGhhbmRsZXIg Zm9yICZsdDtvdXQmZ3Q7IGluIEpTVEwncyBYTUwgbGlicmFyeS4gVE9ETzogc2hvdWxkIHdl IHJlbmFtZQorICogdGhpcyB0byBPdXRTdXBwb3J0IHRvIG1hdGNoIHRoZSB0YWcgbmFtZT8K ICAqCiAgKiBAYXV0aG9yIFNoYXduIEJheWVybgogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xh c3MgRXhwclN1cHBvcnQgZXh0ZW5kcyBUYWdTdXBwb3J0IHsKIAotICAgIHByaXZhdGUgWFBh dGggc2VsZWN0OwotICAgIHByb3RlY3RlZCBib29sZWFuIGVzY2FwZVhtbCA9IHRydWU7ICAv LyB0YWcgYXR0cmlidXRlCisJcHJpdmF0ZSBKU1RMWFBhdGhDb21waWxlciBjb21waWxlcjsK Kwlwcml2YXRlIEpTVExYUGF0aEV4cHJlc3Npb24gc2VsZWN0OworCXByb3RlY3RlZCBib29s ZWFuIGVzY2FwZVhtbCA9IHRydWU7IC8vIHRhZyBhdHRyaWJ1dGUKIAotICAgIEBPdmVycmlk ZQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICAgIHN1cGVyLnJlbGVhc2Uo KTsKLSAgICAgICAgc2VsZWN0ID0gbnVsbDsKLSAgICB9CisJcHVibGljIEV4cHJTdXBwb3J0 KCkgeworCQlKU1RMWFBhdGhGYWN0b3J5IHhwZiA9IEpTVExYUGF0aEZhY3RvcnkuZ2V0RmFj dG9yeSgpOworCQljb21waWxlciA9IHhwZi5uZXdDb21waWxlcigpOworCX0KIAotICAgIC8v KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqCi0gICAgLy8gVGFnIGxvZ2ljCisJQE92ZXJyaWRlCisJcHVibGlj IHZvaWQgcmVsZWFzZSgpIHsKKwkJc3VwZXIucmVsZWFzZSgpOworCQljb21waWxlciA9IG51 bGw7CisJCXNlbGVjdCA9IG51bGw7CisJfQogCi0gICAgLy8gYXBwbGllcyBYUGF0aCBleHBy ZXNzaW9uIGZyb20gJ3NlbGVjdCcgYW5kIHByaW50cyB0aGUgcmVzdWx0Ci0gICAgQE92ZXJy aWRlCi0gICAgcHVibGljIGludCBkb1N0YXJ0VGFnKCkgdGhyb3dzIEpzcEV4Y2VwdGlvbiB7 Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBYUGF0aENvbnRleHQgY29udGV4dCA9IFhh bGFuVXRpbC5nZXRDb250ZXh0KHRoaXMsIHBhZ2VDb250ZXh0KTsKLSAgICAgICAgICAgIFN0 cmluZyByZXN1bHQgPSBzZWxlY3QuZXhlY3V0ZShjb250ZXh0LCBjb250ZXh0LmdldEN1cnJl bnROb2RlKCksIG51bGwpLnN0cigpOwotICAgICAgICAgICAgRXNjYXBlWE1MLmVtaXQocmVz dWx0LCBlc2NhcGVYbWwsIHBhZ2VDb250ZXh0LmdldE91dCgpKTsKLSAgICAgICAgICAgIHJl dHVybiBTS0lQX0JPRFk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0g ICAgICAgICAgICB0aHJvdyBuZXcgSnNwVGFnRXhjZXB0aW9uKGV4LnRvU3RyaW5nKCksIGV4 KTsKLSAgICAgICAgfSBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotICAgICAg ICAgICAgdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0K KwkvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioKKwkvLyBUYWcgbG9naWMKIAotICAgIHB1YmxpYyB2b2lk IHNldFNlbGVjdChTdHJpbmcgc2VsZWN0KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAg ICB0aGlzLnNlbGVjdCA9IG5ldyBYUGF0aChzZWxlY3QsIG51bGwsIG51bGwsIFhQYXRoLlNF TEVDVCk7Ci0gICAgICAgIH0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLSAg ICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigpOwotICAgICAgICB9Ci0gICAg fQorCS8vIGFwcGxpZXMgWFBhdGggZXhwcmVzc2lvbiBmcm9tICdzZWxlY3QnIGFuZCBwcmlu dHMgdGhlIHJlc3VsdAorCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZG9TdGFydFRhZygpIHRo cm93cyBKc3BFeGNlcHRpb24geworCQl0cnkgeworCQkJU3RyaW5nIHJlc3VsdCA9IHNlbGVj dC5ldmFsdWF0ZVN0cmluZyhGb3JFYWNoVGFnLmdldENvbnRleHQodGhpcyksIHBhZ2VDb250 ZXh0KTsKKwkJCUVzY2FwZVhNTC5lbWl0KHJlc3VsdCwgZXNjYXBlWG1sLCBwYWdlQ29udGV4 dC5nZXRPdXQoKSk7CisJCQlyZXR1cm4gU0tJUF9CT0RZOworCQl9IGNhdGNoIChJT0V4Y2Vw dGlvbiBleCkgeworCQkJdGhyb3cgbmV3IEpzcFRhZ0V4Y2VwdGlvbihleC50b1N0cmluZygp LCBleCk7CisJCX0KKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRTZWxlY3QoU3RyaW5nIHNlbGVj dCkgeworCQl0aGlzLnNlbGVjdCA9IGNvbXBpbGVyLmNvbXBpbGUoc2VsZWN0KTsKKwl9CiB9 CkluZGV4OiBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy9tYWluL2phdmEvb3JnL2Fw YWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9jb21tb24veG1sL0ZvckVhY2hUYWcuamF2YQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy9tYWluL2ph dmEvb3JnL2FwYWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9jb21tb24veG1sL0ZvckVhY2hU YWcuamF2YQkocmV2aXNpb24gMTgxNTg5MykKKysrIGFwYWNoZS10YWdsaWJzLXRydW5rL2lt cGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1v bi94bWwvRm9yRWFjaFRhZy5qYXZhCSh3b3JraW5nIGNvcHkpCkBAIC0xNywxNiArMTcsMjMg QEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnRhZ2xpYnMuc3RhbmRhcmQudGFnLmNvbW1vbi54 bWw7CiAKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BFeGNlcHRpb247CisvL2ltcG9y dCBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BFeGNlcHRpb247CiBpbXBvcnQgamF2YXguc2Vydmxl dC5qc3AuSnNwVGFnRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLmpzdGwu Y29yZS5Mb29wVGFnU3VwcG9ydDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5z Zm9ybWVyRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLnRhZ2V4dC5UYWc7 CitpbXBvcnQgamF2YXguc2VydmxldC5qc3AudGFnZXh0LlRhZ1N1cHBvcnQ7CisvL2ltcG9y dCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwogCi1pbXBvcnQg b3JnLmFwYWNoZS54bWwuZHRtLkRUTUl0ZXJhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUueHBh dGguWFBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5YUGF0aENvbnRleHQ7Ci1pbXBv cnQgb3JnLmFwYWNoZS54cGF0aC5vYmplY3RzLlhPYmplY3Q7CitpbXBvcnQgb3JnLmFwYWNo ZS50YWdsaWJzLnN0YW5kYXJkLnhwYXRoLkpTVExYUGF0aENvbXBpbGVyOworaW1wb3J0IG9y Zy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC54cGF0aC5KU1RMWFBhdGhDb250ZXh0OworaW1w b3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC54cGF0aC5KU1RMWFBhdGhFeHByZXNz aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC54cGF0aC5KU1RMWFBh dGhGYWN0b3J5OwogCisvL2ltcG9ydCBvcmcuYXBhY2hlLnhtbC5kdG0uRFRNSXRlcmF0b3I7 CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOworLy9pbXBvcnQgb3JnLmFwYWNo ZS54cGF0aC5YUGF0aENvbnRleHQ7CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLm9iamVj dHMuWE9iamVjdDsKKwogLyoqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiAmbHQ7eDpmb3JFYWNo Jmd0OyB0YWcgdXNpbmcgbG93LWxldmVsIFhhbGFuIEFQSS4KICAqCkBAIC0zNSw5NSArNDIs ODUgQEAKICAqLwogcHVibGljIGNsYXNzIEZvckVhY2hUYWcgZXh0ZW5kcyBMb29wVGFnU3Vw cG9ydCB7CiAKLSAgICBwcml2YXRlIFhQYXRoIHNlbGVjdDsKLSAgICBwcml2YXRlIFhQYXRo Q29udGV4dCBjb250ZXh0OworCXByaXZhdGUgSlNUTFhQYXRoQ29tcGlsZXIgY29tcGlsZXI7 CisJcHJpdmF0ZSBKU1RMWFBhdGhFeHByZXNzaW9uIHNlbGVjdDsKKwlwcml2YXRlIEpTVExY UGF0aENvbnRleHQgY29udGV4dDsKIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk IHJlbGVhc2UoKSB7Ci0gICAgICAgIHN1cGVyLnJlbGVhc2UoKTsKLSAgICAgICAgc2VsZWN0 ID0gbnVsbDsKLSAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgfQorCXB1YmxpYyBGb3JF YWNoVGFnKCkgeworCQlKU1RMWFBhdGhGYWN0b3J5IHhwZiA9IEpTVExYUGF0aEZhY3Rvcnku Z2V0RmFjdG9yeSgpOworCQljb21waWxlciA9IHhwZi5uZXdDb21waWxlcigpOworCX0KIAot ICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHByZXBhcmUoKSB0aHJvd3MgSnNw VGFnRXhjZXB0aW9uIHsKLSAgICAgICAgY29udGV4dCA9IFhhbGFuVXRpbC5nZXRDb250ZXh0 KHRoaXMsIHBhZ2VDb250ZXh0KTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFhPYmpl Y3Qgbm9kZXMgPSBzZWxlY3QuZXhlY3V0ZShjb250ZXh0LCBjb250ZXh0LmdldEN1cnJlbnRO b2RlKCksIG51bGwpOworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7CisJ CXN1cGVyLnJlbGVhc2UoKTsKKwkJY29tcGlsZXIgPSBudWxsOworCQlzZWxlY3QgPSBudWxs OworCQljb250ZXh0ID0gbnVsbDsKKwl9CiAKLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhbiBp dGVyYXRvciBvdmVyIHRoZSByZXR1cm5lZCBub2RlcyBhbmQgcHVzaCBpbnRvIHRoZSBjb250 ZXh0Ci0gICAgICAgICAgICBEVE1JdGVyYXRvciBpdGVyYXRvciA9IG5vZGVzLml0ZXIoKTsK LSAgICAgICAgICAgIGNvbnRleHQucHVzaENvbnRleHROb2RlTGlzdChpdGVyYXRvcik7Ci0g ICAgICAgIH0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAg IHRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9CisJQE92 ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcHJlcGFyZSgpIHRocm93cyBKc3BUYWdFeGNlcHRp b24geworCQljb250ZXh0ID0gc2VsZWN0Lml0ZXJhdGUoZ2V0Q29udGV4dCh0aGlzKSwgcGFn ZUNvbnRleHQpOworCX0KIAotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBib29sZWFu IGhhc05leHQoKSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKLSAgICAgICAgRFRNSXRlcmF0 b3IgaXRlcmF0b3IgPSBjb250ZXh0LmdldENvbnRleHROb2RlTGlzdCgpOwotICAgICAgICBy ZXR1cm4gaXRlcmF0b3IuZ2V0Q3VycmVudFBvcygpIDwgaXRlcmF0b3IuZ2V0TGVuZ3RoKCk7 Ci0gICAgfQorCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIGhhc05leHQoKSB0aHJv d3MgSnNwVGFnRXhjZXB0aW9uIHsKKwkJcmV0dXJuIGNvbnRleHQuaGFzTmV4dCgpOworCX0K IAotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBPYmplY3QgbmV4dCgpIHRocm93cyBK c3BUYWdFeGNlcHRpb24gewotICAgICAgICBEVE1JdGVyYXRvciBpdGVyYXRvciA9IGNvbnRl eHQuZ2V0Q29udGV4dE5vZGVMaXN0KCk7Ci0gICAgICAgIGludCBuZXh0ID0gaXRlcmF0b3Iu bmV4dE5vZGUoKTsKLSAgICAgICAgY29udGV4dC5wdXNoQ3VycmVudE5vZGUobmV4dCk7Ci0g ICAgICAgIHJldHVybiBpdGVyYXRvci5nZXREVE0obmV4dCkuZ2V0Tm9kZShuZXh0KTsKLSAg ICB9CisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIE9iamVjdCBuZXh0KCkgdGhyb3dzIEpzcFRh Z0V4Y2VwdGlvbiB7CisJCXJldHVybiBjb250ZXh0Lm5leHQoKTsKKwl9CiAKLSAgICBAT3Zl cnJpZGUKLSAgICBwdWJsaWMgaW50IGRvQWZ0ZXJCb2R5KCkgdGhyb3dzIEpzcEV4Y2VwdGlv biB7Ci0gICAgICAgIC8vIHBvcCB0aGUgY29udGV4dCBub2RlIGFmdGVyIGV4ZWN1dGluZyB0 aGUgYm9keQotICAgICAgICBjb250ZXh0LnBvcEN1cnJlbnROb2RlKCk7Ci0gICAgICAgIHJl dHVybiBzdXBlci5kb0FmdGVyQm9keSgpOwotICAgIH0KKwkvLyBAT3ZlcnJpZGUKKwkvLyBw dWJsaWMgaW50IGRvQWZ0ZXJCb2R5KCkgdGhyb3dzIEpzcEV4Y2VwdGlvbiB7CisJLy8gLy8g cG9wIHRoZSBjb250ZXh0IG5vZGUgYWZ0ZXIgZXhlY3V0aW5nIHRoZSBib2R5CisJLy8gY29u dGV4dC5wb3BDdXJyZW50Tm9kZSgpOworCS8vIHJldHVybiBzdXBlci5kb0FmdGVyQm9keSgp OworCS8vIH0KKwkvLworCS8vIEBPdmVycmlkZQorCS8vIHB1YmxpYyB2b2lkIGRvRmluYWxs eSgpIHsKKwkvLyAvLyBjb250ZXh0IG1pZ2h0IGJlIG51bGwgYXMgcHJlcGFyZSBpcyBub3Qg Y2FsbGVkIGlmIGVuZCA8IGJlZ2luCisJLy8gaWYgKGNvbnRleHQgIT0gbnVsbCkgeworCS8v IC8vIHBvcCB0aGUgbGlzdCBvZiBub2RlcyBiZWluZyBpdGVyYXRlZAorCS8vIGNvbnRleHQu cG9wQ29udGV4dE5vZGVMaXN0KCk7CisJLy8gY29udGV4dCA9IG51bGw7CisJLy8gfQorCS8v IHN1cGVyLmRvRmluYWxseSgpOworCS8vIH0KIAotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp YyB2b2lkIGRvRmluYWxseSgpIHsKLSAgICAgICAgLy8gY29udGV4dCBtaWdodCBiZSBudWxs IGFzIHByZXBhcmUgaXMgbm90IGNhbGxlZCBpZiBlbmQgPCBiZWdpbgotICAgICAgICBpZiAo Y29udGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyBwb3AgdGhlIGxpc3Qgb2Ygbm9k ZXMgYmVpbmcgaXRlcmF0ZWQKLSAgICAgICAgICAgIGNvbnRleHQucG9wQ29udGV4dE5vZGVM aXN0KCk7Ci0gICAgICAgICAgICBjb250ZXh0ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAg ICBzdXBlci5kb0ZpbmFsbHkoKTsKLSAgICB9CisJcHVibGljIHZvaWQgc2V0U2VsZWN0KFN0 cmluZyBzZWxlY3QpIHsKKwkJdGhpcy5zZWxlY3QgPSBjb21waWxlci5jb21waWxlKHNlbGVj dCk7CisJfQogCi0gICAgcHVibGljIHZvaWQgc2V0U2VsZWN0KFN0cmluZyBzZWxlY3QpIHsK LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gbmV3IFhQYXRoKHNl bGVjdCwgbnVsbCwgbnVsbCwgWFBhdGguU0VMRUNUKTsKLSAgICAgICAgfSBjYXRjaCAoVHJh bnNmb3JtZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlv bkVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9CisJcHVibGljIHZvaWQgc2V0QmVnaW4oaW50 IGJlZ2luKSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKKwkJdGhpcy5iZWdpblNwZWNpZmll ZCA9IHRydWU7CisJCXRoaXMuYmVnaW4gPSBiZWdpbjsKKwkJdmFsaWRhdGVCZWdpbigpOwor CX0KIAotICAgIHB1YmxpYyB2b2lkIHNldEJlZ2luKGludCBiZWdpbikgdGhyb3dzIEpzcFRh Z0V4Y2VwdGlvbiB7Ci0gICAgICAgIHRoaXMuYmVnaW5TcGVjaWZpZWQgPSB0cnVlOwotICAg ICAgICB0aGlzLmJlZ2luID0gYmVnaW47Ci0gICAgICAgIHZhbGlkYXRlQmVnaW4oKTsKLSAg ICB9CisJcHVibGljIHZvaWQgc2V0RW5kKGludCBlbmQpIHRocm93cyBKc3BUYWdFeGNlcHRp b24geworCQl0aGlzLmVuZFNwZWNpZmllZCA9IHRydWU7CisJCXRoaXMuZW5kID0gZW5kOwor CQl2YWxpZGF0ZUVuZCgpOworCX0KIAotICAgIHB1YmxpYyB2b2lkIHNldEVuZChpbnQgZW5k KSB0aHJvd3MgSnNwVGFnRXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5lbmRTcGVjaWZpZWQg PSB0cnVlOwotICAgICAgICB0aGlzLmVuZCA9IGVuZDsKLSAgICAgICAgdmFsaWRhdGVFbmQo KTsKLSAgICB9CisJcHVibGljIHZvaWQgc2V0U3RlcChpbnQgc3RlcCkgdGhyb3dzIEpzcFRh Z0V4Y2VwdGlvbiB7CisJCXRoaXMuc3RlcFNwZWNpZmllZCA9IHRydWU7CisJCXRoaXMuc3Rl cCA9IHN0ZXA7CisJCXZhbGlkYXRlU3RlcCgpOworCX0KIAotICAgIHB1YmxpYyB2b2lkIHNl dFN0ZXAoaW50IHN0ZXApIHRocm93cyBKc3BUYWdFeGNlcHRpb24gewotICAgICAgICB0aGlz LnN0ZXBTcGVjaWZpZWQgPSB0cnVlOwotICAgICAgICB0aGlzLnN0ZXAgPSBzdGVwOwotICAg ICAgICB2YWxpZGF0ZVN0ZXAoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm4g dGhlIGN1cnJlbnQgWFBhdGggY29udGV4dCB0byBzdXBwb3J0IGV4cHJlc3Npb24gZXZhbHVh dGlvbiBpbiBuZXN0ZWQgdGFncy4KLSAgICAgKgotICAgICAqIEByZXR1cm4gdGhlIGN1cnJl bnQgWFBhdGggY29udGV4dAotICAgICAqLwotICAgIFhQYXRoQ29udGV4dCBnZXRDb250ZXh0 KCkgewotICAgICAgICByZXR1cm4gY29udGV4dDsKLSAgICB9CisJLyogUmV0cmlldmVzIHRo ZSBjdXJyZW50IGNvbnRleHQuICovCisJcHVibGljIHN0YXRpYyBKU1RMWFBhdGhDb250ZXh0 IGdldENvbnRleHQoVGFnIGNoaWxkKSB7CisJCUZvckVhY2hUYWcgZm9yRWFjaFRhZyA9IChG b3JFYWNoVGFnKSBUYWdTdXBwb3J0LmZpbmRBbmNlc3RvcldpdGhDbGFzcyhjaGlsZCwgRm9y RWFjaFRhZy5jbGFzcyk7CisJCWlmIChmb3JFYWNoVGFnID09IG51bGwpIHsKKwkJCXJldHVy biBudWxsOworCQl9IGVsc2UgeworCQkJcmV0dXJuIGZvckVhY2hUYWcuY29udGV4dDsKKwkJ fQorCX0KIH0KLQpJbmRleDogYXBhY2hlLXRhZ2xpYnMtdHJ1bmsvaW1wbC9zcmMvbWFpbi9q YXZhL29yZy9hcGFjaGUvdGFnbGlicy9zdGFuZGFyZC90YWcvY29tbW9uL3htbC9JZlRhZy5q YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KLS0tIGFwYWNoZS10YWdsaWJzLXRydW5rL2ltcGwvc3JjL21h aW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1vbi94bWwvSWZU YWcuamF2YQkocmV2aXNpb24gMTgxNTg5MykKKysrIGFwYWNoZS10YWdsaWJzLXRydW5rL2lt cGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2NvbW1v bi94bWwvSWZUYWcuamF2YQkod29ya2luZyBjb3B5KQpAQCAtMTksMTMgKzE5LDE4IEBACiAK IGltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC5Kc3BUYWdFeGNlcHRpb247CiBpbXBvcnQgamF2 YXguc2VydmxldC5qc3AuanN0bC5jb3JlLkNvbmRpdGlvbmFsVGFnU3VwcG9ydDsKLWltcG9y dCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOworLy9pbXBvcnQg amF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKIAotaW1wb3J0IG9y Zy5hcGFjaGUueHBhdGguWFBhdGg7Ci1pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5YUGF0aENv bnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50YWdsaWJzLnN0YW5kYXJkLnhwYXRoLkpTVExY UGF0aENvbXBpbGVyOworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC54cGF0 aC5KU1RMWFBhdGhFeHByZXNzaW9uOworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFu ZGFyZC54cGF0aC5KU1RMWFBhdGhGYWN0b3J5OworLy9pbXBvcnQgb3JnLmFwYWNoZS54cGF0 aC5YUGF0aDsKKy8vaW1wb3J0IG9yZy5hcGFjaGUueHBhdGguWFBhdGhDb250ZXh0OwogCiAv KioKLSAqIDxwPlRhZyBoYW5kbGVyIGZvciAmbHQ7aWYmZ3Q7IGluIEpTVEwncyBYTUwgbGli cmFyeS48L3A+CisgKiA8cD4KKyAqIFRhZyBoYW5kbGVyIGZvciAmbHQ7aWYmZ3Q7IGluIEpT VEwncyBYTUwgbGlicmFyeS4KKyAqIDwvcD4KICAqCiAgKiBAYXV0aG9yIFNoYXduIEJheWVy bgogICovCkBAIC0zMiwzMCArMzcsMjcgQEAKIAogcHVibGljIGNsYXNzIElmVGFnIGV4dGVu ZHMgQ29uZGl0aW9uYWxUYWdTdXBwb3J0IHsKIAotICAgIHByaXZhdGUgWFBhdGggc2VsZWN0 OworCXByaXZhdGUgSlNUTFhQYXRoQ29tcGlsZXIgY29tcGlsZXI7CisJcHJpdmF0ZSBKU1RM WFBhdGhFeHByZXNzaW9uIHNlbGVjdDsKIAorCXB1YmxpYyBJZlRhZygpIHsKKwkJSlNUTFhQ YXRoRmFjdG9yeSB4cGYgPSBKU1RMWFBhdGhGYWN0b3J5LmdldEZhY3RvcnkoKTsKKwkJY29t cGlsZXIgPSB4cGYubmV3Q29tcGlsZXIoKTsKKwl9CiAKLSAgICBAT3ZlcnJpZGUKLSAgICBw dWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBzdXBlci5yZWxlYXNlKCk7Ci0gICAg ICAgIHNlbGVjdCA9IG51bGw7Ci0gICAgfQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJl bGVhc2UoKSB7CisJCXN1cGVyLnJlbGVhc2UoKTsKKwkJY29tcGlsZXIgPSBudWxsOworCQlz ZWxlY3QgPSBudWxsOworCX0KIAotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCBib29s ZWFuIGNvbmRpdGlvbigpIHRocm93cyBKc3BUYWdFeGNlcHRpb24gewotICAgICAgICBYUGF0 aENvbnRleHQgY29udGV4dCA9IFhhbGFuVXRpbC5nZXRDb250ZXh0KHRoaXMsIHBhZ2VDb250 ZXh0KTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBzZWxlY3QuYm9vbChj b250ZXh0LCBjb250ZXh0LmdldEN1cnJlbnROb2RlKCksIG51bGwpOwotICAgICAgICB9IGNh dGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcg SnNwVGFnRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQorCUBPdmVycmlkZQorCXBy b3RlY3RlZCBib29sZWFuIGNvbmRpdGlvbigpIHRocm93cyBKc3BUYWdFeGNlcHRpb24gewor CQlyZXR1cm4gc2VsZWN0LmV2YWx1YXRlQm9vbGVhbihGb3JFYWNoVGFnLmdldENvbnRleHQo dGhpcyksIHBhZ2VDb250ZXh0KTsKKwl9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRTZWxlY3Qo U3RyaW5nIHNlbGVjdCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgdGhpcy5zZWxl Y3QgPSBuZXcgWFBhdGgoc2VsZWN0LCBudWxsLCBudWxsLCBYUGF0aC5TRUxFQ1QpOwotICAg ICAgICB9IGNhdGNoIChUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0 aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoKTsKLSAgICAgICAgfQotICAgIH0KKwlwdWJsaWMg dm9pZCBzZXRTZWxlY3QoU3RyaW5nIHNlbGVjdCkgeworCQl0aGlzLnNlbGVjdCA9IGNvbXBp bGVyLmNvbXBpbGUoc2VsZWN0KTsKKwl9CiB9CkluZGV4OiBhcGFjaGUtdGFnbGlicy10cnVu ay9pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9j b21tb24veG1sL1NldFRhZy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFwYWNoZS10YWdsaWJz LXRydW5rL2ltcGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQv dGFnL2NvbW1vbi94bWwvU2V0VGFnLmphdmEJKHJldmlzaW9uIDE4MTU4OTMpCisrKyBhcGFj aGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90YWdsaWJz L3N0YW5kYXJkL3RhZy9jb21tb24veG1sL1NldFRhZy5qYXZhCSh3b3JraW5nIGNvcHkpCkBA IC0xOCw3MCArMTgsNzMgQEAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50YWdsaWJzLnN0YW5kYXJk LnRhZy5jb21tb24ueG1sOwogCiBpbXBvcnQgamF2YXguc2VydmxldC5qc3AuSnNwRXhjZXB0 aW9uOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuanNwLkpzcFRhZ0V4Y2VwdGlvbjsKKy8vaW1w b3J0IGphdmF4LnNlcnZsZXQuanNwLkpzcFRhZ0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5z ZXJ2bGV0LmpzcC5QYWdlQ29udGV4dDsKIGltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC50YWdl eHQuVGFnU3VwcG9ydDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVy RXhjZXB0aW9uOworLy9pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4 Y2VwdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC50YWcuY29t bW9uLmNvcmUuVXRpbDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRoOwotaW1wb3J0 IG9yZy5hcGFjaGUueHBhdGguWFBhdGhDb250ZXh0OwotaW1wb3J0IG9yZy5hcGFjaGUueHBh dGgub2JqZWN0cy5YT2JqZWN0OworaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFy ZC54cGF0aC5KU1RMWFBhdGhDb21waWxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnRhZ2xpYnMu c3RhbmRhcmQueHBhdGguSlNUTFhQYXRoRXhwcmVzc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hl LnRhZ2xpYnMuc3RhbmRhcmQueHBhdGguSlNUTFhQYXRoRmFjdG9yeTsKKy8vaW1wb3J0IG9y Zy5hcGFjaGUueHBhdGguWFBhdGg7CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRo Q29udGV4dDsKKy8vaW1wb3J0IG9yZy5hcGFjaGUueHBhdGgub2JqZWN0cy5YT2JqZWN0Owog CiAvKioKLSAqIDxwPlRhZyBoYW5kbGVyIGZvciAmbHQ7c2V0Jmd0OyBpbiBKU1RMJ3MgWE1M IGxpYnJhcnkuPC9wPgorICogPHA+CisgKiBUYWcgaGFuZGxlciBmb3IgJmx0O3NldCZndDsg aW4gSlNUTCdzIFhNTCBsaWJyYXJ5LgorICogPC9wPgogICoKICAqIEBhdXRob3IgU2hhd24g QmF5ZXJuCiAgKi8KIHB1YmxpYyBjbGFzcyBTZXRUYWcgZXh0ZW5kcyBUYWdTdXBwb3J0IHsK IAotICAgIHByaXZhdGUgWFBhdGggc2VsZWN0OwotICAgIHByaXZhdGUgU3RyaW5nIHZhcjsK LSAgICBwcml2YXRlIGludCBzY29wZSA9IFBhZ2VDb250ZXh0LlBBR0VfU0NPUEU7CisJcHJp dmF0ZSBKU1RMWFBhdGhDb21waWxlciBjb21waWxlcjsKKwlwcml2YXRlIEpTVExYUGF0aEV4 cHJlc3Npb24gc2VsZWN0OworCXByaXZhdGUgU3RyaW5nIHZhcjsKKwlwcml2YXRlIGludCBz Y29wZSA9IFBhZ2VDb250ZXh0LlBBR0VfU0NPUEU7CiAKLSAgICAvLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgotICAgIC8vIENvbnN0cnVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24KKwkvLyAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKwkvLyBDb25zdHJ1Y3Rpb24gYW5kIGluaXRpYWxpemF0aW9uCiAKLSAgICBA T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBzdXBlci5y ZWxlYXNlKCk7Ci0gICAgICAgIHNlbGVjdCA9IG51bGw7Ci0gICAgICAgIHZhciA9IG51bGw7 Ci0gICAgfQorCXB1YmxpYyBTZXRUYWcoKSB7CisJCUpTVExYUGF0aEZhY3RvcnkgeHBmID0g SlNUTFhQYXRoRmFjdG9yeS5nZXRGYWN0b3J5KCk7CisJCWNvbXBpbGVyID0geHBmLm5ld0Nv bXBpbGVyKCk7CisJfQogCi0gICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAvLyBUYWcgbG9n aWMKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCByZWxlYXNlKCkgeworCQlzdXBlci5yZWxl YXNlKCk7CisJCWNvbXBpbGVyID0gbnVsbDsKKwkJc2VsZWN0ID0gbnVsbDsKKwkJdmFyID0g bnVsbDsKKwl9CiAKLSAgICAvLyBhcHBsaWVzIFhQYXRoIGV4cHJlc3Npb24gZnJvbSAnc2Vs ZWN0JyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gJ3ZhcicKKwkvLyAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioKKwkvLyBUYWcgbG9naWMKIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZG9T dGFydFRhZygpIHRocm93cyBKc3BFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAg ICAgICAgWFBhdGhDb250ZXh0IGNvbnRleHQgPSBYYWxhblV0aWwuZ2V0Q29udGV4dCh0aGlz LCBwYWdlQ29udGV4dCk7Ci0gICAgICAgICAgICBYT2JqZWN0IHJlc3VsdCA9IHNlbGVjdC5l eGVjdXRlKGNvbnRleHQsIGNvbnRleHQuZ2V0Q3VycmVudE5vZGUoKSwgbnVsbCk7Ci0gICAg ICAgICAgICBwYWdlQ29udGV4dC5zZXRBdHRyaWJ1dGUodmFyLCBYYWxhblV0aWwuY29lcmNl VG9KYXZhKHJlc3VsdCksIHNjb3BlKTsKLSAgICAgICAgICAgIHJldHVybiBTS0lQX0JPRFk7 Ci0gICAgICAgIH0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAg ICAgIHRocm93IG5ldyBKc3BUYWdFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9CisJ Ly8gYXBwbGllcyBYUGF0aCBleHByZXNzaW9uIGZyb20gJ3NlbGVjdCcgYW5kIHN0b3JlcyB0 aGUgcmVzdWx0IGluICd2YXInCiAKLSAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgIC8vIEF0 dHJpYnV0ZSBhY2Nlc3NvcnMKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IGRvU3RhcnRUYWco KSB0aHJvd3MgSnNwRXhjZXB0aW9uIHsKKwkJT2JqZWN0IHJlc3VsdCA9IHNlbGVjdC5ldmFs dWF0ZU9iamVjdChGb3JFYWNoVGFnLmdldENvbnRleHQodGhpcyksIHBhZ2VDb250ZXh0KTsK KwkJcGFnZUNvbnRleHQuc2V0QXR0cmlidXRlKHZhciwgcmVzdWx0LCBzY29wZSk7CisJCXJl dHVybiBTS0lQX0JPRFk7CisJfQogCi0gICAgcHVibGljIHZvaWQgc2V0U2VsZWN0KFN0cmlu ZyBzZWxlY3QpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0g bmV3IFhQYXRoKHNlbGVjdCwgbnVsbCwgbnVsbCwgWFBhdGguU0VMRUNUKTsKLSAgICAgICAg fSBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cg bmV3IEFzc2VydGlvbkVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9CisJLy8gKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisJLy8gQXR0cmlidXRlIGFjY2Vzc29ycwogCi0gICAgcHVibGljIHZvaWQgc2V0 VmFyKFN0cmluZyB2YXIpIHsKLSAgICAgICAgdGhpcy52YXIgPSB2YXI7Ci0gICAgfQorCXB1 YmxpYyB2b2lkIHNldFNlbGVjdChTdHJpbmcgc2VsZWN0KSB7CisJCXRoaXMuc2VsZWN0ID0g Y29tcGlsZXIuY29tcGlsZShzZWxlY3QpOworCX0KIAotICAgIHB1YmxpYyB2b2lkIHNldFNj b3BlKFN0cmluZyBzY29wZSkgewotICAgICAgICB0aGlzLnNjb3BlID0gVXRpbC5nZXRTY29w ZShzY29wZSk7Ci0gICAgfQorCXB1YmxpYyB2b2lkIHNldFZhcihTdHJpbmcgdmFyKSB7CisJ CXRoaXMudmFyID0gdmFyOworCX0KKworCXB1YmxpYyB2b2lkIHNldFNjb3BlKFN0cmluZyBz Y29wZSkgeworCQl0aGlzLnNjb3BlID0gVXRpbC5nZXRTY29wZShzY29wZSk7CisJfQogfQpJ bmRleDogYXBhY2hlLXRhZ2xpYnMtdHJ1bmsvaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFj aGUvdGFnbGlicy9zdGFuZGFyZC90YWcvY29tbW9uL3htbC9XaGVuVGFnLmphdmEKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gYXBhY2hlLXRhZ2xpYnMtdHJ1bmsvaW1wbC9zcmMvbWFpbi9qYXZhL29y Zy9hcGFjaGUvdGFnbGlicy9zdGFuZGFyZC90YWcvY29tbW9uL3htbC9XaGVuVGFnLmphdmEJ KHJldmlzaW9uIDE4MTU4OTMpCisrKyBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy9t YWluL2phdmEvb3JnL2FwYWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9jb21tb24veG1sL1do ZW5UYWcuamF2YQkod29ya2luZyBjb3B5KQpAQCAtMTgsMTQgKzE4LDE5IEBACiBwYWNrYWdl IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC50YWcuY29tbW9uLnhtbDsKIAogaW1wb3J0 IGphdmF4LnNlcnZsZXQuanNwLkpzcFRhZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwu dHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOworLy9pbXBvcnQgamF2YXgueG1sLnRy YW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGFn bGlicy5zdGFuZGFyZC50YWcuY29tbW9uLmNvcmUuV2hlblRhZ1N1cHBvcnQ7Ci1pbXBvcnQg b3JnLmFwYWNoZS54cGF0aC5YUGF0aDsKLWltcG9ydCBvcmcuYXBhY2hlLnhwYXRoLlhQYXRo Q29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLnRhZ2xpYnMuc3RhbmRhcmQueHBhdGguSlNU TFhQYXRoQ29tcGlsZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50YWdsaWJzLnN0YW5kYXJkLnhw YXRoLkpTVExYUGF0aEV4cHJlc3Npb247CitpbXBvcnQgb3JnLmFwYWNoZS50YWdsaWJzLnN0 YW5kYXJkLnhwYXRoLkpTVExYUGF0aEZhY3Rvcnk7CisvL2ltcG9ydCBvcmcuYXBhY2hlLnhw YXRoLlhQYXRoOworLy9pbXBvcnQgb3JnLmFwYWNoZS54cGF0aC5YUGF0aENvbnRleHQ7CiAK IC8qKgotICogPHA+VGFnIGhhbmRsZXIgZm9yICZsdDtpZiZndDsgaW4gSlNUTCdzIFhNTCBs aWJyYXJ5LjwvcD4KKyAqIDxwPgorICogVGFnIGhhbmRsZXIgZm9yICZsdDtpZiZndDsgaW4g SlNUTCdzIFhNTCBsaWJyYXJ5LgorICogPC9wPgogICoKICAqIEBhdXRob3IgU2hhd24gQmF5 ZXJuCiAgKi8KQEAgLTMyLDI5ICszNywyNyBAQAogCiBwdWJsaWMgY2xhc3MgV2hlblRhZyBl eHRlbmRzIFdoZW5UYWdTdXBwb3J0IHsKIAotICAgIHByaXZhdGUgWFBhdGggc2VsZWN0Owor CXByaXZhdGUgSlNUTFhQYXRoQ29tcGlsZXIgY29tcGlsZXI7CisJcHJpdmF0ZSBKU1RMWFBh dGhFeHByZXNzaW9uIHNlbGVjdDsKIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk IHJlbGVhc2UoKSB7Ci0gICAgICAgIHN1cGVyLnJlbGVhc2UoKTsKLSAgICAgICAgc2VsZWN0 ID0gbnVsbDsKLSAgICB9CisJcHVibGljIFdoZW5UYWcoKSB7CisJCUpTVExYUGF0aEZhY3Rv cnkgeHBmID0gSlNUTFhQYXRoRmFjdG9yeS5nZXRGYWN0b3J5KCk7CisJCWNvbXBpbGVyID0g eHBmLm5ld0NvbXBpbGVyKCk7CisJfQogCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVk IGJvb2xlYW4gY29uZGl0aW9uKCkgdGhyb3dzIEpzcFRhZ0V4Y2VwdGlvbiB7Ci0gICAgICAg IFhQYXRoQ29udGV4dCBjb250ZXh0ID0gWGFsYW5VdGlsLmdldENvbnRleHQodGhpcywgcGFn ZUNvbnRleHQpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgcmV0dXJuIHNlbGVjdC5i b29sKGNvbnRleHQsIGNvbnRleHQuZ2V0Q3VycmVudE5vZGUoKSwgbnVsbCk7Ci0gICAgICAg IH0gY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93 IG5ldyBKc3BUYWdFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9CisJQE92ZXJyaWRl CisJcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKKwkJc3VwZXIucmVsZWFzZSgpOworCQljb21w aWxlciA9IG51bGw7CisJCXNlbGVjdCA9IG51bGw7CisJfQogCi0gICAgcHVibGljIHZvaWQg c2V0U2VsZWN0KFN0cmluZyBzZWxlY3QpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg IHRoaXMuc2VsZWN0ID0gbmV3IFhQYXRoKHNlbGVjdCwgbnVsbCwgbnVsbCwgWFBhdGguU0VM RUNUKTsKLSAgICAgICAgfSBjYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotICAg ICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCk7Ci0gICAgICAgIH0KLSAgICB9 CisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIGJvb2xlYW4gY29uZGl0aW9uKCkgdGhyb3dzIEpz cFRhZ0V4Y2VwdGlvbiB7CisJCXJldHVybiBzZWxlY3QuZXZhbHVhdGVCb29sZWFuKEZvckVh Y2hUYWcuZ2V0Q29udGV4dCh0aGlzKSwgcGFnZUNvbnRleHQpOworCX0KKworCXB1YmxpYyB2 b2lkIHNldFNlbGVjdChTdHJpbmcgc2VsZWN0KSB7CisJCXRoaXMuc2VsZWN0ID0gY29tcGls ZXIuY29tcGlsZShzZWxlY3QpOworCX0KIH0KSW5kZXg6IGFwYWNoZS10YWdsaWJzLXRydW5r L2ltcGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3RhZ2xpYnMvc3RhbmRhcmQvdGFnL2Nv bW1vbi94bWwvRm9yRWFjaFRhZ1Rlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcGFjaGUt dGFnbGlicy10cnVuay9pbXBsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90YWdsaWJzL3N0 YW5kYXJkL3RhZy9jb21tb24veG1sL0ZvckVhY2hUYWdUZXN0LmphdmEJKHJldmlzaW9uIDE4 MTU4OTMpCisrKyBhcGFjaGUtdGFnbGlicy10cnVuay9pbXBsL3NyYy90ZXN0L2phdmEvb3Jn L2FwYWNoZS90YWdsaWJzL3N0YW5kYXJkL3RhZy9jb21tb24veG1sL0ZvckVhY2hUYWdUZXN0 LmphdmEJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIGltcG9ydCBvcmcuanVu aXQuVGVzdDsKIAogaW1wb3J0IG9yZy5hcGFjaGUudGFnbGlicy5zdGFuZGFyZC51dGlsLlht bFV0aWw7CitpbXBvcnQgb3JnLmFwYWNoZS50YWdsaWJzLnN0YW5kYXJkLnhwYXRoLkpTVExY UGF0aENvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS54bWwuZHRtLkRUTUl0ZXJhdG9yOwog aW1wb3J0IG9yZy5hcGFjaGUueHBhdGguQ2FjaGVkWFBhdGhBUEk7CiBpbXBvcnQgb3JnLmFw YWNoZS54cGF0aC5YUGF0aDsKQEAgLTgyLDcgKzgzLDcgQEAKICAgICAgICAgdGFnLnNldFNl bGVjdCgiJGRvYy9yb290L2EvbnVtIik7CiAgICAgICAgIHJlcGxheShwYWdlQ29udGV4dCk7 CiAgICAgICAgIHRhZy5wcmVwYXJlKCk7Ci0gICAgICAgIFhQYXRoQ29udGV4dCBjb250ZXh0 ID0gdGFnLmdldENvbnRleHQoKTsKKyAgICAgICAgSlNUTFhQYXRoQ29udGV4dCBjb250ZXh0 ID0gdGFnLmdldENvbnRleHQoKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUodGFnLmhh c05leHQoKSk7CiAgICAgICAgIE5vZGUgb25lID0gKE5vZGUpIHRhZy5uZXh0KCk7CiAgICAg ICAgIGFzc2VydEVxdWFscygib25lIiwgb25lLmdldFRleHRDb250ZW50KCkpOwo= --------------08DDA4133019168B3DB4F9BE Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: taglibs-user-unsubscribe@tomcat.apache.org For additional commands, e-mail: taglibs-user-help@tomcat.apache.org --------------08DDA4133019168B3DB4F9BE--