I have migrated my application from JSF 1.2 to 2.2.
It used XML namespaces on java.sun.com
domain like xmlns:f="http://java.sun.com/jsf/core"
. However, Oracle's Java EE 7 tutorial is using XML namespaces on xmlns.jcp.org
domain like
xmlns:f="http://xmlns.jcp.org/jsf/core"
.
Which one is recommended and why was this changed?
For Java EE 7 and 8, go ahead with XML namespaces on
xmlns.jcp.org
domain. This was newly introduced since Java EE 7 in 2013 (which covers a.o. JSF 2.2, Servlet 3.1, CDI 1.1, etc). Do note that this not only affects Facelets files, but also XML configuration files such asfaces-config.xml
,web.xml
,beans.xml
, etc.The old XML namespaces on
java.sun.com
are still there for backwards compatibility, but the support will eventually disappear in a future Java EE version. You should migrate your code base as soon as you can. It should be a trivial task using "find and replace in all files" facility offered by the average IDE.Only older Mojarra 2.2.0 / 2.2.1 versions have had bugs related to the XML namespace changes, but those should not manifest in newer versions. See also a.o.
Because Java is not from Sun anymore since 2010. Note that they were smart to not make it
java.oracle.com
or something tight coupled to the currently owning company. It's now nicely and independently tied to the JCP (Java Community Process), the one really responsible for managing the Java (EE) specifications.And then a few years later ...
Since Java EE was taken over by Eclipse and rebranded to Jakarta EE, the XML namespace domain is changed from
xmlns.jcp.org
tojakarta.ee
to make it further independent. Moreover, the specification process is also not anymore owned by JCP.Faces 4 in Jakarta EE 10 has as per spec issue 1553 also taken a step further to not anymore use a URL as XML namespace URI, but a URN instead:
xmlns:f="jakarta.faces.core"
. The reason for using a URN instead of URL is because those taglib URIs are in first place not available as physical web resources returning some sort of XSD file and therefore only caused confusion among starters.See also: