diff --git a/CatalogManager.properties b/CatalogManager.properties
new file mode 100644
index 0000000..f68f3e2
--- /dev/null
+++ b/CatalogManager.properties
@@ -0,0 +1,61 @@
+########################################################################
+# CatalogManager provides an interface to the catalog properties.
+# Properties can come from two places: from system properties or
+# from a CatalogManager.properties file. This class provides a
+# transparent interface to both, with system properties preferred
+# over property file values.
+
+#######################################################################
+# Catalog Files:
+# The semicolon-delimited list of catalog files.
+# Example: catalogs=./xcatalog;/share/doctypes/catalog
+
+catalogs=/etc/xml/catalog;/etc/sgml/catalog
+
+#######################################################################
+# Relative Catalogs:
+# If false, relative catalog URIs are made absolute with respect to the
+# base URI of the CatalogManager.properties file. This setting only
+# applies to catalog URIs obtained from the catalogs property in the
+# CatalogManager.properties file
+# Example: relative-catalogs = [yes|no]
+
+relative-catalogs=yes
+
+#######################################################################
+# Verbosity:
+# If non-zero, the Catalog classes will print informative and debugging
+# messages. The higher the number, the more messages.
+# Example: verbosity = [0..99]
+
+verbosity=0
+
+#######################################################################
+# Prefer:
+# Which identifier is preferred, "public" or "system"?
+# Example: xml.catalog.prefer = [public|system]
+
+prefer=system
+
+#######################################################################
+# Static-catalog:
+# Should a single catalog be constructed for all parsing, or should a
+# different catalog be created for each parser?
+# Example: static-catalog = [yes|no]
+
+static-catalog=yes
+
+#######################################################################
+# Allow-oasis-xml-catalog-pi
+# If the source document contains "oasis-xml-catalog" processing
+# instructions, should they be used?
+# Example: allow-oasis-xml-catalog-pi = [yes|no]
+
+allow-oasis-xml-catalog-pi=yes
+
+#######################################################################
+# catalog-class-name
+# If you're using the convenience classes
+# org.apache.xml.resolver.tools.*, this setting allows you to specify
+# an alternate class name to use for the underlying catalog.
+# Example: catalog-class-name=org.apache.xml.resolver.Resolver
diff --git a/mx4j-3.0.1-src.tar.gz b/mx4j-3.0.1-src.tar.gz
new file mode 100644
index 0000000..2f0cebd
Binary files /dev/null and b/mx4j-3.0.1-src.tar.gz differ
diff --git a/mx4j-3.0.1.patch b/mx4j-3.0.1.patch
new file mode 100644
index 0000000..678a28b
--- /dev/null
+++ b/mx4j-3.0.1.patch
@@ -0,0 +1,65 @@
+From ea814e3b378a2305fb1d0e6b7e3a05458178dee6 Mon Sep 17 00:00:00 2001
+Subject: [PATCH]
+
+---
+ .../mx4j/remote/resolver/iiop/Resolver.java | 37 ++++++++++++-------
+ 1 file changed, 24 insertions(+), 13 deletions(-)
+
+diff --git a/src/core/mx4j/remote/resolver/iiop/Resolver.java b/src/core/mx4j/remote/resolver/iiop/Resolver.java
+index 1666d05..559be34 100644
+--- a/src/core/mx4j/remote/resolver/iiop/Resolver.java
++++ b/src/core/mx4j/remote/resolver/iiop/Resolver.java
+@@ -32,6 +32,7 @@ public class Resolver extends mx4j.remote.resolver.rmi.Resolver
+ private static final String IOR_CONTEXT = "/ior/";
+
+ private ORB orb;
++ private static final String ORB_KEY = "java.naming.corba.orb";
+
+
+ //********************************************************************************************************************//
+@@ -110,19 +111,29 @@ public class Resolver extends mx4j.remote.resolver.rmi.Resolver
+ {
+ if (orb == null)
+ {
+- Properties props = new Properties();
+- // Using putAll() on a Properties is discouraged, since it expects only Strings
+- for (Iterator i = environment.entrySet().iterator(); i.hasNext();)
+- {
+- Map.Entry entry = (Map.Entry)i.next();
+- Object key = entry.getKey();
+- Object value = entry.getValue();
+- if (key instanceof String && value instanceof String)
+- {
+- props.setProperty((String)key, (String)value);
+- }
+- }
+- orb = ORB.init((String[])null, props);
++ Object candidateORB = environment.get(ORB_KEY);
++ if (candidateORB != null)
++ {
++ // Throw as required by the spec
++ if (!(candidateORB instanceof ORB)) throw new IllegalArgumentException("Property " + ORB_KEY + " must specify a " + ORB.class.getName() + ", not " + candidateORB.getClass().getName());
++ orb = (ORB)candidateORB;
++ }
++ else
++ {
++ Properties props = new Properties();
++ // Using putAll() on a Properties is discouraged, since it expects only Strings
++ for (Iterator i = environment.entrySet().iterator(); i.hasNext();)
++ {
++ Map.Entry entry = (Map.Entry)i.next();
++ Object key = entry.getKey();
++ Object value = entry.getValue();
++ if (key instanceof String && value instanceof String)
++ {
++ props.setProperty((String)key, (String)value);
++ }
++ }
++ orb = ORB.init((String[])null, props);
++ }
+ }
+ return orb;
+ }
+--
+2.23.0
+
diff --git a/mx4j-3.0.1.pom b/mx4j-3.0.1.pom
new file mode 100644
index 0000000..d8c1d7a
--- /dev/null
+++ b/mx4j-3.0.1.pom
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ mx4j
+ mx4j
+ 3.0.1
+
diff --git a/mx4j-build.patch b/mx4j-build.patch
new file mode 100644
index 0000000..b723f49
--- /dev/null
+++ b/mx4j-build.patch
@@ -0,0 +1,127 @@
+--- ./build/build.xml.sav 2005-03-01 05:14:37.000000000 -0500
++++ ./build/build.xml 2006-08-24 16:07:11.000000000 -0400
+@@ -55,6 +55,9 @@
+
+
+
++
++
++
+
+
+
+@@ -224,6 +227,7 @@
+
+
+
++
+
+
+
+@@ -270,8 +274,29 @@
+
+
+
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+
++
+
+
+
+@@ -423,8 +448,7 @@
+ author="true"
+ version="true"
+ use="true"
+- windowtitle="MX4J API"
+- classpathref="classpath">
++ windowtitle="MX4J API">
+
+
+ Copyright © 2001-2005 The MX4J Contributors. All Rights Reserved.]]>
+@@ -437,8 +461,6 @@
+
+
+
+-
+-
+
+
+
+-
+-
+-
++ classpathref="lib.classpath">
++
++
++
++
++
++
+
+
+
+@@ -583,7 +607,8 @@
+
+
+
+-
++
++
+
+
+
+@@ -612,7 +637,9 @@
+
+
+
+-
++
++
++
+
+
+
+@@ -639,6 +666,8 @@
+
+
+
++
++
+
+
+
+@@ -687,6 +716,8 @@
+
+
+
++
++
+
+
+
diff --git a/mx4j-build.policy b/mx4j-build.policy
new file mode 100644
index 0000000..ab16186
--- /dev/null
+++ b/mx4j-build.policy
@@ -0,0 +1,15 @@
+grant codeBase "file:/-" {
+ permission java.security.AllPermission;
+};
+grant {
+ permission java.util.PropertyPermission "*", "read";
+ permission java.io.FilePermission "/-", "read,write";
+ permission java.net.SocketPermission "*", "accept, connect, listen, resolve";
+ permission java.net.SocketPermission "127.0.0.1", "accept, connect, listen, resolve";
+ permission java.lang.RuntimePermission "createSecurityManager";
+ permission java.lang.RuntimePermission "setSecurityManager";
+ permission javax.management.MBeanPermission "*", "*";
+ permission javax.management.remote.SubjectDelegationPermission "*";
+ permission javax.security.auth.AuthPermission "getSubject";
+};
+
diff --git a/mx4j-caucho-build.patch b/mx4j-caucho-build.patch
new file mode 100644
index 0000000..c0c0e82
--- /dev/null
+++ b/mx4j-caucho-build.patch
@@ -0,0 +1,15 @@
+--- mx4j/build/build.xml.orig Thu Dec 23 20:05:06 2004
++++ mx4j/build/build.xml Thu Dec 23 20:06:16 2004
+@@ -306,9 +306,9 @@
+
+
+
+-
+-
+-
++
++
++
+
+
+
diff --git a/mx4j-docbook.patch b/mx4j-docbook.patch
new file mode 100644
index 0000000..f18067c
--- /dev/null
+++ b/mx4j-docbook.patch
@@ -0,0 +1,20 @@
+--- mx4j/src/docs/xsl/mx4j-chunk.xsl.orig Sun Nov 14 16:33:03 2004
++++ mx4j/src/docs/xsl/mx4j-chunk.xsl Thu Dec 23 20:17:30 2004
+@@ -1,6 +1,6 @@
+
+
+-
++
+
+
+ styles.css
+--- mx4j/src/docs/index.xml.orig Sun Nov 14 16:31:54 2004
++++ mx4j/src/docs/index.xml Thu Dec 23 20:19:00 2004
+@@ -1,5 +1,6 @@
+
+-
+
+
diff --git a/mx4j-impl-2.1.1.pom b/mx4j-impl-2.1.1.pom
new file mode 100644
index 0000000..13e5a94
--- /dev/null
+++ b/mx4j-impl-2.1.1.pom
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ mx4j
+ mx4j-impl
+ 2.1.1
+
\ No newline at end of file
diff --git a/mx4j-javaxssl.patch b/mx4j-javaxssl.patch
new file mode 100644
index 0000000..0e05e41
--- /dev/null
+++ b/mx4j-javaxssl.patch
@@ -0,0 +1,24 @@
+--- mx4j/src/tools/mx4j/tools/adaptor/ssl/SSLAdaptorServerSocketFactory.java.orig Thu Dec 23 19:07:29 2004
++++ mx4j/src/tools/mx4j/tools/adaptor/ssl/SSLAdaptorServerSocketFactory.java Thu Dec 23 19:08:43 2004
+@@ -21,9 +21,9 @@
+ import javax.net.ssl.SSLServerSocket;
+ import javax.net.ssl.SSLServerSocketFactory;
+
+-import com.sun.net.ssl.KeyManagerFactory;
+-import com.sun.net.ssl.SSLContext;
+-import com.sun.net.ssl.TrustManagerFactory;
++import javax.net.ssl.KeyManagerFactory;
++import javax.net.ssl.SSLContext;
++import javax.net.ssl.TrustManagerFactory;
+ import mx4j.log.Log;
+ import mx4j.log.Logger;
+
+@@ -60,7 +60,7 @@
+ {
+ static
+ {
+- addProvider(new com.sun.net.ssl.internal.ssl.Provider());
++ //addProvider(new com.sun.net.ssl.internal.ssl.Provider());
+ }
+
+ private String m_keyStoreType = "JKS";
diff --git a/mx4j-jmx-3.0.1.pom b/mx4j-jmx-3.0.1.pom
new file mode 100644
index 0000000..6dbf618
--- /dev/null
+++ b/mx4j-jmx-3.0.1.pom
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ mx4j
+ mx4j-jmx
+ 3.0.1
+
diff --git a/mx4j-jmx-remote-3.0.1.pom b/mx4j-jmx-remote-3.0.1.pom
new file mode 100644
index 0000000..367dd5f
--- /dev/null
+++ b/mx4j-jmx-remote-3.0.1.pom
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ mx4j
+ mx4j-remote
+ 3.0.1
+
diff --git a/mx4j-no-iiop.patch b/mx4j-no-iiop.patch
new file mode 100644
index 0000000..d22b25f
--- /dev/null
+++ b/mx4j-no-iiop.patch
@@ -0,0 +1,17 @@
+--- mx4j-2.1.0/build/build.xml.orig 2005-03-04 13:46:19.610032808 +0000
++++ mx4j-2.1.0/build/build.xml 2005-03-04 13:50:12.555578739 +0000
+@@ -254,12 +254,14 @@
+
+
+
++
+
+
+
diff --git a/mx4j-remote-3.0.1.pom b/mx4j-remote-3.0.1.pom
new file mode 100644
index 0000000..6eb4a23
--- /dev/null
+++ b/mx4j-remote-3.0.1.pom
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ mx4j
+ mx4j-remote
+ 3.0.1
+
\ No newline at end of file
diff --git a/mx4j-rimpl-2.1.1.pom b/mx4j-rimpl-2.1.1.pom
new file mode 100644
index 0000000..5e80d95
--- /dev/null
+++ b/mx4j-rimpl-2.1.1.pom
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ mx4j
+ mx4j-rimpl
+ 2.1.1
+
\ No newline at end of file
diff --git a/mx4j-rjmx-2.1.1.pom b/mx4j-rjmx-2.1.1.pom
new file mode 100644
index 0000000..2d3db2e
--- /dev/null
+++ b/mx4j-rjmx-2.1.1.pom
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ mx4j
+ mx4j-rjmx
+ 2.1.1
+
\ No newline at end of file
diff --git a/mx4j-tools-3.0.1.pom b/mx4j-tools-3.0.1.pom
new file mode 100644
index 0000000..8ba837d
--- /dev/null
+++ b/mx4j-tools-3.0.1.pom
@@ -0,0 +1,6 @@
+
+ 4.0.0
+ mx4j
+ mx4j-tools
+ 3.0.1
+
diff --git a/mx4j.spec b/mx4j.spec
new file mode 100644
index 0000000..5c2a946
--- /dev/null
+++ b/mx4j.spec
@@ -0,0 +1,143 @@
+Name: mx4j
+Version: 3.0.1
+Release: 1
+Epoch: 1
+Summary: Open source implementation of JMX Java API
+License: ASL 1.1
+URL: http://mx4j.sourceforge.net/
+Source0: https://master.dl.sourceforge.net/project/mx4j/MX4J%20Source/3.0.1/mx4j-3.0.1-src.tar.gz
+Source1: mx4j-build.policy
+Source2: CatalogManager.properties
+Source3: https://repo1.maven.org/maven2/mx4j/mx4j/3.0.1/mx4j-3.0.1.pom
+Source4: https://repo1.maven.org/maven2/mx4j/mx4j-jmx/3.0.1/mx4j-jmx-3.0.1.pom
+Source5: https://repo1.maven.org/maven2/mx4j/mx4j-jmx-remote/3.0.1/mx4j-jmx-remote-3.0.1.pom
+Source6: https://repo1.maven.org/maven2/mx4j/mx4j-remote/3.0.1/mx4j-remote-3.0.1.pom
+Source7: https://repo1.maven.org/maven2/mx4j/mx4j-tools/3.0.1/mx4j-tools-3.0.1.pom
+Source8: https://repo1.maven.org/maven2/mx4j/mx4j-impl/2.1.1/mx4j-impl-2.1.1.pom
+Source9: https://repo1.maven.org/maven2/mx4j/mx4j-rimpl/2.1.1/mx4j-rimpl-2.1.1.pom
+Source10: https://repo1.maven.org/maven2/mx4j/mx4j-rjmx/2.1.1/mx4j-rjmx-2.1.1.pom
+Patch0: mx4j-javaxssl.patch
+Patch1: mx4j-%{version}.patch
+Patch2: mx4j-build.patch
+Patch3: mx4j-docbook.patch
+Patch5: mx4j-caucho-build.patch
+Patch6: mx4j-no-iiop.patch
+BuildArch: noarch
+BuildRequires: jpackage-utils > 0:1.6 javapackages-local ant >= 0:1.6 ant-apache-resolver
+BuildRequires: javamail >= 0:1.2-5jpp log4j >= 0:1.2.7 apache-commons-logging >= 0:1.0.1
+BuildRequires: xml-commons-apis bcel >= 0:5.0 coreutils wsdl4j apache-commons-discovery
+BuildRequires: docbook-dtds >= 0:1.0 docbook-style-xsl >= 0:1.61 xml-commons-resolver
+BuildRequires: xml-commons xerces-j2 dos2unix
+Requires(post): %{_sbindir}/update-alternatives
+Requires(postun): %{_sbindir}/update-alternatives
+Requires: javamail >= 0:1.2-5jpp log4j >= 0:1.2.7 apache-commons-logging >= 0:1.0.1
+Requires: xml-commons-apis bcel >= 0:5.0 xml-commons-resolver xml-commons
+%description
+OpenJMX is an open source implementation of the
+Java(TM) Management Extensions (JMX).
+
+%package javadoc
+Summary: Javadoc for %{name}
+Requires: jpackage-utils
+%description javadoc
+Javadoc for %{name}.
+
+%package manual
+Summary: Documentation for %{name}
+%description manual
+Documentation for %{name}.
+
+%prep
+%setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -b .sav
+%patch3 -p1
+%patch5 -p1
+%patch6 -p1
+cp %{SOURCE1} build
+cp %{_sourcedir}/CatalogManager.properties %{_builddir}/%{name}-%{version}/build/
+cp %{SOURCE8} %{name}-impl-%{version}.pom
+cp %{SOURCE9} %{name}-rimpl-%{version}.pom
+cp %{SOURCE10} %{name}-rjmx-%{version}.pom
+sed -i "s|2.1.1|%{version}|" %{name}-*-%{version}.pom
+pushd lib
+ ln -sf $(build-classpath xml-commons-apis) xml-apis.jar
+ ln -sf $(build-classpath xerces-j2) xercesImpl.jar
+ ln -sf $(build-classpath xalan-j2) xalan.jar
+ ln -sf $(build-classpath commons-logging) .
+ ln -sf $(build-classpath log4j) .
+ ln -sf $(build-classpath bcel) .
+ ln -sf $(build-classpath wsdl4j) .
+ ln -sf $(build-classpath commons-discovery) .
+ ln -sf $(build-classpath servlet25) servlet.jar
+ ln -sf $(build-classpath javamail/mail) .
+ ln -sf $(build-classpath xml-commons-resolver) .
+popd
+find src/tools/mx4j/tools/remote/soap -type f -delete
+find src/tools/mx4j/tools/remote/provider/soap -type f -delete
+find src/tools/mx4j/tools/remote/resolver/soap -type f -delete
+
+%build
+export OPT_JAR_LIST="ant/ant-junit junit xmlunit jaxp_transform_impl ant/ant-apache-resolver xml-commons-resolver xalan-j2-serializer"
+cd build
+ant -Dbuild.sysclasspath=first compile.jmx compile.rjmx compile.tools javadocs docs
+
+%install
+install -d -m 755 $RPM_BUILD_ROOT%{_javadir}/%{name}
+install -d -m 755 $RPM_BUILD_ROOT%{_datadir}/%{name}
+install -m 644 dist/lib/%{name}-impl.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/%{name}-impl.jar
+install -m 644 dist/lib/%{name}-jmx.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/%{name}-jmx.jar
+install -m 644 dist/lib/%{name}.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/%{name}.jar
+install -m 644 dist/lib/%{name}-tools.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/%{name}-tools.jar
+install -m 644 dist/lib/%{name}-rjmx.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/%{name}-rjmx.jar
+install -m 644 dist/lib/%{name}-rimpl.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/%{name}-rimpl.jar
+install -m 644 dist/lib/%{name}-remote.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/%{name}-remote.jar
+install -d -m 755 $RPM_BUILD_ROOT%{_javadir}/%{name}/boa
+install -m 644 dist/lib/boa/%{name}-rjmx-boa.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/boa/%{name}-rjmx-boa.jar
+install -m 644 dist/lib/boa/%{name}-rimpl-boa.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/boa/%{name}-rimpl-boa.jar
+install -m 644 dist/lib/boa/%{name}-remote-boa.jar $RPM_BUILD_ROOT%{_javadir}/%{name}/boa/%{name}-remote-boa.jar
+install -d -m 755 $RPM_BUILD_ROOT%{_mavenpomdir}
+install -pm 644 %{SOURCE3} $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-%{name}.pom
+%add_maven_depmap JPP.%{name}-%{name}.pom %{name}/%{name}.jar
+install -pm 644 %{SOURCE4} $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-%{name}-jmx.pom
+%add_maven_depmap JPP.%{name}-%{name}-jmx.pom %{name}/%{name}-jmx.jar
+install -pm 644 %{SOURCE6} $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-%{name}-remote.pom
+%add_maven_depmap JPP.%{name}-%{name}-remote.pom %{name}/%{name}-remote.jar
+install -pm 644 %{SOURCE7} $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-%{name}-tools.pom
+%add_maven_depmap JPP.%{name}-%{name}-tools.pom %{name}/%{name}-tools.jar
+install -pm 644 %{name}-impl-%{version}.pom $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-%{name}-impl.pom
+%add_maven_depmap JPP.%{name}-%{name}-impl.pom %{name}/%{name}-impl.jar
+install -pm 644 %{name}-rimpl-%{version}.pom $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-%{name}-rimpl.pom
+%add_maven_depmap JPP.%{name}-%{name}-rimpl.pom %{name}/%{name}-rimpl.jar
+install -pm 644 %{name}-rjmx-%{version}.pom $RPM_BUILD_ROOT%{_mavenpomdir}/JPP.%{name}-%{name}-rjmx.pom
+%add_maven_depmap JPP.%{name}-%{name}-rjmx.pom %{name}/%{name}-rjmx.jar
+install -d -m 755 $RPM_BUILD_ROOT%{_javadocdir}/%{name}
+dos2unix dist/docs/styles.css README.txt LICENSE.txt
+cp -r dist/docs/api/* $RPM_BUILD_ROOT%{_javadocdir}/%{name}
+
+%pre
+rm -f %{_javadir}/%{name}.jar
+
+%post
+%{_sbindir}/update-alternatives --install %{_javadir}/jmxri.jar jmxri %{_javadir}/%{name}/%{name}-jmx.jar 0
+
+%postun
+if [ "$1" = "0" ]; then
+ %{_sbindir}/update-alternatives --remove jmxri %{_javadir}/%{name}/%{name}-jmx.jar
+fi
+
+%files -f .mfiles
+%{_javadir}/%{name}/boa/
+%doc LICENSE.txt
+%doc README.txt
+
+%files javadoc
+%{_javadocdir}/%{name}
+
+%files manual
+%doc dist/docs/*
+
+%changelog
+* Thu Jul 30 2020 shaoqiang kang - 3.0.1-1
+- Package init
diff --git a/mx4j.yaml b/mx4j.yaml
new file mode 100644
index 0000000..00bbaf0
--- /dev/null
+++ b/mx4j.yaml
@@ -0,0 +1,4 @@
+version_control: NA
+src_repo: NA
+tag_prefix: NA
+seperator: NA