解组 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 的一部分提供的任何内容
我们有一个应用程序 运行 当前在 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 的一部分提供的任何内容