001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.juneau.html;
018
019import java.lang.annotation.*;
020import java.nio.charset.*;
021import java.util.*;
022
023import org.apache.juneau.*;
024import org.apache.juneau.commons.collections.*;
025import org.apache.juneau.commons.function.*;
026import org.apache.juneau.commons.reflect.*;
027import org.apache.juneau.xml.*;
028
029/**
030 * Serializes POJOs to HTTP responses as stripped HTML.
031 *
032 * <h5 class='topic'>Media types</h5>
033 *
034 * Handles <c>Accept</c> types:  <bc>text/html+stripped</bc>
035 * <p>
036 * Produces <c>Content-Type</c> types:  <bc>text/html</bc>
037 *
038 * <h5 class='topic'>Description</h5>
039 *
040 * Produces the same output as {@link HtmlDocSerializer}, but without the header and body tags and page title and
041 * description.
042 * Used primarily for JUnit testing the {@link HtmlDocSerializer} class.
043 *
044 * <h5 class='section'>Notes:</h5><ul>
045 *    <li class='note'>This class is thread safe and reusable.
046 * </ul>
047 *
048 * <h5 class='section'>See Also:</h5><ul>
049 *    <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
050
051 * </ul>
052 */
053public class HtmlStrippedDocSerializer extends HtmlSerializer {
054   /**
055    * Builder class.
056    */
057   public static class Builder extends HtmlSerializer.Builder {
058
059      private static final Cache<HashKey,HtmlStrippedDocSerializer> CACHE = Cache.of(HashKey.class, HtmlStrippedDocSerializer.class).build();
060
061      /**
062       * Constructor, default settings.
063       */
064      protected Builder() {
065         produces("text/html");
066         accept("text/html+stripped");
067      }
068
069      /**
070       * Copy constructor.
071       *
072       * @param copyFrom The builder to copy from.
073       */
074      protected Builder(Builder copyFrom) {
075         super(copyFrom);
076      }
077
078      /**
079       * Copy constructor.
080       *
081       * @param copyFrom The bean to copy from.
082       */
083      protected Builder(HtmlStrippedDocSerializer copyFrom) {
084         super(copyFrom);
085      }
086
087      @Override /* Overridden from Builder */
088      public Builder accept(String value) {
089         super.accept(value);
090         return this;
091      }
092
093      @Override /* Overridden from Builder */
094      public Builder addBeanTypes() {
095         super.addBeanTypes();
096         return this;
097      }
098
099      @Override /* Overridden from Builder */
100      public Builder addBeanTypes(boolean value) {
101         super.addBeanTypes(value);
102         return this;
103      }
104
105      @Override /* Overridden from Builder */
106      public Builder addBeanTypesHtml() {
107         super.addBeanTypesHtml();
108         return this;
109      }
110
111      @Override /* Overridden from Builder */
112      public Builder addBeanTypesHtml(boolean value) {
113         super.addBeanTypesHtml(value);
114         return this;
115      }
116
117      @Override /* Overridden from Builder */
118      public Builder addBeanTypesXml() {
119         super.addBeanTypesXml();
120         return this;
121      }
122
123      @Override /* Overridden from Builder */
124      public Builder addBeanTypesXml(boolean value) {
125         super.addBeanTypesXml(value);
126         return this;
127      }
128
129      @Override /* Overridden from Builder */
130      public Builder addKeyValueTableHeaders() {
131         super.addKeyValueTableHeaders();
132         return this;
133      }
134
135      @Override /* Overridden from Builder */
136      public Builder addKeyValueTableHeaders(boolean value) {
137         super.addKeyValueTableHeaders(value);
138         return this;
139      }
140
141      @Override /* Overridden from Builder */
142      public Builder addNamespaceUrisToRoot() {
143         super.addNamespaceUrisToRoot();
144         return this;
145      }
146
147      @Override /* Overridden from Builder */
148      public Builder addNamespaceUrisToRoot(boolean value) {
149         super.addNamespaceUrisToRoot(value);
150         return this;
151      }
152
153      @Override /* Overridden from Builder */
154      public Builder addRootType() {
155         super.addRootType();
156         return this;
157      }
158
159      @Override /* Overridden from Builder */
160      public Builder addRootType(boolean value) {
161         super.addRootType(value);
162         return this;
163      }
164
165      @Override /* Overridden from Builder */
166      public Builder annotations(Annotation...values) {
167         super.annotations(values);
168         return this;
169      }
170
171      @Override /* Overridden from Builder */
172      public Builder apply(AnnotationWorkList work) {
173         super.apply(work);
174         return this;
175      }
176
177      @Override /* Overridden from Builder */
178      public Builder applyAnnotations(Class<?>...from) {
179         super.applyAnnotations(from);
180         return this;
181      }
182
183      @Override /* Overridden from Builder */
184      public Builder applyAnnotations(Object...from) {
185         super.applyAnnotations(from);
186         return this;
187      }
188
189      @Override /* Overridden from Builder */
190      public Builder beanClassVisibility(Visibility value) {
191         super.beanClassVisibility(value);
192         return this;
193      }
194
195      @Override /* Overridden from Builder */
196      public Builder beanConstructorVisibility(Visibility value) {
197         super.beanConstructorVisibility(value);
198         return this;
199      }
200
201      @Override /* Overridden from Builder */
202      public Builder beanContext(BeanContext value) {
203         super.beanContext(value);
204         return this;
205      }
206
207      @Override /* Overridden from Builder */
208      public Builder beanContext(BeanContext.Builder value) {
209         super.beanContext(value);
210         return this;
211      }
212
213      @Override /* Overridden from Builder */
214      public Builder beanDictionary(java.lang.Class<?>...values) {
215         super.beanDictionary(values);
216         return this;
217      }
218
219      @Override /* Overridden from Builder */
220      public Builder beanFieldVisibility(Visibility value) {
221         super.beanFieldVisibility(value);
222         return this;
223      }
224
225      @Override /* Overridden from Builder */
226      public Builder beanInterceptor(Class<?> on, Class<? extends org.apache.juneau.swap.BeanInterceptor<?>> value) {
227         super.beanInterceptor(on, value);
228         return this;
229      }
230
231      @Override /* Overridden from Builder */
232      public Builder beanMapPutReturnsOldValue() {
233         super.beanMapPutReturnsOldValue();
234         return this;
235      }
236
237      @Override /* Overridden from Builder */
238      public Builder beanMethodVisibility(Visibility value) {
239         super.beanMethodVisibility(value);
240         return this;
241      }
242
243      @Override /* Overridden from Builder */
244      public Builder beanProperties(Class<?> beanClass, String properties) {
245         super.beanProperties(beanClass, properties);
246         return this;
247      }
248
249      @Override /* Overridden from Builder */
250      public Builder beanProperties(Map<String,Object> values) {
251         super.beanProperties(values);
252         return this;
253      }
254
255      @Override /* Overridden from Builder */
256      public Builder beanProperties(String beanClassName, String properties) {
257         super.beanProperties(beanClassName, properties);
258         return this;
259      }
260
261      @Override /* Overridden from Builder */
262      public Builder beanPropertiesExcludes(Class<?> beanClass, String properties) {
263         super.beanPropertiesExcludes(beanClass, properties);
264         return this;
265      }
266
267      @Override /* Overridden from Builder */
268      public Builder beanPropertiesExcludes(Map<String,Object> values) {
269         super.beanPropertiesExcludes(values);
270         return this;
271      }
272
273      @Override /* Overridden from Builder */
274      public Builder beanPropertiesExcludes(String beanClassName, String properties) {
275         super.beanPropertiesExcludes(beanClassName, properties);
276         return this;
277      }
278
279      @Override /* Overridden from Builder */
280      public Builder beanPropertiesReadOnly(Class<?> beanClass, String properties) {
281         super.beanPropertiesReadOnly(beanClass, properties);
282         return this;
283      }
284
285      @Override /* Overridden from Builder */
286      public Builder beanPropertiesReadOnly(Map<String,Object> values) {
287         super.beanPropertiesReadOnly(values);
288         return this;
289      }
290
291      @Override /* Overridden from Builder */
292      public Builder beanPropertiesReadOnly(String beanClassName, String properties) {
293         super.beanPropertiesReadOnly(beanClassName, properties);
294         return this;
295      }
296
297      @Override /* Overridden from Builder */
298      public Builder beanPropertiesWriteOnly(Class<?> beanClass, String properties) {
299         super.beanPropertiesWriteOnly(beanClass, properties);
300         return this;
301      }
302
303      @Override /* Overridden from Builder */
304      public Builder beanPropertiesWriteOnly(Map<String,Object> values) {
305         super.beanPropertiesWriteOnly(values);
306         return this;
307      }
308
309      @Override /* Overridden from Builder */
310      public Builder beanPropertiesWriteOnly(String beanClassName, String properties) {
311         super.beanPropertiesWriteOnly(beanClassName, properties);
312         return this;
313      }
314
315      @Override /* Overridden from Builder */
316      public Builder beansRequireDefaultConstructor() {
317         super.beansRequireDefaultConstructor();
318         return this;
319      }
320
321      @Override /* Overridden from Builder */
322      public Builder beansRequireSerializable() {
323         super.beansRequireSerializable();
324         return this;
325      }
326
327      @Override /* Overridden from Builder */
328      public Builder beansRequireSettersForGetters() {
329         super.beansRequireSettersForGetters();
330         return this;
331      }
332
333      @Override /* Overridden from Context.Builder */
334      public HtmlStrippedDocSerializer build() {
335         return cache(CACHE).build(HtmlStrippedDocSerializer.class);
336      }
337
338      @Override /* Overridden from Builder */
339      public Builder cache(Cache<HashKey,? extends org.apache.juneau.Context> value) {
340         super.cache(value);
341         return this;
342      }
343
344      @Override /* Overridden from Context.Builder */
345      public Builder copy() {
346         return new Builder(this);
347      }
348
349      @Override /* Overridden from Builder */
350      public Builder debug() {
351         super.debug();
352         return this;
353      }
354
355      @Override /* Overridden from Builder */
356      public Builder debug(boolean value) {
357         super.debug(value);
358         return this;
359      }
360
361      @Override /* Overridden from Builder */
362      public Builder defaultNamespace(Namespace value) {
363         super.defaultNamespace(value);
364         return this;
365      }
366
367      @Override /* Overridden from Builder */
368      public Builder detectRecursions() {
369         super.detectRecursions();
370         return this;
371      }
372
373      @Override /* Overridden from Builder */
374      public Builder detectRecursions(boolean value) {
375         super.detectRecursions(value);
376         return this;
377      }
378
379      @Override /* Overridden from Builder */
380      public Builder dictionaryOn(Class<?> on, java.lang.Class<?>...values) {
381         super.dictionaryOn(on, values);
382         return this;
383      }
384
385      @Override /* Overridden from Builder */
386      public Builder disableAutoDetectNamespaces() {
387         super.disableAutoDetectNamespaces();
388         return this;
389      }
390
391      @Override /* Overridden from Builder */
392      public Builder disableAutoDetectNamespaces(boolean value) {
393         super.disableAutoDetectNamespaces(value);
394         return this;
395      }
396
397      @Override /* Overridden from Builder */
398      public Builder disableBeansRequireSomeProperties() {
399         super.disableBeansRequireSomeProperties();
400         return this;
401      }
402
403      @Override /* Overridden from Builder */
404      public Builder disableDetectLabelParameters() {
405         super.disableDetectLabelParameters();
406         return this;
407      }
408
409      @Override /* Overridden from Builder */
410      public Builder disableDetectLabelParameters(boolean value) {
411         super.disableDetectLabelParameters(value);
412         return this;
413      }
414
415      @Override /* Overridden from Builder */
416      public Builder disableDetectLinksInStrings() {
417         super.disableDetectLinksInStrings();
418         return this;
419      }
420
421      @Override /* Overridden from Builder */
422      public Builder disableDetectLinksInStrings(boolean value) {
423         super.disableDetectLinksInStrings(value);
424         return this;
425      }
426
427      @Override /* Overridden from Builder */
428      public Builder disableIgnoreMissingSetters() {
429         super.disableIgnoreMissingSetters();
430         return this;
431      }
432
433      @Override /* Overridden from Builder */
434      public Builder disableIgnoreTransientFields() {
435         super.disableIgnoreTransientFields();
436         return this;
437      }
438
439      @Override /* Overridden from Builder */
440      public Builder disableIgnoreUnknownNullBeanProperties() {
441         super.disableIgnoreUnknownNullBeanProperties();
442         return this;
443      }
444
445      @Override /* Overridden from Builder */
446      public Builder disableInterfaceProxies() {
447         super.disableInterfaceProxies();
448         return this;
449      }
450
451      @Override /* Overridden from Builder */
452      public Builder enableNamespaces() {
453         super.enableNamespaces();
454         return this;
455      }
456
457      @Override /* Overridden from Builder */
458      public Builder enableNamespaces(boolean value) {
459         super.enableNamespaces(value);
460         return this;
461      }
462
463      @Override /* Overridden from Builder */
464      public <T> Builder example(Class<T> pojoClass, String json) {
465         super.example(pojoClass, json);
466         return this;
467      }
468
469      @Override /* Overridden from Builder */
470      public <T> Builder example(Class<T> pojoClass, T o) {
471         super.example(pojoClass, o);
472         return this;
473      }
474
475      @Override /* Overridden from Builder */
476      public Builder fileCharset(Charset value) {
477         super.fileCharset(value);
478         return this;
479      }
480
481      @Override /* Overridden from Builder */
482      public Builder findFluentSetters() {
483         super.findFluentSetters();
484         return this;
485      }
486
487      @Override /* Overridden from Builder */
488      public Builder findFluentSetters(Class<?> on) {
489         super.findFluentSetters(on);
490         return this;
491      }
492
493      @Override /* Overridden from Context.Builder */
494      public HashKey hashKey() {
495         return super.hashKey();
496      }
497
498      @Override /* Overridden from Builder */
499      public Builder ignoreInvocationExceptionsOnGetters() {
500         super.ignoreInvocationExceptionsOnGetters();
501         return this;
502      }
503
504      @Override /* Overridden from Builder */
505      public Builder ignoreInvocationExceptionsOnSetters() {
506         super.ignoreInvocationExceptionsOnSetters();
507         return this;
508      }
509
510      @Override /* Overridden from Builder */
511      public Builder ignoreRecursions() {
512         super.ignoreRecursions();
513         return this;
514      }
515
516      @Override /* Overridden from Builder */
517      public Builder ignoreRecursions(boolean value) {
518         super.ignoreRecursions(value);
519         return this;
520      }
521
522      @Override /* Overridden from Builder */
523      public Builder ignoreUnknownBeanProperties() {
524         super.ignoreUnknownBeanProperties();
525         return this;
526      }
527
528      @Override /* Overridden from Builder */
529      public Builder ignoreUnknownEnumValues() {
530         super.ignoreUnknownEnumValues();
531         return this;
532      }
533
534      @Override /* Overridden from Builder */
535      public Builder impl(Context value) {
536         super.impl(value);
537         return this;
538      }
539
540      @Override /* Overridden from Builder */
541      public Builder implClass(Class<?> interfaceClass, Class<?> implClass) {
542         super.implClass(interfaceClass, implClass);
543         return this;
544      }
545
546      @Override /* Overridden from Builder */
547      public Builder implClasses(Map<Class<?>,Class<?>> values) {
548         super.implClasses(values);
549         return this;
550      }
551
552      @Override /* Overridden from Builder */
553      public Builder initialDepth(int value) {
554         super.initialDepth(value);
555         return this;
556      }
557
558      @Override /* Overridden from Builder */
559      public Builder interfaceClass(Class<?> on, Class<?> value) {
560         super.interfaceClass(on, value);
561         return this;
562      }
563
564      @Override /* Overridden from Builder */
565      public Builder interfaces(java.lang.Class<?>...value) {
566         super.interfaces(value);
567         return this;
568      }
569
570      @Override /* Overridden from Builder */
571      public Builder keepNullProperties() {
572         super.keepNullProperties();
573         return this;
574      }
575
576      @Override /* Overridden from Builder */
577      public Builder keepNullProperties(boolean value) {
578         super.keepNullProperties(value);
579         return this;
580      }
581
582      @Override /* Overridden from Builder */
583      public Builder labelParameter(String value) {
584         super.labelParameter(value);
585         return this;
586      }
587
588      @Override /* Overridden from Builder */
589      public Builder listener(Class<? extends org.apache.juneau.serializer.SerializerListener> value) {
590         super.listener(value);
591         return this;
592      }
593
594      @Override /* Overridden from Builder */
595      public Builder locale(Locale value) {
596         super.locale(value);
597         return this;
598      }
599
600      @Override /* Overridden from Builder */
601      public Builder maxDepth(int value) {
602         super.maxDepth(value);
603         return this;
604      }
605
606      @Override /* Overridden from Builder */
607      public Builder maxIndent(int value) {
608         super.maxIndent(value);
609         return this;
610      }
611
612      @Override /* Overridden from Builder */
613      public Builder mediaType(MediaType value) {
614         super.mediaType(value);
615         return this;
616      }
617
618      @Override /* Overridden from Builder */
619      public Builder namespaces(Namespace...values) {
620         super.namespaces(values);
621         return this;
622      }
623
624      @Override /* Overridden from Builder */
625      public Builder notBeanClasses(java.lang.Class<?>...values) {
626         super.notBeanClasses(values);
627         return this;
628      }
629
630      @Override /* Overridden from Builder */
631      public Builder notBeanPackages(String...values) {
632         super.notBeanPackages(values);
633         return this;
634      }
635
636      @Override /* Overridden from Builder */
637      public Builder ns() {
638         super.ns();
639         return this;
640      }
641
642      @Override /* Overridden from Builder */
643      public Builder produces(String value) {
644         super.produces(value);
645         return this;
646      }
647
648      @Override /* Overridden from Builder */
649      public Builder propertyNamer(Class<?> on, Class<? extends org.apache.juneau.PropertyNamer> value) {
650         super.propertyNamer(on, value);
651         return this;
652      }
653
654      @Override /* Overridden from Builder */
655      public Builder propertyNamer(Class<? extends org.apache.juneau.PropertyNamer> value) {
656         super.propertyNamer(value);
657         return this;
658      }
659
660      @Override /* Overridden from Builder */
661      public Builder quoteChar(char value) {
662         super.quoteChar(value);
663         return this;
664      }
665
666      @Override /* Overridden from Builder */
667      public Builder quoteCharOverride(char value) {
668         super.quoteCharOverride(value);
669         return this;
670      }
671
672      @Override /* Overridden from Builder */
673      public Builder sortCollections() {
674         super.sortCollections();
675         return this;
676      }
677
678      @Override /* Overridden from Builder */
679      public Builder sortCollections(boolean value) {
680         super.sortCollections(value);
681         return this;
682      }
683
684      @Override /* Overridden from Builder */
685      public Builder sortMaps() {
686         super.sortMaps();
687         return this;
688      }
689
690      @Override /* Overridden from Builder */
691      public Builder sortMaps(boolean value) {
692         super.sortMaps(value);
693         return this;
694      }
695
696      @Override /* Overridden from Builder */
697      public Builder sortProperties() {
698         super.sortProperties();
699         return this;
700      }
701
702      @Override /* Overridden from Builder */
703      public Builder sortProperties(java.lang.Class<?>...on) {
704         super.sortProperties(on);
705         return this;
706      }
707
708      @Override /* Overridden from Builder */
709      public Builder sq() {
710         super.sq();
711         return this;
712      }
713
714      @Override /* Overridden from Builder */
715      public Builder stopClass(Class<?> on, Class<?> value) {
716         super.stopClass(on, value);
717         return this;
718      }
719
720      @Override /* Overridden from Builder */
721      public Builder streamCharset(Charset value) {
722         super.streamCharset(value);
723         return this;
724      }
725
726      @Override /* Overridden from Builder */
727      public <T,S> Builder swap(Class<T> normalClass, Class<S> swappedClass, ThrowingFunction<T,S> swapFunction) {
728         super.swap(normalClass, swappedClass, swapFunction);
729         return this;
730      }
731
732      @Override /* Overridden from Builder */
733      public <T,S> Builder swap(Class<T> normalClass, Class<S> swappedClass, ThrowingFunction<T,S> swapFunction, ThrowingFunction<S,T> unswapFunction) {
734         super.swap(normalClass, swappedClass, swapFunction, unswapFunction);
735         return this;
736      }
737
738      @Override /* Overridden from Builder */
739      public Builder swaps(Class<?>...values) {
740         super.swaps(values);
741         return this;
742      }
743
744      @Override /* Overridden from Builder */
745      public Builder swaps(Object...values) {
746         super.swaps(values);
747         return this;
748      }
749
750      @Override /* Overridden from Builder */
751      public Builder timeZone(TimeZone value) {
752         super.timeZone(value);
753         return this;
754      }
755
756      @Override /* Overridden from Builder */
757      public Builder trimEmptyCollections() {
758         super.trimEmptyCollections();
759         return this;
760      }
761
762      @Override /* Overridden from Builder */
763      public Builder trimEmptyCollections(boolean value) {
764         super.trimEmptyCollections(value);
765         return this;
766      }
767
768      @Override /* Overridden from Builder */
769      public Builder trimEmptyMaps() {
770         super.trimEmptyMaps();
771         return this;
772      }
773
774      @Override /* Overridden from Builder */
775      public Builder trimEmptyMaps(boolean value) {
776         super.trimEmptyMaps(value);
777         return this;
778      }
779
780      @Override /* Overridden from Builder */
781      public Builder trimStrings() {
782         super.trimStrings();
783         return this;
784      }
785
786      @Override /* Overridden from Builder */
787      public Builder trimStrings(boolean value) {
788         super.trimStrings(value);
789         return this;
790      }
791
792      @Override /* Overridden from Builder */
793      public Builder type(Class<? extends org.apache.juneau.Context> value) {
794         super.type(value);
795         return this;
796      }
797
798      @Override /* Overridden from Builder */
799      public Builder typeName(Class<?> on, String value) {
800         super.typeName(on, value);
801         return this;
802      }
803
804      @Override /* Overridden from Builder */
805      public Builder typePropertyName(Class<?> on, String value) {
806         super.typePropertyName(on, value);
807         return this;
808      }
809
810      @Override /* Overridden from Builder */
811      public Builder typePropertyName(String value) {
812         super.typePropertyName(value);
813         return this;
814      }
815
816      @Override /* Overridden from Builder */
817      public Builder uriAnchorText(AnchorText value) {
818         super.uriAnchorText(value);
819         return this;
820      }
821
822      @Override /* Overridden from Builder */
823      public Builder uriContext(UriContext value) {
824         super.uriContext(value);
825         return this;
826      }
827
828      @Override /* Overridden from Builder */
829      public Builder uriRelativity(UriRelativity value) {
830         super.uriRelativity(value);
831         return this;
832      }
833
834      @Override /* Overridden from Builder */
835      public Builder uriResolution(UriResolution value) {
836         super.uriResolution(value);
837         return this;
838      }
839
840      @Override /* Overridden from Builder */
841      public Builder useEnumNames() {
842         super.useEnumNames();
843         return this;
844      }
845
846      @Override /* Overridden from Builder */
847      public Builder useJavaBeanIntrospector() {
848         super.useJavaBeanIntrospector();
849         return this;
850      }
851
852      @Override /* Overridden from Builder */
853      public Builder useWhitespace() {
854         super.useWhitespace();
855         return this;
856      }
857
858      @Override /* Overridden from Builder */
859      public Builder useWhitespace(boolean value) {
860         super.useWhitespace(value);
861         return this;
862      }
863
864      @Override /* Overridden from Builder */
865      public Builder ws() {
866         super.ws();
867         return this;
868      }
869   }
870
871   /** Default serializer, all default settings. */
872   public static final HtmlStrippedDocSerializer DEFAULT = new HtmlStrippedDocSerializer(create());
873
874   /**
875    * Creates a new builder for this object.
876    *
877    * @return A new builder.
878    */
879   public static Builder create() {
880      return new Builder();
881   }
882
883   /**
884    * Constructor.
885    *
886    * @param builder The builder for this object.
887    */
888   public HtmlStrippedDocSerializer(Builder builder) {
889      super(builder);
890   }
891
892   @Override /* Overridden from Context */
893   public Builder copy() {
894      return new Builder(this);
895   }
896
897   @Override /* Overridden from Context */
898   public HtmlStrippedDocSerializerSession.Builder createSession() {
899      return HtmlStrippedDocSerializerSession.create(this);
900   }
901
902   @Override /* Overridden from Context */
903   public HtmlStrippedDocSerializerSession getSession() { return createSession().build(); }
904}