Martijn Dashorst created WICKET-7180:
----------------------------------------

             Summary: User manual claude review
                 Key: WICKET-7180
                 URL: https://issues.apache.org/jira/browse/WICKET-7180
             Project: Wicket
          Issue Type: Improvement
            Reporter: Martijn Dashorst


h1. Apache Wicket User Guide Review

The user guide consists of *221 AsciiDoc files* across *30+ chapters*, totaling 
a substantial reference work. Here are the findings organized by severity.

----

h2. 1. CRITICAL: Guide-Wide Issues

h3. The guide says "Wicket 9.x" but lives in the 10.x codebase

* {{single.adoc:1}} -- Title reads {{= Wicket 9.x Reference Guide}}
* {{introduction.adoc:30}} -- Still says "this guide is based on Wicket 9"
* The *javax to jakarta namespace migration* (the single biggest Wicket 10.x 
change) is never mentioned anywhere

h3. Dead URLs used throughout the entire guide

|| URL || Issue || Used in ||
| {{https://wicket-guide.herokuapp.com/}} | Heroku free tier shut down Nov 2022 
| {{single.adoc:13}}, {{howToSource.adoc:2}}, and every 
\{{wicket_tutorial_examples_url}} reference |
| {{http://examples9x.wicket.apache.org}} | HTTP not HTTPS, 9x-specific | 
{{single.adoc:12}} |
| {{http://code.google.com/p/google-guice/}} | Google Code shut down 2016 | 
{{jee.adoc:10}} |
| {{https://ci.apache.org/projects/wicket/apidocs/9.x/...}} | ci.apache.org is 
dead | {{keepControl_9.adoc:42}} |
| {{http://wicketinaction.com}} | Likely dead/parked domain | 
{{introduction.adoc:5}} |
| {{http://www.wicket-library.com/...}} | Dead domain | 
{{wicketstuff_5.adoc:42}} |
| {{http://docs.spring.io/spring/docs/3.0.x/...}} | Ancient Spring 3 docs (2 
occurrences) | {{testingspring_2.adoc}} |
| {{http://java.sun.com/...}} | Legacy Sun URLs | {{modelsforms_6.adoc}}, 
{{i18n_2.adoc}} |
| {{http://www.oracle.com/.../jce-7-download-...}} | Java 7 JCE page, obsolete 
since Java 9 | {{security_4.adoc:18}} |
| {{http://plugins.netbeans.org/plugin/3586/wicket-1-4-support}} | Plugin for 
Wicket *1.4* | {{maven_2.adoc:107}} |
| {{http://code.google.com/p/wicketforge/}} | Google Code dead | 
{{maven_2.adoc:111}} |

Additionally, *dozens of HTTP links* should be HTTPS: wikipedia.org, spring.io, 
jcp.org, owasp.org, objenesis.org, wicket.apache.org, etc.

----

h2. 2. HIGH: Code That Won't Compile

|| File || Line || Issue ||
| {{advanced_1.adoc}} | 33/37 | Variable {{asterisktHtml}} vs {{asteriskHtml}} 
-- name mismatch |
| {{advanced_6.adoc}} | 38 | {{NoCacheMarkupPanel}} missing {{implements 
IMarkupResourceStreamProvider}} |
| {{bestpractices_1.adoc}} | 67 | {{regmodel}} should be {{regModel}} (case 
mismatch) |
| {{bestpractices_1.adoc}} | 104 | Missing closing {{)}} for {{add()}} |
| {{bestpractices_5.adoc}} | 58 | {{startWith()}} should be {{startsWith()}} |
| {{keepControl_5.adoc}} | 72-77 | Variable {{fragment}} declared twice in same 
scope |
| {{layout_3.adoc}} | 35 | {{<html>}} instead of {{</html>}} (closing tag) |
| {{modelsforms_2.adoc}} | 51-54 | {{flatMap}} example: {{() -> 
targetPerson::getName}} won't compile |
| {{modelsforms_2.adoc}} | 70 | {{assertEquals}} missing closing {{)}} and 
{{.getObject()}} |
| {{modelsforms_5.adoc}} | 56 | {{DropDownChoice<String>}} but model is 
{{<Person>}} -- type mismatch |
| {{forms2_3.adoc}} | 11 | Extra closing parenthesis |
| {{forms2_11.adoc}} | 142 | {{ListModel<String>}} but data is {{List<Person>}} 
|
| {{forms2_12.adoc}} | 73 | Same String/Person type mismatch |
| {{resources_3.adoc}} | 117/122 | Missing closing {{)}} in {{Source}} 
constructor |
| {{resources_16.adoc}} | 13 | {{add(vide)}} -- should be {{add(video)}} |
| {{requestProcessing_4.adoc}} | 131 | {{public static MetaDataApp extends 
WebApplication}} -- missing {{class}} keyword |
| {{security_3.adoc}} | 55-58 | {{public class HttpsPage implements IMarker}} 
-- must extend {{WebPage}} |
| {{security_5.adoc}} | 51 | {{ResourseIsolationRequestCycleListener}} -- typo 
in class name (compile error) |
| {{urls_2.adoc}} | 8 | {{BookmarkablePageLink}} constructor missing required 
{{id}} parameter |

----

h2. 3. HIGH: Factual Errors / Removed APIs

|| File || Issue ||
| {{requestProcessing_5.adoc}} | {{IProvider<IExceptionMapper>}} no longer 
exists -- replaced by {{Supplier<IExceptionMapper>}} |
| {{urls_3.adoc:64-71}} | {{setDefaultBeforeDisabledLink()}} / 
{{setDefaultAfterDisabledLink()}} -- *removed* from Wicket |
| {{forms2_5.adoc:70}} | Generated markup shows {{IFormSubmitListener}} -- 
*removed* in Wicket 9 |
| {{internals/pagestoring.adoc:22}} | References {{IDataStore}} -- *no longer 
exists*, replaced by {{IPageStore}} |
| {{redirects.adoc:18-52}} | References {{popBufferedResponse}} and 
{{BufferedHttpServletResponse}} -- *don't exist* in modern Wicket |
| {{http2push_1.adoc}} + {{monitoring_1.adoc}} | Maven coordinates 
{{org.apache.wicket.experimental.wicket8}} with {{0.X-SNAPSHOT}} -- *wrong* for 
9.x |
| {{ajax_3.adoc:114}} | {{Duration.seconds(3)}} uses deprecated Wicket 
Duration; should be {{java.time.Duration.ofSeconds(3)}} |
| {{modelsforms_3.adoc}} | {{LambdaModel}} shown with public constructor -- 
it's actually *private* (must use {{of()}} factory) |
| {{modelsforms_3.adoc:56}} | PropertyResolver at 
{{org.apache.wicket.util.lang}} -- moved to 
{{org.apache.wicket.core.util.lang}} |
| {{modelsforms_5.adoc}} + {{forms2_11.adoc}} | Interface {{IChoiceRender}} -- 
actual name is {{IChoiceRenderer}} |
| {{internals/pagestoring.adoc:2}} | Wrong package: 
{{org.apache.wicket.request.mapper.IPageSource}} (should be 
{{...core.request.mapper...}}) |
| {{requestProcessing_3.adoc:65}} | Prose says {{onBeforeRequest}} but actual 
method is {{onBeginRequest}} |
| {{helloWorld_2.adoc:14}} | {{org.apache.wicket.Protocol.http.WicketFilter}} 
-- capital "P" typo |
| {{whyLearn_4.adoc:6}} | Says issues go to Apache JIRA -- *Wicket migrated to 
GitHub Issues* |
| {{jee_1.adoc:29}} | Uses {{@ManagedBean}} -- *removed* in Jakarta EE 11, 
deprecated long before |
| {{testingspring_2.adoc:127}} | {{addComponentInstantiationListener()}} -- 
method *doesn't exist*; should be 
{{getComponentInstantiationListeners().add()}} |
| {{testingspring_2.adoc:10}} | {{@TransactionConfiguration}} -- *removed* from 
Spring 5.x |
| {{wicketstuff_4.adoc}} | Entire section describes defunct *Google Image 
Charts API* (shut down years ago) |
| {{security_8.adoc:19}} | Recommends {{X-XSS-Protection}} header -- 
*deprecated and removed* from modern browsers |

----

h2. 4. MEDIUM: Outdated Content

h3. javax vs jakarta (affects Wicket 10.x)

* {{requestProcessing_4.adoc:31}} -- explicitly says 
{{javax.servlet.http.HttpSession}}
* {{jee_3.adoc}} -- {{@Inject}} / {{@Named}} from {{javax.inject}} (now 
{{jakarta.inject}})
* {{modelsforms_7.adoc:76}} -- says {{javax.persistence.EntityManagerFactory}}
* {{forms2_4.adoc}} -- references "JSR 303" throughout (now Jakarta Bean 
Validation)
* {{resources_14.adoc:40}} -- {{javax.servlet.ServletContext}}
* {{nativewebsockets_2.adoc}} -- artifact {{wicket-native-websocket-javax}}, 
class {{JavaxWebSocketFilter}}
* {{security_4.adoc:18}} -- references JCE Unlimited Strength for Java 7 
(default since Java 9)

h3. Ancient version references

Many files reference features as "new in Wicket 6.x" or "7.x":
* {{advanced_3.adoc}} -- "Starting from version 1.5"
* {{versioningCaching_2.adoc:74}} -- "Starting from version 1.5"
* {{componentQueueing.adoc:3}} -- "new feature in Wicket 7"
* {{helloWorld_4.adoc:53}} -- "Since Wicket 8 is built on Java 8"
* {{forms2_4.adoc:2}} -- "since version 6.4.0...6.14.0"
* {{ajax_5.adoc:4}} -- "Starting from version 6.0"
* {{http2push.adoc:2}} -- "With Wicket 8.0.0-M2"
* {{wicketstuff_1.adoc:26}} -- uses {{8.0.0-SNAPSHOT}} as example version
* Plus ~15 more instances

h3. Outdated technology references

* {{jsintegration_1.adoc:6}} -- YUI library (discontinued 2014)
* {{ajax_2.adoc:136}} -- "classic look & feel of Windows XP"
* {{componentLifecycle.adoc:2}} -- "Just like applets and servlets" (applets 
removed in Java 17)
* {{jee.adoc:10}} -- mentions JBoss Seam (dead since ~2012), OpenEJB (now 
Apache TomEE)
* {{monitoring_2.adoc}} -- Graphite setup uses Python 2, Django 1.5, Twisted 11 
(all ancient/EOL)
* {{testing.adoc:5}} -- says JUnit version is "4.x" but Wicket 10 uses JUnit 5
* {{resources_10.adoc:42}} -- {{com.sun.syndication}} package (now 
{{com.rometools}})
* {{nativewebsockets.adoc:8}} -- lists Jetty 7.5+, Tomcat 7.0.27+ as supported

h3. Missing content for modern Wicket

* No coverage of the *Wicket 10.x / Jakarta EE migration* -- the single biggest 
change for users
* No mention of *Java 17+ requirement* for Wicket 10.x
* Module table ({{helloWorld_1.adoc}}) missing {{wicket-cdi}}, 
{{wicket-native-websocket}}, {{wicket-migration}}, {{wicket-tester}}
* {{forms2_3.adoc}} -- ConverterLocator missing {{java.time}} converters 
(LocalDate, LocalDateTime, etc.)
* Testing chapter has no JUnit 5 examples
* Security chapter missing: XSS protection, session fixation, SameSite cookies, 
serialization security
* No mention of {{ModalDialog}} (replacement for deprecated {{ModalWindow}})

----

h2. 5. LOW: Spelling, Grammar & Typos

h3. Recurring patterns

* *"instanciation"* instead of "instantiation" -- {{bestpractices_6.adoc}}, 
{{bestpractices_10.adoc}}, {{bestpractices_12.adoc}}
* *"informations"* instead of "information" -- {{layout_1.adoc}}, 
{{i18n_1.adoc}}, {{requestProcessing_3.adoc}}, {{modelsforms_7.adoc}}
* *Raw types* throughout code examples -- {{new Model()}}, {{new 
PropertyModel(...)}}, {{new CompoundPropertyModel(...)}} without generics

h3. Individual typos

|| File || Typo || Correction ||
| {{whyLearn.adoc:4}} | "ask ourself" | "ask ourselves" |
| {{keepControl_1.adoc:6}} | "sensibly deteriorate" | "noticeably deteriorate" |
| {{componentLifecycle_1.adoc:9}} | "facultative" | "optional" |
| {{componentLifecycle_1.adoc:18}} | "we didn't covered" | "we haven't covered" 
|
| {{componentLifecycle_6.adoc:4}} | "move a the detached" | "move to the 
detached" |
| {{layout_2.adoc:2}} | "Wouldn't be great" | "Wouldn't it be great" |
| {{layout_2.adoc:45}} | "iterate thought" | "iterate through" |
| {{modelsforms_4.adoc:99}} | "TextFiled" | "TextField" |
| {{modelsforms_7.adoc:78}} | "to loose these" | "to lose these" |
| {{modelsforms_8.adoc:13}} | "ComponetTwoModels" | "ComponentTwoModels" |
| {{forms2_4.adoc:2}} | "it has became" | "it has become" |
| {{forms2_9.adoc:14}} | "wildly adopted" | "widely adopted" |
| {{urls_6.adoc:6,96}} | "WepApplication" (2x) | "WebApplication" |
| {{urls_6.adoc:163}} | "IPage ParametersEncoder" | "IPageParametersEncoder" |
| {{nativewebsockets_2.adoc:89}} | "enviroment" | "environment" |
| {{nativewebsockets_2.adoc:90}} | "implemetation" | "implementation" |
| {{security_6.adoc:11}} | "conveniant" | "convenient" |
| {{jee_4.adoc:16}} | "depencencies" | "dependencies" |
| {{resources_3.adoc:33}} | "Jave Code" | "Java Code" |
| {{resources_8.adoc:26}} | "JavaScricpt" | "JavaScript" |
| {{resources_15.adoc:4}} | duplicate "setJavaScriptCompressor" | second should 
be "setCssCompressor" |
| {{resources_16.adoc:2}} | "FileSystemResourceRenference" | 
"FileSystemResourceReference" |
| {{i18n_2.adoc:42-43}} | "ISO 8859-11" (2x) | "ISO 8859-1" |
| {{bestpractices_2.adoc}} | "formular" | "form" |
| {{bestpractices_3.adoc}} | "unneccessary", "the the" | "unnecessary", "the" |
| {{bestpractices_12.adoc}} | "easliy" | "easily" |
| {{bestpractices_15.adoc}} | "seperate" | "separate" |
| {{bestpractices_16.adoc}} | "Crtl" | "Ctrl" |
| {{wicketstuff_6.adoc:8}} | "pubblic" | "public" |
| {{wicketstuff_6.adoc:80}} | "construcor" | "constructor" |
| {{contributing.adoc:14}} | folder path "asciidoctor" | "asciidoc" |
| {{resources_8.adoc:56-57}} | {{<header>}} tag | {{<head>}} tag |
| {{advanced_3.adoc:37}} | "InterComponetsEventsExample" | 
"InterComponentsEventsExample" |
| {{advanced_6.adoc:4,34}} | "dynamical generate" (2x) | "dynamically generate" 
|
| {{ajax_2.adoc:32}} | "overriden" | "overridden" |
| {{ajax_2.adoc:164}} | "for the three" | "for the tree" |
| {{ajax_3.adoc:123}} | "statelss" | "stateless" |
| {{jsintegration_2.adoc:52}} | {{http://jqueryui.com/ datepicker}} (space in 
URL) | {{http://jqueryui.com/datepicker/}} |
| {{jsintegration_2.adoc:103}} | "renderHeader" in prose | "renderHead" (method 
name) |

h3. Wrong \[source,...] tags

Multiple files use {{\[source,java]}} for non-Java content:
* JavaScript blocks: {{nativewebsockets_3.adoc}}, {{jsintegration_2.adoc}}
* HTML blocks: {{layout_4.adoc}}, {{componentQueueing_1.adoc}}, 
{{pagestoring.adoc}}
* XML blocks: {{monitoring_1.adoc}}, {{monitoring_2.adoc}}, 
{{monitoring_4.adoc}}
* Shell commands: {{howToSource.adoc}}

----

h2. Summary

The user guide is a *valuable and comprehensive resource* but it has 
accumulated significant technical debt:

# *~19 code examples that won't compile* (type mismatches, missing params, 
typos in identifiers)
# *~18 references to removed/renamed APIs* that no longer exist in modern Wicket
# *~12 dead URLs* and dozens more that should use HTTPS
# *No coverage of the Wicket 10.x / Jakarta EE migration* -- the single biggest 
change for users
# *~40+ spelling/grammar errors* with some patterns repeating across files
# *Outdated technology references* (YUI, Windows XP, Python 2, JUnit 4, Wicket 
1.5/6.x feature introductions)

The guide would benefit most from: (1) fixing compile errors in code examples, 
(2) updating removed API references, (3) replacing dead URLs, and (4) adding a 
Jakarta migration section for Wicket 10.x users.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to