解组 JAXB 的 WebLogic 12c 迁移问题

WebLogic 12c Migration issue with Unmarshalling JAXB

我们有一个应用程序 运行 当前在 WebLogic 10.3.5.0 上,我们正在迁移到 WL 12.1.2.0.0。我们遇到了对另一个应用程序的 Un-marshalling WS 调用的问题。我们熟悉升级时的 Marshalling 错误,但似乎这个问题并不相同。

需要注意的奇怪之处是,它在相同 WL 版本的 DEV/Test 服务器上工作正常,但在本地部署时会 return 出现以下错误(必须是 env/configuration 设置不匹配?):

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>

我对此知之甚少,我不确定这是否完全正确,但是将 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 放在 XML 实例中是否有效?

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 库,对 package-name 标记使用 java.xml.bind.* 值,也可能对 resource-name 标签。

希望对您有所帮助。

我们遇到了类似的问题:肥皂消息的解析在 10.3.x 中正常,但在 12.x 中失败。这个问题原来是一个过时的 xercesImpl.jar。我怀疑这是发生在你身上的事情,但我想我分享经验以防万一。

请注意,过时的 xercesImpl.jar 包含在我们作为库部署的 war 文件之一中,而不是 Oracle 作为 WebLogic 12 的一部分提供的任何内容