【发布时间】:2019-02-18 09:18:49
【问题描述】:
我正在将我的应用程序从 Java 8 和 Tomcat 7 迁移到 Java 11 和 Tomcat 9。 通过一些版本更新、较小的实现更改和添加一些 Maven 依赖项,我已经能够成功编译和运行我的应用程序。但是,我编写的集成测试很少用于测试我的应用程序中失败的基于 Soap 的 Web 服务。 这是由于预期的 Soap 响应与实际响应不匹配造成的。
以下是两个响应: 实际是:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<S:Envelope
xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body
xmlns:ns2="http://www.acd.org/cact/namespaces/StandardBusinessDocumentHeader"
xmlns:ns3="urn:global:cpci-query:xsd:1"
xmlns:ns4="urn:global:cpci-masterdata:xsd:1"
xmlns:ns5="urn:global:cpci:xsd:1">
<ns3:GetResult>
<string>SimpleDataQuery</string>
<string>SimpleQuery</string>
</ns3:GetResult>
</S:Body>
</S:Envelope>
预期是:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns5:GetResult
xmlns:ns5="urn:global:cpci-query:xsd:1">
<string>SimpleQuery</string>
<string>SimpleDataQuery</string>
</ns5:GetResult>
</soapenv:Body>
</soapenv:Envelope>
pom 有以下更新条目:
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.2</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
Java 11 是否会对 WS 响应的元素顺序受到干扰有任何影响?如果是,那么这是由于一些过时的依赖关系还是我们需要修改一些实现?
【问题讨论】:
-
嗨,在 Java 11 中删除了一些 API -
java.activation , java.corba, java.transaction ,java.xml.bind << This one contains the JAXB APIs java.xml.ws, java.xml.ws.annotation。因此,在从旧版本的 java 迁移过程中,我们必须使用一些 3rd 方依赖项。影响仅取决于第 3 方 jar。选择满足您要求的最佳罐子 -
感谢 Ramesh,我已经完成了这些步骤并且应用程序正在运行。现在唯一的问题是,我的 SOAP 基础 Web 服务响应中的元素顺序与 Java 8 过去不同。
-
在 XML 级别上,旧的和实际的响应是相同的,Java 11 版本只是没有优化,因为它包含未使用的命名空间。
-
我同意@Robert,XML 的内容是一样的。也许这是一个让集成测试不那么严格的机会,所以他们忽略了 XML 的形式?
标签: java xml soap java-11 tomcat9