diff --git a/jsf-api-2.2.13.pom b/jsf-api-2.2.13.pom
new file mode 100644
index 0000000..08a9203
--- /dev/null
+++ b/jsf-api-2.2.13.pom
@@ -0,0 +1,335 @@
+
+
+
+
+ 4.0.0
+ com.sun.faces
+ jsf-api
+ 2.2.13
+ jar
+
+ Oracle's implementation of the JSF 2.2 specification API.
+
+
+ This is the master POM file for Oracle's Implementation of the JSF 2.2 Specification.
+
+ http://java.sun.com/javaee/javaserverfaces/
+
+
+
+ COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) plus GPL
+
+ http://glassfish.java.net/nonav/public/CDDL+GPL.html
+ repo
+
+
+
+ http://java.net/projects/mojarra/sources
+ scm:svn:https://svn.java.net/svn/mojarra~svn/trunk
+
+
+
+ edburns
+ Ed Burns
+ edward.burns@oracle.com
+ Oracle America, Inc.
+
+ project-owner
+
+ -6
+
+
+ rogerk
+ Roger Kitain
+ roger.kitain@oracle.com
+ Oracle America, Inc.
+
+ project-owner
+
+ -6
+
+
+
+
+ jvnet-nexus-snapshots
+ Java.net Nexus Snapshots Repository
+ https://maven.java.net/content/repositories/snapshots/
+
+
+ jvnet-nexus-staging
+ Java.net Nexus Staging Repository
+ https://maven.java.net/service/local/staging/deploy/maven2/
+
+
+
+ install
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.5
+ 1.5
+
+ **/*.*
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.1
+
+
+ attach-sources
+ verify
+
+ jar-no-fork
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.7
+
+
+ attach-artifacts
+ package
+
+ attach-artifact
+
+
+
+
+ target/jsf-api-2.2.13-javadoc.jar
+ jar
+ javadoc
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+ target/classes/META-INF/MANIFEST.MF
+
+
+
+
+
+
+ JIRA
+ https://java.net/jira/browse/JAVASERVERFACES
+
+
+
+ JSF 2.2 Specification Comments
+ jsr-314-comments@jcp.org
+
+
+ Mojarra Implementation Dev List
+ dev@javaserverfaces.dev.java.net
+
+ https://javaserverfaces.dev.java.net/servlets/SummarizeList?listName=dev
+
+
+
+
+
+ Craig McClanahan
+
+
+ Deepak Gothe
+
+
+ Gregory Murray
+
+
+ Justyna Horwat
+
+
+ Jayashri Visvanathan
+
+
+ Jennifer Ball
+
+
+ Jacob Hookom
+
+
+ Raj Premkumar
+
+
+ Stan Silvert
+
+
+ Mike Youngstrom
+
+
+ Jason Lee
+
+
+
+ Oracle America, Inc
+ http://www.oracle.com/
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.0.1
+ provided
+
+
+ javax.servlet.jsp
+ javax.servlet.jsp-api
+ 2.2.1
+ provided
+
+
+ javax.el
+ javax.el-api
+ 2.2.1
+ provided
+
+
+ javax.servlet.jsp.jstl
+ jstl-api
+ 1.2
+ provided
+
+
+
+
+ release-sign-artifacts
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.5
+ 1.5
+
+ **/*.*
+
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.1
+
+
+ attach-sources
+ verify
+
+ jar-no-fork
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.7
+
+
+ attach-artifacts
+ package
+
+ attach-artifact
+
+
+
+
+ target/jsf-api-2.2.13-javadoc.jar
+ jar
+ javadoc
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+ target/classes/META-INF/MANIFEST.MF
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.3
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+
+
+
+
+
diff --git a/jsf-impl-2.2.13.pom b/jsf-impl-2.2.13.pom
new file mode 100644
index 0000000..8565d25
--- /dev/null
+++ b/jsf-impl-2.2.13.pom
@@ -0,0 +1,295 @@
+
+
+
+
+ 4.0.0
+ com.sun.faces
+ jsf-impl
+ 2.2.13
+ jar
+
+ Oracle's implementation of the JSF 2.2 specification.
+
+
+ This is the master POM file for Oracle's Implementation of the JSF 2.2 Specification.
+
+ http://java.sun.com/javaee/javaserverfaces/
+
+
+
+ COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) plus GPL
+
+ http://glassfish.java.net/nonav/public/CDDL+GPL.html
+ repo
+
+
+
+ http://java.net/projects/mojarra/sources
+ scm:svn:https://svn.java.net/svn/mojarra~svn/trunk
+
+
+
+ edburns
+ Ed Burns
+ ed.burns@sun.com
+ Oracle America, Inc.
+
+ project-owner
+
+ -6
+
+
+ rlubke
+ Ryan Lubke
+ Ryan.Lubke@sun.com
+ Oracle America, Inc.
+
+ project-owner
+
+ -9
+
+
+ rogerk
+ Roger Kitain
+ Roger.Kitain@sun.com
+ Oracle America, Inc.
+
+ project-owner
+
+ -6
+
+
+ driscoll
+ Jim Driscoll
+ jim.dirscoll@sun.com
+ Oracle America, Inc.
+
+ project-owner
+
+ -9
+
+
+
+
+ jvnet-nexus-snapshots
+ Java.net Nexus Snapshots Repository
+ https://maven.java.net/content/repositories/snapshots/
+
+
+ jvnet-nexus-staging
+ Java.net Nexus Staging Repository
+ https://maven.java.net/service/local/staging/deploy/maven2/
+
+
+
+ install
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.5
+ 1.5
+
+ **/*.*
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 2.1
+
+
+ attach-sources
+ verify
+
+ jar-no-fork
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.7
+
+
+ attach-artifacts
+ package
+
+ attach-artifact
+
+
+
+
+ target/jsf-impl-2.2.13-javadoc.jar
+ jar
+ javadoc
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+ target/classes/META-INF/MANIFEST.MF
+
+
+
+
+
+
+
+ JIRA
+ https://java.net/jira/browse/JAVASERVERFACES
+
+
+
+ Oracle's JavaServer Faces Implementation Dev List
+ dev@javaserverfaces.dev.java.net
+
+ https://javaserverfaces.dev.java.net/servlets/SummarizeList?listName=dev
+
+
+
+
+
+ Craig McClanahan
+
+
+ Deepak Gothe
+
+
+ Gregory Murray
+
+
+ Justyna Horwat
+
+
+ Jayashri Visvanathan
+
+
+ Jennifer Ball
+
+
+ Jacob Hookom
+
+
+ Raj Premkumar
+
+
+ Stan Silvert
+
+
+ Mike Youngstrom
+
+
+ Jason Lee
+
+
+
+ Oracle America, Inc
+ http://www.oracle.com/
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.0.1
+ provided
+
+
+ javax.servlet.jsp
+ javax.servlet.jsp-api
+ 2.2.1
+ provided
+
+
+ javax.el
+ javax.el-api
+ 2.2.1
+ provided
+
+
+ javax.servlet.jsp.jstl
+ jstl-api
+ 1.2
+ provided
+
+
+
+
+ release-sign-artifacts
+
+
+
+ org.apache.maven.plugins
+ maven-gpg-plugin
+ 1.3
+
+
+ sign-artifacts
+ verify
+
+ sign
+
+
+
+
+
+
+
+
+
diff --git a/mojarra-2.2.13-disable-references-to-com.sun.faces.spi.InjectionProvider.patch b/mojarra-2.2.13-disable-references-to-com.sun.faces.spi.InjectionProvider.patch
new file mode 100644
index 0000000..9d9449a
--- /dev/null
+++ b/mojarra-2.2.13-disable-references-to-com.sun.faces.spi.InjectionProvider.patch
@@ -0,0 +1,74 @@
+diff -Nru mojarra-2.2.13/jsf-api/src/main/java/javax/faces/FactoryFinderInstance.java mojarra-2.2.13.InjectionProvider/jsf-api/src/main/java/javax/faces/FactoryFinderInstance.java
+--- mojarra-2.2.13/jsf-api/src/main/java/javax/faces/FactoryFinderInstance.java 2016-02-04 03:54:54.000000000 +0100
++++ mojarra-2.2.13.InjectionProvider/jsf-api/src/main/java/javax/faces/FactoryFinderInstance.java 2016-09-30 16:33:55.327278523 +0200
+@@ -41,7 +41,7 @@
+
+ package javax.faces;
+
+-import com.sun.faces.spi.InjectionProvider;
++//import com.sun.faces.spi.InjectionProvider;
+ import java.io.BufferedReader;
+ import java.io.IOException;
+ import java.io.InputStream;
+@@ -168,7 +168,7 @@
+ }
+
+ private void copyInjectionProviderFromFacesContext() {
+- InjectionProvider injectionProvider = null;
++ /*InjectionProvider injectionProvider = null;
+ FacesContext context = FacesContext.getCurrentInstance();
+ if (null != context) {
+ injectionProvider = (InjectionProvider) context.getAttributes().get("com.sun.faces.config.ConfigManager_INJECTION_PROVIDER_TASK");
+@@ -179,7 +179,7 @@
+ if (LOGGER.isLoggable(Level.SEVERE)) {
+ LOGGER.log(Level.SEVERE, "Unable to obtain InjectionProvider from init time FacesContext. Does this container implement the Mojarra Injection SPI?");
+ }
+- }
++ }*/
+ }
+
+ /**
+@@ -408,7 +408,7 @@
+ }
+ }
+
+- if (null != result) {
++ /*if (null != result) {
+ InjectionProvider provider = getInjectionProvider();
+ if (null != provider) {
+ try {
+@@ -423,7 +423,7 @@
+ LOGGER.log(Level.SEVERE, "Unable to inject {0} because no InjectionProvider can be found. Does this container implement the Mojarra Injection SPI?", result);
+ }
+ }
+- }
++ }*/
+
+ return result;
+
+@@ -459,7 +459,7 @@
+ }
+
+ void releaseFactories() {
+- InjectionProvider provider = getInjectionProvider();
++ /*InjectionProvider provider = getInjectionProvider();
+ if (null != provider) {
+ lock.writeLock().lock();
+ try {
+@@ -491,13 +491,13 @@
+ if (LOGGER.isLoggable(Level.SEVERE)) {
+ LOGGER.log(Level.SEVERE, "Unable to call @PreDestroy annotated methods because no InjectionProvider can be found. Does this container implement the Mojarra Injection SPI?");
+ }
+- }
++ }*/
+ }
+
+- InjectionProvider getInjectionProvider() {
++ /*InjectionProvider getInjectionProvider() {
+ InjectionProvider result = (InjectionProvider) factories.get(INJECTION_PROVIDER_KEY);
+ return result;
+- }
++ }*/
+
+ void clearInjectionProvider() {
+ factories.remove(INJECTION_PROVIDER_KEY);
diff --git a/mojarra-2.2.13-disabling-stripping-API-jars.patch b/mojarra-2.2.13-disabling-stripping-API-jars.patch
new file mode 100644
index 0000000..302ea7a
--- /dev/null
+++ b/mojarra-2.2.13-disabling-stripping-API-jars.patch
@@ -0,0 +1,501 @@
+From 29f666432cbd8a32ed7ff7c678b7bcd412f46b19 Mon Sep 17 00:00:00 2001
+From: mriem
+Date: Fri, 22 Aug 2014 18:30:06 +0000
+Subject: [PATCH] Disabling stripping API jars
+
+git-svn-id: https://svn.java.net/svn/mojarra~svn/trunk@13559 761efcf2-d34d-6b61-9145-99dcacc3edf1
+---
+ .../faces/generate/HtmlTaglib12Generator.java | 58 ++-
+ .../faces/tools/StripClassesForApiJar.java | 398 +++++++++---------
+ 2 files changed, 249 insertions(+), 207 deletions(-)
+
+diff --git a/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib12Generator.java b/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib12Generator.java
+index f3c33ff412..cb0b828185 100644
+--- a/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib12Generator.java
++++ b/jsf-tools/src/main/java/com/sun/faces/generate/HtmlTaglib12Generator.java
+@@ -653,15 +653,55 @@ protected void tagHandlerGeneralMethods() throws Exception {
+
+ protected static boolean isValueHolder(String componentClass) {
+
+- try {
+- Class> clazz = Class.forName(componentClass);
+- Class> valueHolderClass =
+- Class.forName("javax.faces.component.ValueHolder");
+- return valueHolderClass.isAssignableFrom(clazz);
+- } catch (ClassNotFoundException cnfe) {
+- throw new IllegalStateException("Unable to find component class '" +
+- componentClass + "' : " + cnfe.toString());
+- }
++ String[] valueHolderClasses = {
++ "HtmlBody",
++ "HtmlDoctype",
++ "HtmlHead",
++ "HtmlInputHidden",
++ "HtmlInputSecret",
++ "HtmlInputText",
++ "HtmlInputTextarea",
++ "HtmlOutcomeTargetButton",
++ "HtmlOutcomeTargetLink",
++ "HtmlOutputFormat",
++ "HtmlOutputLabel",
++ "HtmlOutputLink",
++ "HtmlOutputText",
++ "HtmlSelectBooleanCheckbox",
++ "HtmlSelectManyCheckbox",
++ "HtmlSelectManyListbox",
++ "HtmlSelectManyMenu",
++ "HtmlSelectOneListbox",
++ "HtmlSelectOneMenu",
++ "HtmlSelectOneRadio",
++ "UIInput",
++ "UIOutcomeTarget",
++ "UIOutput",
++ "UISelectBoolean",
++ "UISelectMany",
++ "UISelectOne",
++ "UIViewParameter" };
++
++ boolean result = false;
++
++ for(int i = 0; i clazz = Class.forName(componentClass);
++// Class> valueHolderClass =
++// Class.forName("javax.faces.component.ValueHolder");
++// return valueHolderClass.isAssignableFrom(clazz);
++// } catch (ClassNotFoundException cnfe) {
++// throw new IllegalStateException("Unable to find component class '" +
++// componentClass + "' : " + cnfe.toString());
++// }
+
+ } // END isValueHolder
+
+diff --git a/jsf-tools/src/main/java/com/sun/faces/tools/StripClassesForApiJar.java b/jsf-tools/src/main/java/com/sun/faces/tools/StripClassesForApiJar.java
+index 2da164b..7e02f9d 100644
+--- a/jsf-tools/src/main/java/com/sun/faces/tools/StripClassesForApiJar.java
++++ b/jsf-tools/src/main/java/com/sun/faces/tools/StripClassesForApiJar.java
+@@ -43,19 +43,19 @@ package com.sun.faces.tools;
+
+
+
+-import com.sun.tools.javac.api.JavacTaskImpl;
+-import com.sun.tools.javac.code.Kinds;
+-import com.sun.tools.javac.code.Scope;
+-import com.sun.tools.javac.code.Symbol.*;
+-import com.sun.tools.javac.code.Flags;
+-import com.sun.tools.javac.code.Type;
+-import com.sun.tools.javac.code.Types;
+-import com.sun.tools.javac.jvm.ClassReader;
+-import com.sun.tools.javac.jvm.ClassWriter;
+-import com.sun.tools.javac.jvm.Pool;
+-import com.sun.tools.javac.processing.JavacProcessingEnvironment;
+-import com.sun.tools.javac.util.List;
+-import com.sun.tools.javac.util.Name;
++//import com.sun.tools.javac.api.JavacTaskImpl;
++//import com.sun.tools.javac.code.Kinds;
++//import com.sun.tools.javac.code.Scope;
++//import com.sun.tools.javac.code.Symbol.*;
++//import com.sun.tools.javac.code.Flags;
++//import com.sun.tools.javac.code.Type;
++//import com.sun.tools.javac.code.Types;
++//import com.sun.tools.javac.jvm.ClassReader;
++//import com.sun.tools.javac.jvm.ClassWriter;
++//import com.sun.tools.javac.jvm.Pool;
++//import com.sun.tools.javac.processing.JavacProcessingEnvironment;
++//import com.sun.tools.javac.util.List;
++//import com.sun.tools.javac.util.Name;
+ import java.io.File;
+ import java.io.IOException;
+ import java.util.ArrayList;
+@@ -102,192 +102,194 @@ import javax.tools.ToolProvider;
+ */
+ @SupportedOptions({"com.sun.tools.javac.sym.Jar","com.sun.tools.javac.sym.ExtraApiClassPath","com.sun.tools.javac.sym.Dest"})
+ @SupportedAnnotationTypes("*")
+-public class StripClassesForApiJar extends AbstractProcessor {
++public class StripClassesForApiJar
++//extends AbstractProcessor
++{
+
+- static Set getLegacyPackages() {
+- return Collections.emptySet();
+- }
+-
+- @Override
+- public boolean process(Set extends TypeElement> tes, RoundEnvironment renv) {
+- if (!renv.processingOver())
+- return true;
+-
+- Set legacy = getLegacyPackages();
+- Set legacyProprietary = getLegacyPackages();
+- Set documented = new HashSet();
+- Set packages =
+- ((JavacProcessingEnvironment)processingEnv).getSpecifiedPackages();
+- String jarName = processingEnv.getOptions().get("com.sun.tools.javac.sym.Jar");
+- if (jarName == null)
+- throw new RuntimeException("Must use -Acom.sun.tools.javac.sym.Jar=LOCATION_OF_JAR");
+- String extraApiClassPath = processingEnv.getOptions().get("com.sun.tools.javac.sym.ExtraApiClassPath");
+- if (extraApiClassPath == null)
+- throw new RuntimeException("Must use -Acom.sun.tools.javac.sym.ExtraApiClassPath=extra api class path");
+- String destName = processingEnv.getOptions().get("com.sun.tools.javac.sym.Dest");
+- if (destName == null)
+- throw new RuntimeException("Must use -Acom.sun.tools.javac.sym.Dest=LOCATION_OF_JAR");
+-
+- for (PackageSymbol psym : packages) {
+- String name = psym.getQualifiedName().toString();
+- legacyProprietary.remove(name);
+- documented.add(name);
+- }
+-
+- JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
+- StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null);
+- Location jarLocation = StandardLocation.locationFor(jarName);
+- File jarFile = new File(jarName);
+- String [] segments = extraApiClassPath.split(File.pathSeparator);
+- java.util.List extraClassPathSegments = new ArrayList(segments.length);
+- for (String cur : segments) {
+- extraClassPathSegments.add(new File(cur));
+- }
+- File ExtraApiClassPathFile = new File(extraApiClassPath);
+- try {
+- fm.setLocation(jarLocation, List.of(jarFile));
+- fm.setLocation(StandardLocation.CLASS_PATH, List.nil());
+- fm.setLocation(StandardLocation.SOURCE_PATH, List.nil());
+- {
+- ArrayList bootClassPath = new ArrayList();
+- bootClassPath.add(jarFile);
+- for (File cur : extraClassPathSegments) {
+- bootClassPath.add(cur);
+- }
+- // ADD EXTRA DEPENDENCIES HERE:
+- for (File path : fm.getLocation(StandardLocation.PLATFORM_CLASS_PATH)) {
+- // if (!new File(path.getName()).equals(new File("rt.jar")))
+- bootClassPath.add(path);
+- }
+- System.err.println("Using boot class path = " + bootClassPath);
+- fm.setLocation(StandardLocation.PLATFORM_CLASS_PATH, bootClassPath);
+- }
+- // System.out.println(fm.getLocation(StandardLocation.PLATFORM_CLASS_PATH));
+- File destDir = new File(destName);
+- if (!destDir.exists())
+- if (!destDir.mkdirs())
+- throw new RuntimeException("Could not create " + destDir);
+- fm.setLocation(StandardLocation.CLASS_OUTPUT, List.of(destDir));
+- } catch (IOException ioe) {
+- System.err.println("Unable to set location");
+- return false;
+- }
+- Set hiddenPackages = new HashSet();
+- Set crisp = new HashSet();
+- List options = List.of("-XDdev");
+- // options = options.prepend("-doe");
+- // options = options.prepend("-verbose");
+- JavacTaskImpl task = (JavacTaskImpl)
+- tool.getTask(null, fm, null, options, null, null);
+- com.sun.tools.javac.main.JavaCompiler compiler = com.sun.tools.javac.main.JavaCompiler.instance(task.getContext());
+- ClassReader reader = ClassReader.instance(task.getContext());
+- ClassWriter writer = ClassWriter.instance(task.getContext());
+- Type.moreInfo = true;
+- Pool pool = new Pool(Types.instance(task.getContext()));
+- ClassSymbol cs = null;
+- try {
+- for (JavaFileObject file : fm.list(jarLocation, "", EnumSet.of(CLASS), true)) {
+- String className = fm.inferBinaryName(jarLocation, file);
+- int index = className.lastIndexOf('.');
+- String pckName = index == -1 ? "" : className.substring(0, index);
+- if (documented.contains(pckName)) {
+- if (!legacy.contains(pckName))
+- crisp.add(pckName);
+- // System.out.println("Documented: " + className);
+- } else if (legacyProprietary.contains(pckName)) {
+- // System.out.println("Legacy proprietary: " + className);
+- } else {
+- // System.out.println("Hidden " + className);
+- hiddenPackages.add(pckName);
+- continue;
+- }
+- // PackageSymbol psym = reader.enterPackage(names.fromString(pckName));
+- // psym.complete();
+- TypeSymbol sym = (TypeSymbol)compiler.resolveIdent(className);
+- if (sym.kind != Kinds.TYP) {
+- if (className.indexOf('$') < 0) {
+- System.err.println("Ignoring (other) " + className + " : " + sym);
+- System.err.println(" " + sym.getClass().getSimpleName() + " " + sym.type);
+- }
+- continue;
+- }
+- sym.complete();
+- if (sym.getEnclosingElement().getKind() != ElementKind.PACKAGE) {
+- System.err.println("Ignoring (bad) " + sym.getQualifiedName());
+- }
+- if (false) {
+- /*
+- * Following eliminates non-public classes from output,
+- * but is too aggressive because it also eliminates
+- * non-public superclasses of public classes, which
+- * makes the output unusable.
+- */
+- if (sym.owner.kind == Kinds.PCK &&
+- (sym.flags() & Flags.AccessFlags) == Flags.PUBLIC) {
+- cs = (ClassSymbol) sym;
+- writeClass(pool, cs, writer);
+- cs = null;
+- }
+- } else {
+- cs = (ClassSymbol) sym;
+- writeClass(pool, cs, writer);
+- cs = null;
+- }
+- }
+- } catch (IOException ex) {
+- reportError(ex, cs);
+- } catch (CompletionFailure ex) {
+- reportError(ex, cs);
+- } catch (RuntimeException ex) {
+- reportError(ex, cs);
+- }
+- if (false) {
+- for (String pckName : crisp)
+- System.out.println("Crisp: " + pckName);
+- for (String pckName : hiddenPackages)
+- System.out.println("Hidden: " + pckName);
+- for (String pckName : legacyProprietary)
+- System.out.println("Legacy proprietary: " + pckName);
+- for (String pckName : documented)
+- System.out.println("Documented: " + pckName);
+- }
+-
+- return true;
+- }
+-
+- void reportError(Throwable ex, Element element) {
+- if (element != null)
+- processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
+- ex.getLocalizedMessage(),
+- element);
+- else
+- processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
+- ex.getLocalizedMessage());
+- }
+-
+- void writeClass(final Pool pool, final ClassSymbol cs, final ClassWriter writer) {
+- try {
+- pool.reset();
+- cs.pool = pool;
+- writer.writeClass(cs);
+- for (Scope.Entry e = cs.members().elems; e != null; e = e.sibling) {
+- if (e.sym.kind == Kinds.TYP) {
+- ClassSymbol nestedClass = (ClassSymbol)e.sym;
+- nestedClass.complete();
+- writeClass(pool, nestedClass, writer);
+- }
+- }
+- } catch (ClassWriter.StringOverflow ex) {
+- throw new RuntimeException(ex);
+- } catch (ClassWriter.PoolOverflow ex) {
+- throw new RuntimeException(ex);
+- } catch (IOException ex) {
+- throw new RuntimeException(ex);
+- }
+- }
+-
+- public SourceVersion getSupportedSourceVersion() {
+- return SourceVersion.latest();
+- }
++// static Set getLegacyPackages() {
++// return Collections.emptySet();
++// }
++//
++// @Override
++// public boolean process(Set extends TypeElement> tes, RoundEnvironment renv) {
++// if (!renv.processingOver())
++// return true;
++//
++// Set legacy = getLegacyPackages();
++// Set legacyProprietary = getLegacyPackages();
++// Set documented = new HashSet();
++// Set packages =
++// ((JavacProcessingEnvironment)processingEnv).getSpecifiedPackages();
++// String jarName = processingEnv.getOptions().get("com.sun.tools.javac.sym.Jar");
++// if (jarName == null)
++// throw new RuntimeException("Must use -Acom.sun.tools.javac.sym.Jar=LOCATION_OF_JAR");
++// String extraApiClassPath = processingEnv.getOptions().get("com.sun.tools.javac.sym.ExtraApiClassPath");
++// if (extraApiClassPath == null)
++// throw new RuntimeException("Must use -Acom.sun.tools.javac.sym.ExtraApiClassPath=extra api class path");
++// String destName = processingEnv.getOptions().get("com.sun.tools.javac.sym.Dest");
++// if (destName == null)
++// throw new RuntimeException("Must use -Acom.sun.tools.javac.sym.Dest=LOCATION_OF_JAR");
++//
++// for (PackageSymbol psym : packages) {
++// String name = psym.getQualifiedName().toString();
++// legacyProprietary.remove(name);
++// documented.add(name);
++// }
++//
++// JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
++// StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null);
++// Location jarLocation = StandardLocation.locationFor(jarName);
++// File jarFile = new File(jarName);
++// String [] segments = extraApiClassPath.split(File.pathSeparator);
++// java.util.List extraClassPathSegments = new ArrayList(segments.length);
++// for (String cur : segments) {
++// extraClassPathSegments.add(new File(cur));
++// }
++// File ExtraApiClassPathFile = new File(extraApiClassPath);
++// try {
++// fm.setLocation(jarLocation, List.of(jarFile));
++// fm.setLocation(StandardLocation.CLASS_PATH, List.nil());
++// fm.setLocation(StandardLocation.SOURCE_PATH, List.nil());
++// {
++// ArrayList bootClassPath = new ArrayList();
++// bootClassPath.add(jarFile);
++// for (File cur : extraClassPathSegments) {
++// bootClassPath.add(cur);
++// }
++// // ADD EXTRA DEPENDENCIES HERE:
++// for (File path : fm.getLocation(StandardLocation.PLATFORM_CLASS_PATH)) {
++// // if (!new File(path.getName()).equals(new File("rt.jar")))
++// bootClassPath.add(path);
++// }
++// System.err.println("Using boot class path = " + bootClassPath);
++// fm.setLocation(StandardLocation.PLATFORM_CLASS_PATH, bootClassPath);
++// }
++// // System.out.println(fm.getLocation(StandardLocation.PLATFORM_CLASS_PATH));
++// File destDir = new File(destName);
++// if (!destDir.exists())
++// if (!destDir.mkdirs())
++// throw new RuntimeException("Could not create " + destDir);
++// fm.setLocation(StandardLocation.CLASS_OUTPUT, List.of(destDir));
++// } catch (IOException ioe) {
++// System.err.println("Unable to set location");
++// return false;
++// }
++// Set hiddenPackages = new HashSet();
++// Set crisp = new HashSet();
++// List options = List.of("-XDdev");
++// // options = options.prepend("-doe");
++// // options = options.prepend("-verbose");
++// JavacTaskImpl task = (JavacTaskImpl)
++// tool.getTask(null, fm, null, options, null, null);
++// com.sun.tools.javac.main.JavaCompiler compiler = com.sun.tools.javac.main.JavaCompiler.instance(task.getContext());
++// ClassReader reader = ClassReader.instance(task.getContext());
++// ClassWriter writer = ClassWriter.instance(task.getContext());
++// Type.moreInfo = true;
++// Pool pool = new Pool(Types.instance(task.getContext()));
++// ClassSymbol cs = null;
++// try {
++// for (JavaFileObject file : fm.list(jarLocation, "", EnumSet.of(CLASS), true)) {
++// String className = fm.inferBinaryName(jarLocation, file);
++// int index = className.lastIndexOf('.');
++// String pckName = index == -1 ? "" : className.substring(0, index);
++// if (documented.contains(pckName)) {
++// if (!legacy.contains(pckName))
++// crisp.add(pckName);
++// // System.out.println("Documented: " + className);
++// } else if (legacyProprietary.contains(pckName)) {
++// // System.out.println("Legacy proprietary: " + className);
++// } else {
++// // System.out.println("Hidden " + className);
++// hiddenPackages.add(pckName);
++// continue;
++// }
++// // PackageSymbol psym = reader.enterPackage(names.fromString(pckName));
++// // psym.complete();
++// TypeSymbol sym = (TypeSymbol)compiler.resolveIdent(className);
++// if (sym.kind != Kinds.TYP) {
++// if (className.indexOf('$') < 0) {
++// System.err.println("Ignoring (other) " + className + " : " + sym);
++// System.err.println(" " + sym.getClass().getSimpleName() + " " + sym.type);
++// }
++// continue;
++// }
++// sym.complete();
++// if (sym.getEnclosingElement().getKind() != ElementKind.PACKAGE) {
++// System.err.println("Ignoring (bad) " + sym.getQualifiedName());
++// }
++// if (false) {
++// /*
++// * Following eliminates non-public classes from output,
++// * but is too aggressive because it also eliminates
++// * non-public superclasses of public classes, which
++// * makes the output unusable.
++// */
++// if (sym.owner.kind == Kinds.PCK &&
++// (sym.flags() & Flags.AccessFlags) == Flags.PUBLIC) {
++// cs = (ClassSymbol) sym;
++// writeClass(pool, cs, writer);
++// cs = null;
++// }
++// } else {
++// cs = (ClassSymbol) sym;
++// writeClass(pool, cs, writer);
++// cs = null;
++// }
++// }
++// } catch (IOException ex) {
++// reportError(ex, cs);
++// } catch (CompletionFailure ex) {
++// reportError(ex, cs);
++// } catch (RuntimeException ex) {
++// reportError(ex, cs);
++// }
++// if (false) {
++// for (String pckName : crisp)
++// System.out.println("Crisp: " + pckName);
++// for (String pckName : hiddenPackages)
++// System.out.println("Hidden: " + pckName);
++// for (String pckName : legacyProprietary)
++// System.out.println("Legacy proprietary: " + pckName);
++// for (String pckName : documented)
++// System.out.println("Documented: " + pckName);
++// }
++//
++// return true;
++// }
++//
++// void reportError(Throwable ex, Element element) {
++// if (element != null)
++// processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
++// ex.getLocalizedMessage(),
++// element);
++// else
++// processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
++// ex.getLocalizedMessage());
++// }
++//
++// void writeClass(final Pool pool, final ClassSymbol cs, final ClassWriter writer) {
++// try {
++// pool.reset();
++// cs.pool = pool;
++// writer.writeClass(cs);
++// for (Scope.Entry e = cs.members().elems; e != null; e = e.sibling) {
++// if (e.sym.kind == Kinds.TYP) {
++// ClassSymbol nestedClass = (ClassSymbol)e.sym;
++// nestedClass.complete();
++// writeClass(pool, nestedClass, writer);
++// }
++// }
++// } catch (ClassWriter.StringOverflow ex) {
++// throw new RuntimeException(ex);
++// } catch (ClassWriter.PoolOverflow ex) {
++// throw new RuntimeException(ex);
++// } catch (IOException ex) {
++// throw new RuntimeException(ex);
++// }
++// }
++//
++// public SourceVersion getSupportedSourceVersion() {
++// return SourceVersion.latest();
++// }
+
+ }
+--
+2.23.0
+
diff --git a/mojarra-2.2.13-dont-build-injection-providers.patch b/mojarra-2.2.13-dont-build-injection-providers.patch
new file mode 100644
index 0000000..72d3ed0
--- /dev/null
+++ b/mojarra-2.2.13-dont-build-injection-providers.patch
@@ -0,0 +1,36 @@
+diff -Nru mojarra-2.2.13/jsf-ri/build-pre-maven-rename.xml mojarra-2.2.13.injection-providers/jsf-ri/build-pre-maven-rename.xml
+--- mojarra-2.2.13/jsf-ri/build-pre-maven-rename.xml 2016-09-29 09:23:42.387167612 +0200
++++ mojarra-2.2.13.injection-providers/jsf-ri/build-pre-maven-rename.xml 2016-09-29 09:20:39.000000000 +0200
+@@ -378,8 +378,6 @@
+ toDir="${build.classes.dir}/com/sun/faces"/>
+
+-
+
+
+
+diff -Nru mojarra-2.2.13/jsf-ri/build-source.xml mojarra-2.2.13.injection-providers/jsf-ri/build-source.xml
+--- mojarra-2.2.13/jsf-ri/build-source.xml 2016-09-29 09:23:42.683153090 +0200
++++ mojarra-2.2.13.injection-providers/jsf-ri/build-source.xml 2016-09-29 09:21:00.000000000 +0200
+@@ -344,8 +344,6 @@
+ toDir="${build.classes.dir}/com/sun/faces"/>
+
+-
+
+
+
+diff -Nru mojarra-2.2.13/jsf-ri/build.xml mojarra-2.2.13.injection-providers/jsf-ri/build.xml
+--- mojarra-2.2.13/jsf-ri/build.xml 2016-09-29 09:23:42.684153041 +0200
++++ mojarra-2.2.13.injection-providers/jsf-ri/build.xml 2016-09-29 09:21:31.000000000 +0200
+@@ -378,8 +378,6 @@
+ toDir="${build.classes.dir}/com/sun/faces"/>
+
+-
+
+
diff --git a/mojarra-2.2.13-dont-bundle-api.patch b/mojarra-2.2.13-dont-bundle-api.patch
new file mode 100644
index 0000000..911ddab
--- /dev/null
+++ b/mojarra-2.2.13-dont-bundle-api.patch
@@ -0,0 +1,16 @@
+diff -Nru mojarra-2.2.13/jsf-ri/build.xml mojarra-2.2.13.bundle-api/jsf-ri/build.xml
+--- mojarra-2.2.13/jsf-ri/build.xml 2016-09-29 09:29:56.517808536 +0200
++++ mojarra-2.2.13.bundle-api/jsf-ri/build.xml 2016-09-29 09:30:44.978430372 +0200
+@@ -378,12 +378,6 @@
+ toDir="${build.classes.dir}/com/sun/faces"/>
+
+-
+-
+-
+-
+-
+
+
+
diff --git a/mojarra-2.2.13-dont-download-dependencies.patch b/mojarra-2.2.13-dont-download-dependencies.patch
new file mode 100644
index 0000000..0df36e1
--- /dev/null
+++ b/mojarra-2.2.13-dont-download-dependencies.patch
@@ -0,0 +1,555 @@
+diff -Nru mojarra-2.2.13/common/ant/dependencies.xml mojarra-2.2.13.dont-download-dependencies/common/ant/dependencies.xml
+--- mojarra-2.2.13/common/ant/dependencies.xml 2016-02-04 03:54:54.000000000 +0100
++++ mojarra-2.2.13.dont-download-dependencies/common/ant/dependencies.xml 2016-09-29 21:59:38.981803483 +0200
+@@ -159,551 +159,6 @@
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
diff --git a/mojarra-2.2.13-dont-use-yuicompressor.patch b/mojarra-2.2.13-dont-use-yuicompressor.patch
new file mode 100644
index 0000000..2cbc6eb
--- /dev/null
+++ b/mojarra-2.2.13-dont-use-yuicompressor.patch
@@ -0,0 +1,113 @@
+diff -Nru mojarra-2.2.13/common/ant/dependencies.xml mojarra-2.2.13.yuicompressor/common/ant/dependencies.xml
+--- mojarra-2.2.13/common/ant/dependencies.xml 2016-09-29 09:11:08.759142705 +0200
++++ mojarra-2.2.13.yuicompressor/common/ant/dependencies.xml 2016-09-29 09:12:48.618243338 +0200
+@@ -82,7 +82,6 @@
+
+
+
+-
+
+
+
+@@ -110,14 +109,12 @@
+
+
+
+-
+
+
+
+
+
+
+-
+
+
+
+diff -Nru mojarra-2.2.13/jsf-ri/build-pre-maven-rename.xml mojarra-2.2.13.yuicompressor/jsf-ri/build-pre-maven-rename.xml
+--- mojarra-2.2.13/jsf-ri/build-pre-maven-rename.xml 2016-02-04 03:54:54.000000000 +0100
++++ mojarra-2.2.13.yuicompressor/jsf-ri/build-pre-maven-rename.xml 2016-09-29 09:14:50.341271267 +0200
+@@ -87,7 +87,6 @@
+
+
+
+-
+
+
+
+@@ -344,7 +343,7 @@
+
+
+
+-
++
+
+
+
+@@ -353,8 +352,6 @@
+
+
+
+-
+
+
++ value="${jsf.build.home}/jsf-tools/target/jsf-tools-${impl.version.number}.jar" />
+
+
+
+@@ -159,11 +160,11 @@
+
+
+
+-
++
+
+
+
+-
++
+
+
+
+@@ -173,7 +174,7 @@
+
+
+
+-
++
+
+
+
+@@ -190,8 +191,8 @@
+
+
+
+-
+-
++
++
+
+
+
+
+
+-
++
+
+
+
+@@ -158,7 +158,7 @@
+
+
+-
++
+
+
+
+@@ -805,7 +805,7 @@
+
+
+
+-
++
+
+
+
+
+-
++
+
+
+
+@@ -59,12 +59,6 @@
+
+
+
+-
+-
+-
+-
+
+
+
+@@ -123,93 +117,6 @@
+
+
+
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+
+
+
diff --git a/mojarra-2.2.13-jdk7.patch b/mojarra-2.2.13-jdk7.patch
new file mode 100644
index 0000000..001d4a1
--- /dev/null
+++ b/mojarra-2.2.13-jdk7.patch
@@ -0,0 +1,50 @@
+diff -Nru mojarra-2.2.13/jsf-tools/pom.xml mojarra-2.2.13.jdk7/jsf-tools/pom.xml
+--- mojarra-2.2.13/jsf-tools/pom.xml 2016-02-04 03:54:54.000000000 +0100
++++ mojarra-2.2.13.jdk7/jsf-tools/pom.xml 2016-09-29 08:58:51.942292347 +0200
+@@ -102,7 +102,7 @@
+
+
+ java.vendor
+- Sun Microsystems Inc.
++ Oracle Corporation
+
+
+
+@@ -110,8 +110,6 @@
+ com.sun
+ tools
+ 1.6.0
+- system
+- ${java.home}/../lib/tools.jar
+
+
+
+@@ -125,8 +123,6 @@
+ com.sun
+ tools
+ 1.7.0
+- system
+- ${java.home}/../lib/tools.jar
+
+
+
+diff -Nru mojarra-2.2.13/jsf-tools/src/main/java/com/sun/faces/tools/StripClassesForApiJar.java mojarra-2.2.13.jdk7/jsf-tools/src/main/java/com/sun/faces/tools/StripClassesForApiJar.java
+--- mojarra-2.2.13/jsf-tools/src/main/java/com/sun/faces/tools/StripClassesForApiJar.java 2016-02-04 03:54:54.000000000 +0100
++++ mojarra-2.2.13.jdk7/jsf-tools/src/main/java/com/sun/faces/tools/StripClassesForApiJar.java 2016-09-29 09:01:16.748187939 +0200
+@@ -49,6 +49,7 @@
+ import com.sun.tools.javac.code.Symbol.*;
+ import com.sun.tools.javac.code.Flags;
+ import com.sun.tools.javac.code.Type;
++import com.sun.tools.javac.code.Types;
+ import com.sun.tools.javac.jvm.ClassReader;
+ import com.sun.tools.javac.jvm.ClassWriter;
+ import com.sun.tools.javac.jvm.Pool;
+@@ -182,7 +183,7 @@
+ ClassReader reader = ClassReader.instance(task.getContext());
+ ClassWriter writer = ClassWriter.instance(task.getContext());
+ Type.moreInfo = true;
+- Pool pool = new Pool();
++ Pool pool = new Pool(Types.instance(task.getContext()));
+ ClassSymbol cs = null;
+ try {
+ for (JavaFileObject file : fm.list(jarLocation, "", EnumSet.of(CLASS), true)) {
diff --git a/mojarra-2.2.13-remove-installer-builder.patch b/mojarra-2.2.13-remove-installer-builder.patch
new file mode 100644
index 0000000..27d4be8
--- /dev/null
+++ b/mojarra-2.2.13-remove-installer-builder.patch
@@ -0,0 +1,47 @@
+diff -Nru mojarra-2.2.13/build.xml mojarra-2.2.13.installer-builder/build.xml
+--- mojarra-2.2.13/build.xml 2016-02-04 03:54:54.000000000 +0100
++++ mojarra-2.2.13.installer-builder/build.xml 2016-09-29 08:33:44.348257553 +0200
+@@ -554,11 +554,6 @@
+
+
+-
+-
+
+
+
+diff -Nru mojarra-2.2.13/common/ant/common.xml mojarra-2.2.13.installer-builder/common/ant/common.xml
+--- mojarra-2.2.13/common/ant/common.xml 2016-02-04 03:54:54.000000000 +0100
++++ mojarra-2.2.13.installer-builder/common/ant/common.xml 2016-09-29 08:32:30.083898981 +0200
+@@ -59,12 +59,6 @@
+
+
+
+-
+-
+-
+-
+-
+-
+
+
+
+
+-
+-
+-
+-
+-
+-
+
+
+Date: Tue, 24 Jul 2012 19:10:59 +0200
+Subject: [PATCH] Don't use namespace-alias in merge-config.xsl
+
+The build process uses a stylesheet named "merge-config.xsl" to
+merge the content of different XML files and it uses the
+"namespace-alias" element in the following way:
+
+
+
+This generates the following error during the build:
+
+create.runtime.config:
+ [xslt] Processing /home/jhernand/rpmbuild/BUILD/mojarra-2.1.7/jsf-api/doc/standard-html-renderkit.xml to /home/jhernand/rpmbuild/BUILD/mojarra-2.1.7/jsf-ri/merged.xml
+ [xslt] Loading stylesheet /home/jhernand/rpmbuild/BUILD/mojarra-2.1.7/jsf-ri/conf/xslt/merge-config.xsl
+ [xslt] /home/jhernand/rpmbuild/BUILD/mojarra-2.1.7/jsf-ri/conf/xslt/merge-config.xsl:50:76: Error! The result-prefix attribute of an xsl:namespace-alias element has the value '#default', but there is no declaration of the default namespace in scope for the element
+ [xslt] /home/jhernand/rpmbuild/BUILD/mojarra-2.1.7/jsf-ri/conf/xslt/merge-config.xsl:0:0: Fatal Error! java.lang.NullPointerException Cause: java.lang.NullPointerException
+ [xslt] Failed to process /home/jhernand/rpmbuild/BUILD/mojarra-2.1.7/jsf-api/doc/standard-html-renderkit.xml
+
+The only way I find to avoid this is to remove the
+"namespace-alias" element. As far as I can tell the content of the
+"jsf-ri-runtime.xml" file is not affected.
+---
+ jsf-ri/conf/xslt/merge-config.xsl | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/jsf-ri/conf/xslt/merge-config.xsl b/jsf-ri/conf/xslt/merge-config.xsl
+index 32b6bb2..5a2c397 100644
+--- a/jsf-ri/conf/xslt/merge-config.xsl
++++ b/jsf-ri/conf/xslt/merge-config.xsl
+@@ -47,7 +47,6 @@
+
+
+
+-
+
+
+
+--
+1.7.10.4
+
diff --git a/mojarra-servlet-3.1.patch b/mojarra-servlet-3.1.patch
new file mode 100644
index 0000000..6782984
--- /dev/null
+++ b/mojarra-servlet-3.1.patch
@@ -0,0 +1,35 @@
+diff --git a/jsf-ri/src/main/java/com/sun/faces/application/ByteArrayWebOutputStream.java b/jsf-ri/src/main/java/com/sun/faces/application/ByteArrayWebOutputStream.java
+index 87c83f6..0dd687d 100644
+--- a/jsf-ri/src/main/java/com/sun/faces/application/ByteArrayWebOutputStream.java
++++ b/jsf-ri/src/main/java/com/sun/faces/application/ByteArrayWebOutputStream.java
+@@ -43,6 +43,7 @@ package com.sun.faces.application;
+ import com.sun.faces.util.FacesLogger;
+
+ import javax.servlet.ServletOutputStream;
++import javax.servlet.WriteListener;
+ import javax.faces.FacesException;
+ import java.io.Writer;
+ import java.io.IOException;
+@@ -275,6 +276,22 @@ class ByteArrayWebOutputStream extends ServletOutputStream {
+ public void println(double v) throws IOException {
+ // no-op
+ }
++
++ public void setWriteListener(WriteListener listener) {
++ // no-op
++ }
++
++ public boolean isReady() {
++ return true;
++ }
++ }
++
++ public void setWriteListener(WriteListener listener) {
++ // no-op
++ }
++
++ public boolean isReady() {
++ return true;
+ }
+ }
+
diff --git a/mojarra.spec b/mojarra.spec
new file mode 100644
index 0000000..b2dee6e
--- /dev/null
+++ b/mojarra.spec
@@ -0,0 +1,147 @@
+Name: mojarra
+Version: 2.2.13
+Release: 1
+Summary: JSF Reference Implementation
+License: CDDL or GPLv2 with exceptions
+URL: http://javaserverfaces.java.net
+Source0: https://github.com/javaserverfaces/mojarra/archive/%{version}/mojarra-%{version}.tar.gz
+Source1: http://repo1.maven.org/maven2/com/sun/faces/jsf-api/%{version}/jsf-api-%{version}.pom
+Source2: http://repo1.maven.org/maven2/com/sun/faces/jsf-impl/%{version}/jsf-impl-%{version}.pom
+
+Patch0: mojarra-2.2.13-remove-installer-builder.patch
+Patch1: mojarra-2.2.13-fix-maven-ant-tasks-classpath.patch
+Patch2: mojarra-2.2.13-dont-download-dependencies.patch
+Patch3: mojarra-2.2.13-jdk7.patch
+Patch4: mojarra-2.2.13-fix-classpaths.patch
+Patch5: mojarra-2.2.13-dont-use-yuicompressor.patch
+Patch6: mojarra-2.2.13-dont-build-injection-providers.patch
+Patch7: mojarra-2.2.13-dont-bundle-api.patch
+Patch8: mojarra-dont-use-namespace-alias.patch
+Patch9: mojarra-servlet-3.1.patch
+Patch10: mojarra-2.2.13-disable-references-to-com.sun.faces.spi.InjectionProvider.patch
+Patch11: mojarra-2.2.13-disabling-stripping-API-jars.patch
+
+BuildArch: noarch
+BuildRequires: ant ant-contrib apache-commons-digester aqute-bnd atinject cdi-api
+BuildRequires: bean-validation-api glassfish-annotation-api glassfish-ejb-api glassfish-el-api
+BuildRequires: glassfish-jsp-api glassfish-servlet-api groovy hibernate-jpa-2.1-api java-devel
+BuildRequires: jboss-jstl-1.2-api maven-install-plugin maven-local
+Requires: apache-commons-digester atinject bean-validation-api cdi-api
+Requires: glassfish-annotation-api glassfish-ejb-api glassfish-el-api glassfish-jsp-api
+Requires: glassfish-servlet-api hibernate-jpa-2.1-api jboss-jstl-1.2-api
+%description
+JvaServer(TM) Faces technology simplifies building user interfaces for
+JavaServer applications. Developers of various skill levels can quickly build
+web applications by: assembling reusable UI components in a page; connecting
+these components to an application data source; and wiring client-generated
+events to server-side event handlers.
+
+%package javadoc
+Summary: Javadoc for mojarra
+%description javadoc
+This package contains the API documentation for mojarra.
+
+%prep
+%setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+sed -i "s|-f @{pomFile}|-o -f @{pomFile}|" common/ant/maven.xml common/ant/maven-pre-maven-rename.xml
+find . -name '*.class' -print -delete
+find . -name '*.jar' -print -delete
+mv LICENSE LICENSE.tmp
+iconv -f ISO-8859-1 -t UTF-8 LICENSE.tmp > LICENSE
+native2ascii -encoding UTF8 jsf-api/src/main/java/javax/faces/component/UIComponent.java \
+ jsf-api/src/main/java/javax/faces/component/UIComponent.java
+%pom_change_dep :ant org.apache.ant: jsf-tools
+cp -p %{SOURCE1} jsf-api.pom
+cp -p %{SOURCE2} jsf-impl.pom
+for a in jsf-api.pom jsf-impl.pom; do
+ %pom_change_dep javax.servlet.jsp.jstl:jstl-api org.jboss.spec.javax.servlet.jstl:jboss-jstl-api_1.2_spec:1.0.3.Final ${a}
+done
+
+%build
+mkdir -p lib
+names='
+apache-commons-collections
+apache-commons-digester
+apache-commons-beanutils
+apache-commons-logging
+'
+for name in ${names}
+do
+ ln -s `build-classpath ${name}` lib/$(basename ${name}).jar
+done
+mkdir -p lib/compile
+names='
+atinject
+bean-validation-api
+cdi-api
+glassfish-annotation-api
+glassfish-ejb-api
+glassfish-el-api
+glassfish-jsp-api
+glassfish-servlet-api
+groovy/groovy-all
+hibernate-jpa-2.1-api
+jboss-jstl-1.2-api
+'
+for name in ${names}
+do
+ ln -s `build-classpath ${name}` lib/compile/$(basename ${name}).jar
+done
+mkdir -p common/lib
+ln -s `build-classpath aqute-bnd/biz.aQute.bnd` common/lib/bnd.jar
+ln -s `build-classpath aqute-bnd/biz.aQute.bndlib` common/lib/bndlib.jar
+ant \
+ -Dbuild.sysclasspath=last \
+ -Djsf.build.home=$PWD \
+ -Dcontainer.name=tomcat7 \
+ -Dmvn.cmd=xmvn
+ant \
+ -Dbuild.sysclasspath=last \
+ -Djsf.build.home=$PWD \
+ -Dcontainer.name=tomcat7 \
+ -f jsf-api/build.xml \
+ javadocs
+ant \
+ -Dbuild.sysclasspath=last \
+ -Djsf.build.home=$PWD \
+ -Dcontainer.name=tomcat7 \
+ -f jsf-ri/build.xml \
+ javadocs
+%mvn_artifact jsf-api.pom jsf-api/build/lib/jsf-api-intermediate.jar
+%mvn_artifact jsf-impl.pom jsf-ri/build/lib/javax.faces.jar
+%mvn_alias com.sun.faces:jsf-api javax.faces:javax.faces-api
+%mvn_alias com.sun.faces:jsf-impl org.glassfish:javax.faces
+
+%install
+%mvn_install
+install -d -m 755 %{buildroot}%{_javadocdir}/mojarra/jsf-api
+cp -rp jsf-api/build/javadocs/* %{buildroot}%{_javadocdir}/mojarra/jsf-api/.
+install -d -m 755 %{buildroot}%{_javadocdir}/mojarra/jsf-impl
+cp -rp jsf-ri/build/javadocs/* %{buildroot}%{_javadocdir}/mojarra/jsf-impl/.
+
+%files -f .mfiles
+%license LICENSE
+%doc docs/index.html
+%doc docs/releasenotes.html
+%doc docs/community.html
+%doc docs/jsf-2_1-changelog.html
+
+%files javadoc
+%{_javadocdir}/mojarra
+%license LICENSE
+
+%changelog
+* Fri Sep 11 2020 huanghaitao - 2.2.13-1
+- package init
diff --git a/mojarra.yaml b/mojarra.yaml
new file mode 100644
index 0000000..f68b535
--- /dev/null
+++ b/mojarra.yaml
@@ -0,0 +1,4 @@
+version_control: github
+src_repo: javaserverfaces/mojarra
+tag_prefix: ""
+seperator: "."