我的应用程序使用apache wink中的jaxb jar (jaxb-impl-2.2.1.1.jar)。我在bluemix上部署了我的应用程序。
当它访问com.sun.xml.bind.marshaller.CharacterEscapeHandler时,它在bluemix上以NoClassDefFoundError失败。
bluemix是否使用其他没有这个类的jar版本?我怎么检查这个?
启用jaxb-2.2特性:
cf set-env <appname> JBP_CONFIG_LIBERTY "app_archive: {features: ["jsf-2.0", "jsp-2.2", "servlet-3.0", "ejbLite-3.1", "cdi-1.0", "jpa-2.0", "jdbc-4.0", "jndi-1.0", "managedBeans-1.0", "jaxrs-1.1", "jaxb-2.2"]}"
你也可以尝试使用OpenJDK
cf set-env myapp JVM 'openjdk'
当您在Liberty上运行时,您不能在应用程序中包含wink jaxb jar,您的代码应该只依赖jaxb规范中包含的类(主要在javax.xml.bind包中),而不是任何特定于wink的类。
然后只需要在server.xml中包含jaxb-2.2特性。
有一个关于在liberty上开发jaxb应用程序的教程,它详细介绍了配置开发环境和liberty服务器所需的步骤。