java – WebLogic 12c解组JAXB的迁移问题

前端之家收集整理的这篇文章主要介绍了java – WebLogic 12c解组JAXB的迁移问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个正在WebLogic 10.3.5.0上运行的应用程序,我们正在迁移到WL 12.1.2.0.0.我们正在解决将其他应用程序的WS调用解组的问题.我们熟悉升级时的编组错误,但是看起来这个问题是不一样的.

值得注意的是,它在相同WL版本的DEV / Test服务器上工作正常,但在本地部署时会返回以下错误(必须是env /配置设置不匹配):

JAXB unmarshalling exception: null; nested exception is javax.xml.bind.UnmarshalException - with linked exception: [org.xml.sax.SAXParseException; cvc-complex-type.3.2.2: Attribute 'xsi:nil' is not allowed to appear in element 'error'.]

错误消息,似乎它不识别xsi命名空间或某事.该架构与10.3.5没有变化,不应该成为问题的根源.任何人都有什么想法,甚至是起点呢?

非常感谢

编辑:添加web.xml和weblogic.xml

web.xml中

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="cpc-mi" version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
...
</web-app>

weblogic.xml中

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd 
        http://xmlns.oracle.com/weblogic/weblogic-web-app 
        http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd" 
    xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
</weblogic-web-app>

解决方法

WebLogic 12c(WLS 12c)有自己的jar库,包括jaxb.我已经在使用这个服务器,当我想使用JSF(WebLogic附带的另一个库)时,我必须告诉WLS 12c,忽略它自己的JSF库,并使用我的,包含在war / ear中.

您可以在WEB-INF文件夹中使用weblogic.xml描述符来实现.这里是我的一个weblogic.xml

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">

  <container-descriptor>
    <prefer-application-packages> 
      <package-name>javax.faces.*</package-name> 
      <package-name>com.sun.faces.*</package-name> 
      <package-name>com.bea.faces.*</package-name> 
      <package-name>org.apache.commons.io.*</package-name>
      <package-name>org.apache.commons.fileupload.*</package-name>
    </prefer-application-packages> 

    <prefer-application-resources> 
      <resource-name>javax.faces.*</resource-name> 
      <resource-name>com.sun.faces.*</resource-name> 
      <resource-name>com.bea.faces.*</resource-name> 
      <resource-name>Meta-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
      <resource-name>Meta-INF/services/com.sun.faces.*</resource-name>
    </prefer-application-resources>

    <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
  </container-descriptor>
</weblogic-web-app>

当然,你自己的jaxb依赖项包含在你的war / ear中,并告诉WLS 12c忽略它的jaxb库,使用java.xml.bind.* value作为package-name标签,也可能是resource-name标签.

希望它有帮助.

猜你在找的Java相关文章