当前位置: 首页 > 知识库问答 >
问题:

WebLogic 12c上的Apache CXF SOAP JAXB问题

令狐良骏
2023-03-14

我们使用Java 8、Apache CXF作为Spring Boot之上的SOAP客户端,向WS发送SOAP消息。

如果将该应用程序部署为对Tomcat 8的一场战争,那么该应用程序运行良好,SOAP客户端正在使用正确的名称空间发送正确的XML消息。

如果同一应用WAR部署在Weblogic 12c上,则CXF SOAP客户端生成的SOAP消息缺少命名空间。

我们知道WebLogic可能使用了一些旧的JAXB JAR,这些JAXB JAR负责从Java对象创建XML消息,它们与Tomcat服务器不同,这可能是我们看到这个问题的原因。

我们还知道,我们可以在weblogic中指定。war文件中的xml Weblogic需要从war中加载什么JAR,直接从Weblogic库中加载什么依赖项,但是我们在Weblogic中尝试的每种组合。xml不起作用。

任何好的建议都将不胜感激

使用Apache CXF的Tomcat服务器的XML输出示例

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
    <event xmlns="http://www.test.com" xmlns:ns5="http://www.test2.com" xmlns:ns3="urn:test1:1423.15465:123123:namespace">
        <ns5:created-date-time>2020-08-12T08:02:35Z</ns5:created-date-time>
        <ns5:payload>
            <Test2>
                <ns3:ID>f14bb</ns3:ID>
                <ns3:createdDateTime>2020-08-12T08:02:35Z</ns3:createdDateTime>
            </Test2>
        </ns5:payload>
    </event>
</env:Body>

来自Weblogic 12c的示例代码

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
    <event xmlns="http://www.test.com" xmlns:ns5="http://www.test2.com">
        <ns5:created-date-time>2020-08-12T08:02:35Z</ns5:created-date-time>
        <ns5:payload>
            <Test2>
                <ID>f14bb</ID>
                <createdDateTime>2020-08-12T08:02:35Z</createdDateTime>
            </Test2>
        </ns5:payload>
    </event>
</env:Body>

weblogic服务器中的“urn:test1:1423.15465:123123:namespace”被完全忽略,这使得该XML消息对使用者无效

weblogic。xml我们试图告诉weblogic从war文件加载我们的类,而不是从web逻辑加载JaxB类,但没有成功

<wls:container-descriptor>
    <wls:prefer-application-packages>
        <wls:package-name>java.xml.bind.*</wls:package-name>
        <wls:package-name>org.apache.cxf.*</wls:package-name>
        <wls:package-name>javax.xml.ws.*</wls:package-name>
        <wls:package-name>javax.wsdl.*</wls:package-name>
</wls:prefer-application-resources>
    </wls:container-descriptor>

除了这个问题之外,其他一切都正常工作,Apache CXF在多个场景中发送正确,只是在一个场景中,它没有添加我们需要的名称空间

共有3个答案

顾亦
2023-03-14

请检查上述页面,该页面具有不同的过滤类加载:

   <wls:prefer-application-packages>
        <wls:package-name>com.ctc.wstx.*</wls:package-name>
        <wls:package-name>javax.wsdl.*</wls:package-name>
        <wls:package-name>org.apache.cxf.*</wls:package-name>
        <!-- <wls:package-name>javax.jws.*</wls:package-name> -->
    </wls:prefer-application-packages>
景凌
2023-03-14

通过更新包信息解决了此问题。Java语言

@javax.xml.bind.annotation.XmlSchema(namespace = "urn:test1",
    xmlns = {@XmlNs(prefix = "",
         namespaceURI = "http://www.test.com")},
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

这是以前没有的包裹信息部分

xmlns={@xmlns(前缀=“”,命名空间URI=“”http://www.test.com")}

添加名称空间技巧JavaXB以添加原始名称空间

冯敏达
2023-03-14

看起来您正在描述一个类加载问题。因此,请在您的weblogic中使用下面的标记。xml描述符。

<prefer-web-inf-classes>false</prefer-web-inf-classes>

几年前,我一直在努力解决类加载问题,因为我错过了它。下面是从这个博客中摘录的一个例子。

如果在应用此功能后您仍然面临类加载器的问题,您应该安装Classloader Analysis Tool(CAT)以获取正在加载冲突类的类加载器。在本博客中,您将获得有关如何使用CAT的一些说明。

重要的是,Oracle在本文中对此进行了说明

请注意,为了使用首选应用程序包或首选应用程序资源,必须将首选web inf类设置为false。

 类似资料:
  • 我正在使用下面的命令检查12C中Weblogic服务器的状态,该命令在10.x Weblogic中正常工作 java weblogic.admin-URL t3:/$IP:$端口getstate-username$username-password$password 我将类路径设置如下导出classpath=$WL_HOME/server/lib/weblogic.jar

  • 我在eclipse中使用“Jersey”原型开发了一个非常小的restful Web服务,并且在Tomcat中成功地部署了该服务。但是,我无法在WebLogic12c中部署它。这是我到目前为止所尝试的: 创建了一个包含泽西岛图书馆的共享库,正如我在其中一篇文章中看到的。这是我的pom.xml,它生成包含所需清单文件的共享库: 块引号 在我的webservice应用程序中的WEB-INF文件夹下添加

  • 我有一个带有restful web服务API的web应用程序。该应用程序现在已经开发完成,并且可以在Glassfish服务器(3.1.x)上完美地工作。 作为jax-rs的实现,webapp使用REST-Easy,因为它提供的特性在Jersey中是不存在的。 现在,有必要在WebLogic12c中部署Web应用程序,特别是在WebLogic12.1.2中。但似乎不可能这样做。Weblogic将Je

  • 我有这个问题,一个应用程序耳朵有这个错误,我是一个weblogic12c的新管理员,有人帮助我吗??? 这是一个标准安装Weblogic 12c

  • 我在EKS上运行服务已经有一段时间了,今天无意中删除了nginx入口。现在,当我尝试使用以下url中的入口控制器模板设置入口时,只需稍加修改: https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/aws/deploy-tls-termination.

  • 我刚刚在甲骨文的网站上用这个脚本安装了Netbeans,但我在让它正常工作时遇到了一些问题。打开Netbeans后,我去打开一个简单的。java文件只是为了测试它,并得到以下错误: "缺少JDK,需要它来运行一些Neatbean模块。请使用--jdkhome命令行选项来指定JDK安装,或者查看http://wiki.netbeans.org/FaqRunningOnJre以获取更多信息。" 我有O

  • 我已经尝试在eclipse help中安装TestNG-->install new software http://beust.com/eclipse 我收到以下错误: 无法连接存储库http://beust.com/eclipse/content.xml 我错过什么了吗?

  • 我尝试升级pip与pip安装-U pip,我得到: 使用缓存的pip-8.0收集pip。2-py2。没有。whl 安装收集的软件包:pip找到现有安装:pip 7.1。0正在卸载pip-7.1。0: 例外情况: Traceback(最近的调用最后): 文件"/usr/local/lib/python2.7/dist-包/pip/basecommand.py",第223行,在主状态=self.run