X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-netty-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fnettyutil%2Fhandler%2FNetconfEXICodec.java;fp=opendaylight%2Fnetconf%2Fnetconf-netty-util%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fnettyutil%2Fhandler%2FNetconfEXICodec.java;h=8f67da670a9231369cc8914dfb490b02428d88a5;hp=30867bcd186390ff6d73c737a02d457c60955f92;hb=9333dcc739a7bf89a2e78886c7dd43fef1c09b8b;hpb=24723fb6aa97d615d2939a9791b33b33205ceee7 diff --git a/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfEXICodec.java b/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfEXICodec.java index 30867bcd18..8f67da670a 100644 --- a/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfEXICodec.java +++ b/opendaylight/netconf/netconf-netty-util/src/main/java/org/opendaylight/controller/netconf/nettyutil/handler/NetconfEXICodec.java @@ -30,13 +30,19 @@ public final class NetconfEXICodec { } }; + /** + * Grammar cache acts as a template and is duplicated by the Transmogrifier and the Reader + * before use. It is safe to reuse a single instance. + */ + private final GrammarCache exiGrammarCache; private final EXIOptions exiOptions; public NetconfEXICodec(final EXIOptions exiOptions) { this.exiOptions = Preconditions.checkNotNull(exiOptions); + this.exiGrammarCache = createGrammarCache(exiOptions); } - private GrammarCache getGrammarCache() { + private static GrammarCache createGrammarCache(final EXIOptions exiOptions) { short go = GrammarOptions.DEFAULT_OPTIONS; if (exiOptions.getPreserveComments()) { go = GrammarOptions.addCM(go); @@ -51,13 +57,13 @@ public final class NetconfEXICodec { go = GrammarOptions.addPI(go); } - return new GrammarCache(null, go); + return new GrammarCache(go); } EXIReader getReader() throws EXIOptionsException { final EXIReader r = new EXIReader(); r.setPreserveLexicalValues(exiOptions.getPreserveLexicalValues()); - r.setGrammarCache(getGrammarCache()); + r.setGrammarCache(exiGrammarCache); r.setEntityResolver(ENTITY_RESOLVER); return r; } @@ -66,7 +72,7 @@ public final class NetconfEXICodec { final Transmogrifier transmogrifier = new Transmogrifier(); transmogrifier.setAlignmentType(exiOptions.getAlignmentType()); transmogrifier.setBlockSize(exiOptions.getBlockSize()); - transmogrifier.setGrammarCache(getGrammarCache()); + transmogrifier.setGrammarCache(exiGrammarCache); transmogrifier.setOutputCookie(OUTPUT_EXI_COOKIE); transmogrifier.setOutputOptions(HeaderOptionsOutputType.all); transmogrifier.setResolveExternalGeneralEntities(false);