我们使用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在多个场景中发送正确,只是在一个场景中,它没有添加我们需要的名称空间
请检查上述页面,该页面具有不同的过滤类加载:
<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>
通过更新包信息解决了此问题。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以添加原始名称空间
看起来您正在描述一个类加载问题。因此,请在您的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