Apache Karaf(也许是Java)在不同服务器上的不同行为

时间:2018-08-01 14:18:58

标签: java linux apache-karaf

我在一台服务器(Server1)上出现错误(见下文),而另一台服务器(Server2)上却没有错误。

这是代码:

GregorianCalendar c = new GregorianCalendar();
c.setTime(rs.getDate("claimDate"));
XMLGregorianCalendar date2 = 
DatatypeFactory.newInstance().newXMLGregorianCalendar(c);

这是错误:

Caused by: java.lang.NoSuchMethodError: javax.xml.datatype.FactoryFinder.find(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
at javax.xml.datatype.DatatypeFactory.newInstance(DatatypeFactory.java:49) ~[?:?]

Java版本相同(内部版本1.8.0_92-b14)。

我使用了自定义的Karaf发行版(https://karaf.apache.org/manual/latest/#_custom_distributions),该发行版部署在两个不同的服务器(不同的物理机和Ubuntu版本)上。

Server1:Linux karaf1 2.6.32-358.el6.x86_64#1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux

Server2:Linux newproger 3.13.0-142-generic#191-Ubuntu SMP Fri Feb 2 12:13:35 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux

启动脚本和Java参数都相同。

1 个答案:

答案 0 :(得分:1)

在karaf认可的lib文件夹(apache-karaf-x.x.x/lib/endorsed)中可能有一些jar文件正在覆盖javax.xml.datatype.FactoryFinder类(来自rt.jar)。

如果在程序集pom中使用<libraries>标签(在karaf-maven-plugin中)-尝试查找包含javax.xml.datatype软件包的jar(在我的情况下为-org.apache.servicemix.specs.jaxp-api)并删除它。在下面的示例中找到它的地方:

<plugin>
            <groupId>org.apache.karaf.tooling</groupId>
            <artifactId>karaf-maven-plugin</artifactId>
            <version>${karaf.version}</version>
            <configuration>
                <startupFeatures>
                    <feature>eventadmin</feature>
                </startupFeatures>
                <installedFeatures>

                    <feature>wrapper</feature>
                </installedFeatures>
                <bootFeatures>
                    <!-- karaf standard -->
                    <feature>jaas</feature>
                    <feature>wrap</feature>
                     (...)
                    <feature>hibernate</feature>
                    <feature>transaction</feature>
                    <feature>jpa</feature>
                </bootFeatures>

                <libraries>

                </libraries>
                <javase>${java.version}</javase>
            </configuration>
        </plugin>