Unmarshalling JAXB的WebLogic 12c迁移问题

时间:2015-08-24 17:56:30

标签: java jaxb unmarshalling weblogic12c

我们当前正在WebLogic 10.3.5.0上运行一个应用程序,我们正在迁移到WL 12.1.2.0.0。我们遇到了对另一个应用程序进行Un-marshalling 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>

2 个答案:

答案 0 :(得分:1)

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

您可以在weblogic.xml文件夹中使用WEB-INF描述符来实现此目的。在这里,您使用的是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.*标记的package-name值,也可以使用resource-name标记

希望它有所帮助。

答案 1 :(得分:0)

我对此知之甚少,而且我不确定这是否是远程正确的,但是确实放了xmlns:xsi =&#34; http://www.w3.org/2001/XMLSchema-instance& #34;在XML实例中使它工作?