WebLogic 12c在部署期间不遵循“ prefer-web-inf-classes”或“ prefer-application-packages”

时间:2019-07-03 06:47:17

标签: deployment weblogic weblogic12c

WebLogic 12.1.3.0.0遇到一个非常奇怪的问题。我有一个在部署过程中在NullPointerException内部引起AdminServer的应用程序,但该应用程序在发生错误后运行良好。

在部署期间发生NullPointerException是因为部署过程未遵循我的部署描述符中的以下设置:

AppName.war/WEB-INF/weblogic.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>

  <context-root>AppName</context-root>
  <container-descriptor>
      <prefer-web-inf-classes>true</prefer-web-inf-classes>
  </container-descriptor>

</weblogic-web-app>

还有AppName.ear/META-INF/weblogic-application.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-application>

    <prefer-application-packages>
            <package-name>javax.faces.*</package-name>
    </prefer-application-packages>

</weblogic-application>

由于忽略了这些设置,因此javax.faces.webapp.FacesServlet类由系统类加载器(sun.misc.Launcher$AppClassLoader)从$WL_HOME/wlserver/modules/glassfish.jsf_2.0.0.0_2-1-20.jar而非WAR类加载器加载。由于NPE中的某些编写不佳的代码,最终导致weblogic.servlet.internal.WebAnnotationProcessor,它假定javax.faces.webapp.FacesServlet将用@MultipartConfig进行注释,而{{1}中则没有}。此类的正确版本位于glassfish.jsf_2.0.0.0_2-1-20.jar中。

我已经通过远程调试AdminServer并打开Classloader Logging(显示以下内容)验证了所有这些信息:

AppName.ear/AppName.war/WEB-INF/lib/jsf-api-2.2.16.jar

此问题导致无法在管理控制台中打开GCL[61ba0535][AppName.ear@AppName.war] GCL.loadClass(javax.faces.webapp.FacesServlet)> FCL[10d372cb][] FCL.loadClass(javax.faces.webapp.FacesServlet)> FCL[10d372cb][] FCL.findClass(javax.faces.webapp.FacesServlet)> GCL[75bc8d74][DomainLib] GCL.loadClass(javax.faces.webapp.FacesServlet)> 部署,b / c总是抛出错误(日志中带有上述NPE):

AppName

与此相反,当我在部署EAR的服务器中运行EAR时,完全相同的EAR可以正常工作。为了证明类加载工作正常,这里是日志:

The configuration for AppName is still being loaded from your last request, please wait a moment and retry.

我不知道该如何解决...为什么AdminServer会完全忽略EAR中的部署描述符,而运行EAR的服务器会正​​确设置所有内容?

任何想法都会受到赞赏。

0 个答案:

没有答案