From 8f7b118701bf28601c409f01b2da45e855c3eb81 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Wed, 13 Mar 2019 15:12:51 +0100 Subject: [PATCH] Ensure PDF version of Reference Manual does not contain HTML tags Prior to this commit, the PDF version of the Spring Reference Manual contained HTML tags in code examples due to the fact that Asciidoctor converts bold formatting (i.e., elements wrapped in `**` or `*`) within source code blocks into HTML tags even for PDF rendering. This commit addresses this issue by removing all bold formatting from example code blocks. Closes gh-22577 --- src/docs/asciidoc/core/core-aop.adoc | 6 +-- src/docs/asciidoc/core/core-appendix.adoc | 2 +- src/docs/asciidoc/core/core-beans.adoc | 52 +++++++++---------- src/docs/asciidoc/core/core-validation.adoc | 2 +- src/docs/asciidoc/data-access.adoc | 12 ++--- src/docs/asciidoc/integration-appendix.adoc | 8 +-- src/docs/asciidoc/integration.adoc | 30 +++++------ .../asciidoc/languages/dynamic-languages.adoc | 4 +- src/docs/asciidoc/testing.adoc | 24 ++++----- src/docs/asciidoc/web/webflux-webclient.adoc | 2 +- src/docs/asciidoc/web/webflux.adoc | 6 +-- src/docs/asciidoc/web/webmvc.adoc | 10 ++-- src/docs/asciidoc/web/websocket.adoc | 6 +-- 13 files changed, 81 insertions(+), 83 deletions(-) diff --git a/src/docs/asciidoc/core/core-aop.adoc b/src/docs/asciidoc/core/core-aop.adoc index fbaf5c276a7..af738a18be9 100644 --- a/src/docs/asciidoc/core/core-aop.adoc +++ b/src/docs/asciidoc/core/core-aop.adoc @@ -1808,14 +1808,14 @@ respectively. For example, the previous pointcut can be better written as follow ==== [source,xml,indent=0] -[subs="verbatim,quotes"] +[subs="verbatim"] ---- + expression="execution(* com.xyz.myapp.service.*.*(..)) and this(service)"/> @@ -3331,7 +3331,7 @@ the following example: class="foo.StubEntitlementCalculationService"/> - **** + ---- ==== diff --git a/src/docs/asciidoc/core/core-appendix.adoc b/src/docs/asciidoc/core/core-appendix.adoc index 2909e4e9d0c..41b76d0e23c 100644 --- a/src/docs/asciidoc/core/core-appendix.adoc +++ b/src/docs/asciidoc/core/core-appendix.adoc @@ -875,7 +875,7 @@ use the `NamespaceHandlerSupport` class: public class MyNamespaceHandler extends NamespaceHandlerSupport { public void init() { - **registerBeanDefinitionParser("dateformat", new SimpleDateFormatBeanDefinitionParser());** + registerBeanDefinitionParser("dateformat", new SimpleDateFormatBeanDefinitionParser()); } } diff --git a/src/docs/asciidoc/core/core-beans.adoc b/src/docs/asciidoc/core/core-beans.adoc index 728b1c47d01..e52ab3898b5 100644 --- a/src/docs/asciidoc/core/core-beans.adoc +++ b/src/docs/asciidoc/core/core-beans.adoc @@ -2806,7 +2806,7 @@ to do so: [source,java,indent=0] [subs="verbatim,quotes"] ---- - **@RequestScope** + @RequestScope @Component public class LoginAction { // ... @@ -2846,7 +2846,7 @@ When using annotation-driven components or Java configuration, you can use the [source,java,indent=0] [subs="verbatim,quotes"] ---- - **@SessionScope** + @SessionScope @Component public class UserPreferences { // ... @@ -2885,7 +2885,7 @@ following example shows how to do so: [source,java,indent=0] [subs="verbatim,quotes"] ---- - **@ApplicationScope** + @ApplicationScope @Component public class AppPreferences { // ... @@ -4893,7 +4893,7 @@ primary `MovieCatalog`: public class MovieConfiguration { @Bean - **@Primary** + @Primary public MovieCatalog firstMovieCatalog() { ... } @Bean @@ -4938,7 +4938,7 @@ The corresponding bean definitions follow: - + @@ -4971,7 +4971,7 @@ shown in the following example: public class MovieRecommender { @Autowired - **@Qualifier("main")** + @Qualifier("main") private MovieCatalog movieCatalog; // ... @@ -4993,7 +4993,7 @@ method parameters, as shown in the following example: private CustomerPreferenceDao customerPreferenceDao; @Autowired - public void prepare(**@Qualifier("main")**MovieCatalog movieCatalog, + public void prepare(@Qualifier("main") MovieCatalog movieCatalog, CustomerPreferenceDao customerPreferenceDao) { this.movieCatalog = movieCatalog; this.customerPreferenceDao = customerPreferenceDao; @@ -5113,7 +5113,7 @@ provide the `@Qualifier` annotation within your definition, as the following exa ---- @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) - **@Qualifier** + @Qualifier public @interface Genre { String value(); @@ -5131,13 +5131,13 @@ following example shows: public class MovieRecommender { @Autowired - **@Genre("Action")** + @Genre("Action") private MovieCatalog actionCatalog; private MovieCatalog comedyCatalog; @Autowired - public void setComedyCatalog(**@Genre("Comedy")** MovieCatalog comedyCatalog) { + public void setComedyCatalog(@Genre("Comedy") MovieCatalog comedyCatalog) { this.comedyCatalog = comedyCatalog; } @@ -5169,12 +5169,12 @@ demonstrates both approaches: - **** + - **** + @@ -5496,7 +5496,7 @@ named `movieFinder` injected into its setter method: private MovieFinder movieFinder; - **@Resource** + @Resource public void setMovieFinder(MovieFinder movieFinder) { this.movieFinder = movieFinder; } @@ -5705,7 +5705,7 @@ You can then use `@SessionScope` without declaring the `proxyMode` as follows: [subs="verbatim,quotes"] ---- @Service - **@SessionScope** + @SessionScope public class SessionScopedService { // ... } @@ -5719,7 +5719,7 @@ You can also override the value for the `proxyMode`, as the following example sh [subs="verbatim,quotes"] ---- @Service - **@SessionScope(proxyMode = ScopedProxyMode.INTERFACES)** + @SessionScope(proxyMode = ScopedProxyMode.INTERFACES) public class SessionScopedUserService implements UserService { // ... } @@ -6248,7 +6248,7 @@ technique: [subs="verbatim,quotes"] ---- @Component - **@Qualifier("Action")** + @Qualifier("Action") public class ActionMovieCatalog implements MovieCatalog { // ... } @@ -6258,7 +6258,7 @@ technique: [subs="verbatim,quotes"] ---- @Component - **@Genre("Action")** + @Genre("Action") public class ActionMovieCatalog implements MovieCatalog { // ... } @@ -6268,7 +6268,7 @@ technique: [subs="verbatim,quotes"] ---- @Component - **@Offline** + @Offline public class CachingMovieCatalog implements MovieCatalog { // ... } @@ -7189,7 +7189,7 @@ as the following example shows: public class MyConfiguration { @Bean - **@Scope("prototype")** + @Scope("prototype") public Encryptor encryptor() { // ... } @@ -7217,7 +7217,7 @@ it resembles the following: ---- // an HTTP Session-scoped bean exposed as a proxy @Bean - **@SessionScope** + @SessionScope public UserPreferences userPreferences() { return new UserPreferences(); } @@ -7298,7 +7298,7 @@ annotation, as the following example shows: public class AppConfig { @Bean - **@Description("Provides a basic example of a bean")** + @Description("Provides a basic example of a bean") public Thing thing() { return new Thing(); } @@ -8127,7 +8127,7 @@ can rewrite the `dataSource` configuration as follows: [subs="verbatim,quotes"] ---- @Configuration - **@Profile("development")** + @Profile("development") public class StandaloneDataConfig { @Bean @@ -8145,7 +8145,7 @@ can rewrite the `dataSource` configuration as follows: [subs="verbatim,quotes"] ---- @Configuration - **@Profile("production")** + @Profile("production") public class JndiDataConfig { @Bean(destroyMethod="") @@ -8186,7 +8186,7 @@ of creating a custom composed annotation. The following example defines a custom ---- @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) - **@Profile("production")** + @Profile("production") public @interface Production { } ---- @@ -8423,7 +8423,7 @@ following example: [subs="verbatim,quotes"] ---- @Configuration - **@Profile("default")** + @Profile("default") public class DefaultDataConfig { @Bean @@ -8540,7 +8540,7 @@ a call to `testBean.getName()` returns `myTestBean`: [subs="verbatim,quotes"] ---- @Configuration - **@PropertySource("classpath:/com/myco/app.properties")** + @PropertySource("classpath:/com/myco/app.properties") public class AppConfig { @Autowired diff --git a/src/docs/asciidoc/core/core-validation.adoc b/src/docs/asciidoc/core/core-validation.adoc index 8b749accf2e..7795ea2fac0 100644 --- a/src/docs/asciidoc/core/core-validation.adoc +++ b/src/docs/asciidoc/core/core-validation.adoc @@ -707,7 +707,7 @@ implementation of an `initBinder(..)` method: protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { - **this.customPropertyEditorRegistrar.registerCustomEditors(binder);** + this.customPropertyEditorRegistrar.registerCustomEditors(binder); } // other methods to do with registering a User diff --git a/src/docs/asciidoc/data-access.adoc b/src/docs/asciidoc/data-access.adoc index 9583e6ea1b4..25ce53fa595 100644 --- a/src/docs/asciidoc/data-access.adoc +++ b/src/docs/asciidoc/data-access.adoc @@ -1078,7 +1078,7 @@ Consider the following class definition: [subs="verbatim,quotes"] ---- // the service class that we want to make transactional - **@Transactional** + @Transactional public class DefaultFooService implements FooService { Foo getFoo(String fooName); @@ -1553,7 +1553,7 @@ The following code shows the simple profiling aspect discussed earlier: this.order = order; } - // this method *is* the around advice + // this method is the around advice public Object profile(ProceedingJoinPoint call) throws Throwable { Object returnValue; StopWatch clock = new StopWatch(getClass().getName()); @@ -1817,7 +1817,7 @@ with an anonymous class, as follows: [source,java,indent=0] [subs="verbatim,quotes"] ---- - transactionTemplate.execute(new **TransactionCallbackWithoutResult**() { + transactionTemplate.execute(new TransactionCallbackWithoutResult() { protected void doInTransactionWithoutResult(TransactionStatus status) { updateOperation1(); updateOperation2(); @@ -1840,7 +1840,7 @@ Code within the callback can roll the transaction back by calling the updateOperation1(); updateOperation2(); } catch (SomeBusinessException ex) { - **status.setRollbackOnly();** + status.setRollbackOnly(); } } }); @@ -2606,7 +2606,7 @@ the setter for the `DataSource`. This leads to DAOs that resemble the following: private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { - **this.jdbcTemplate = new JdbcTemplate(dataSource);** + this.jdbcTemplate = new JdbcTemplate(dataSource); } // JDBC-backed implementations of the methods on the CorporateEventDao follow... @@ -5044,7 +5044,7 @@ errors in the SQL it executes from the scripts, as the following example shows: [source,xml,indent=0] [subs="verbatim,quotes"] ---- - + ---- diff --git a/src/docs/asciidoc/integration-appendix.adoc b/src/docs/asciidoc/integration-appendix.adoc index 9f2883dc3be..067df57d7af 100644 --- a/src/docs/asciidoc/integration-appendix.adoc +++ b/src/docs/asciidoc/integration-appendix.adoc @@ -47,12 +47,12 @@ The following example shows how to use JNDI to look up a data source without the [source,xml,indent=0] [subs="verbatim,quotes"] ---- - + - + ---- ==== @@ -64,11 +64,11 @@ schema: [source,xml,indent=0] [subs="verbatim,quotes"] ---- - + - + ---- ==== diff --git a/src/docs/asciidoc/integration.adoc b/src/docs/asciidoc/integration.adoc index be27bbf953f..b3946ece979 100644 --- a/src/docs/asciidoc/integration.adoc +++ b/src/docs/asciidoc/integration.adoc @@ -2119,7 +2119,7 @@ containers that ships with Spring (in this case, `DefaultMessageListenerContaine - **** + ---- ==== @@ -2219,17 +2219,17 @@ POJO that we can make into an MDP through the following configuration: [subs="verbatim,quotes"] ---- - ** + - ** + - **** + ---- ==== @@ -2346,7 +2346,7 @@ Consider the following bean definition: - **** + ---- ==== @@ -2818,7 +2818,7 @@ namespace elements, you need to reference the JMS schema, as the following examp xmlns:jms="http://www.springframework.org/schema/jms" <1> xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - **http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd**"> + http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"> @@ -7323,13 +7323,13 @@ do yourself a favor and read < findBook(String name) ---- ==== @@ -7977,11 +7977,11 @@ Spring's abstraction and the other using JCache: [source,java,indent=0] [subs="verbatim,quotes"] ---- - @Cacheable(cacheNames="books", **key="#isbn"**) + @Cacheable(cacheNames="books", key="#isbn") public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed) @CacheResult(cacheName="books") - public Book findBook(**@CacheKey** ISBN isbn, boolean checkWarehouse, boolean includeUsed) + public Book findBook(@CacheKey ISBN isbn, boolean checkWarehouse, boolean includeUsed) ---- ==== @@ -8000,8 +8000,8 @@ invoking the method again: [source,java,indent=0] [subs="verbatim,quotes"] ---- - @CacheResult(cacheName="books", **exceptionCacheName="failures"** - **cachedExceptions = InvalidIsbnNotFoundException.class**) + @CacheResult(cacheName="books", exceptionCacheName="failures" + cachedExceptions = InvalidIsbnNotFoundException.class) public Book findBook(ISBN isbn) ---- ==== diff --git a/src/docs/asciidoc/languages/dynamic-languages.adoc b/src/docs/asciidoc/languages/dynamic-languages.adoc index ebad1c630f5..db3092a7cbd 100644 --- a/src/docs/asciidoc/languages/dynamic-languages.adoc +++ b/src/docs/asciidoc/languages/dynamic-languages.adoc @@ -417,9 +417,9 @@ does not work: ---- - + - + diff --git a/src/docs/asciidoc/testing.adoc b/src/docs/asciidoc/testing.adoc index 8afc4f7e23a..379bcc789ba 100644 --- a/src/docs/asciidoc/testing.adoc +++ b/src/docs/asciidoc/testing.adoc @@ -3346,11 +3346,11 @@ The first code listing shows a JUnit 4 based implementation of the test class th ---- @RunWith(SpringRunner.class) // specifies the Spring configuration to load for this test fixture - **@ContextConfiguration("repository-config.xml")** + @ContextConfiguration("repository-config.xml") public class HibernateTitleRepositoryTests { // this instance will be dependency injected by type - **@Autowired** + @Autowired private HibernateTitleRepository titleRepository; @Test @@ -3371,13 +3371,13 @@ follows: ---- @RunWith(SpringRunner.class) // specifies the Spring configuration to load for this test fixture - **@ContextConfiguration("repository-config.xml")** + @ContextConfiguration("repository-config.xml") public class HibernateTitleRepositoryTests { // this instance will be dependency injected by type private HibernateTitleRepository titleRepository; - **@Autowired** + @Autowired public void setTitleRepository(HibernateTitleRepository titleRepository) { this.titleRepository = titleRepository; } @@ -3406,7 +3406,7 @@ shows this configuration: http://www.springframework.org/schema/beans/spring-beans.xsd"> - + @@ -3435,8 +3435,8 @@ method in the superclass as well): @Autowired @Override - public void setDataSource(**@Qualifier("myDataSource")** DataSource dataSource) { - **super**.setDataSource(dataSource); + public void setDataSource(@Qualifier("myDataSource") DataSource dataSource) { + super.setDataSource(dataSource); } // ... @@ -3809,11 +3809,11 @@ following example shows the relevant annotations in bold: ---- @RunWith(SpringRunner.class) @ContextConfiguration - **@Transactional(transactionManager = "txMgr")** - **@Commit** + @Transactional(transactionManager = "txMgr") + @Commit public class FictitiousTransactionalTest { - **@BeforeTransaction** + @BeforeTransaction void verifyInitialDatabaseState() { // logic to verify the initial state before a transaction is started } @@ -3825,7 +3825,7 @@ following example shows the relevant annotations in bold: @Test // overrides the class-level @Commit setting - **@Rollback** + @Rollback public void modifyDatabaseWithinTransaction() { // logic which uses the test data and modifies database state } @@ -3835,7 +3835,7 @@ following example shows the relevant annotations in bold: // execute "tear down" logic within the transaction } - **@AfterTransaction** + @AfterTransaction void verifyFinalDatabaseState() { // logic to verify the final state after transaction has rolled back } diff --git a/src/docs/asciidoc/web/webflux-webclient.adoc b/src/docs/asciidoc/web/webflux-webclient.adoc index 6964090f820..78c7045f507 100644 --- a/src/docs/asciidoc/web/webflux-webclient.adoc +++ b/src/docs/asciidoc/web/webflux-webclient.adoc @@ -475,7 +475,7 @@ through the `syncBody` method, as the following example shows: Mono result = client.post() .uri("/path", id) - .syncBody(**builder.build()**) + .syncBody(builder.build()) .retrieve() .bodyToMono(Void.class); ---- diff --git a/src/docs/asciidoc/web/webflux.adoc b/src/docs/asciidoc/web/webflux.adoc index 57a5bbc94c5..72d977482a9 100644 --- a/src/docs/asciidoc/web/webflux.adoc +++ b/src/docs/asciidoc/web/webflux.adoc @@ -1339,7 +1339,7 @@ as the following example shows: [source,java,indent=0] [subs="verbatim,quotes"] ---- - @PostMapping(path = "/pets", **consumes = "application/json"**) + @PostMapping(path = "/pets", consumes = "application/json") public void addPet(@RequestBody Pet pet) { // ... } @@ -1368,7 +1368,7 @@ content types that a controller method produces, as the following example shows: [source,java,indent=0] [subs="verbatim,quotes"] ---- - @GetMapping(path = "/pets/{petId}", **produces = "application/json;charset=UTF-8"**) + @GetMapping(path = "/pets/{petId}", produces = "application/json;charset=UTF-8") @ResponseBody public Pet getPet(@PathVariable String petId) { // ... @@ -2023,7 +2023,7 @@ You can automatically apply validation after data binding by adding the [subs="verbatim,quotes"] ---- @PostMapping("/owners/{ownerId}/pets/{petId}/edit") - public String processSubmit(**@Valid @ModelAttribute("pet") Pet pet**, BindingResult result) { <1> + public String processSubmit(@Valid @ModelAttribute("pet") Pet pet, BindingResult result) { <1> if (result.hasErrors()) { return "petForm"; } diff --git a/src/docs/asciidoc/web/webmvc.adoc b/src/docs/asciidoc/web/webmvc.adoc index bb67800b463..6d097493f45 100644 --- a/src/docs/asciidoc/web/webmvc.adoc +++ b/src/docs/asciidoc/web/webmvc.adoc @@ -2078,7 +2078,7 @@ The following example shows how to do so: // ... @GetMapping - public String setupForm(**@RequestParam("petId") int petId**, Model model) { <1> + public String setupForm(@RequestParam("petId") int petId, Model model) { <1> Pet pet = this.clinic.loadPet(petId); model.addAttribute("pet", pet); return "petForm"; @@ -2633,8 +2633,8 @@ probably want it deserialized from JSON (similar to `@RequestBody`). Use the [subs="verbatim,quotes"] ---- @PostMapping("/") -public String handle(**@RequestPart("meta-data") MetaData metadata, - @RequestPart("file-data") MultipartFile file**) { +public String handle(@RequestPart("meta-data") MetaData metadata, + @RequestPart("file-data") MultipartFile file) { // ... } ---- @@ -2652,8 +2652,8 @@ as the following example shows: [subs="verbatim,quotes"] ---- @PostMapping("/") -public String handle(**@Valid** @RequestPart("meta-data") MetaData metadata, - **BindingResult result**) { +public String handle(@Valid @RequestPart("meta-data") MetaData metadata, + BindingResult result) { // ... } ---- diff --git a/src/docs/asciidoc/web/websocket.adoc b/src/docs/asciidoc/web/websocket.adoc index b5683c7f624..7538b9ac929 100644 --- a/src/docs/asciidoc/web/websocket.adoc +++ b/src/docs/asciidoc/web/websocket.adoc @@ -1743,7 +1743,7 @@ The following example shows how to do so in Java configuration: @Override public void configureMessageBroker(MessageBrokerRegistry registry) { - registry.setPathMatcher(**new AntPathMatcher("."));** + registry.setPathMatcher(new AntPathMatcher(".")); registry.enableStompBrokerRelay("/queue", "/topic"); registry.setApplicationDestinationPrefixes("/app"); } @@ -1766,16 +1766,14 @@ The following example shows the XML configuration equivalent of the preceding ex http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd"> - + - ** - ** ----