Tomcat 9 和 Java 11 上的 Soap Web 服务响应不同
Soap Webservice Response Differing on Tomcat 9 and Java 11
我正在将我的应用程序从 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>
Java11 对 WS 响应的元素顺序被打乱有什么影响吗?如果是,那么这是由于一些过时的依赖项还是我们需要修改一些实现?
虽然我不确定这是否是正确的解决方案,但以下对我有用:
在我的 pom.xml 中明确添加了以下条目(这些是旧的依赖项,因为较新的依赖项导致 xml 响应发生变化):
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.8</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>com.sun.xml.stream.buffer</groupId>
<artifactId>streambuffer</artifactId>
<version>1.5.7</version>
</dependency>
<dependency>
<groupId>com.sun.org.apache.xml.internal</groupId>
<artifactId>resolver</artifactId>
<version>20050927</version>
</dependency>
<dependency>
<groupId>org.glassfish.gmbal</groupId>
<artifactId>gmbal</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt-ha</artifactId>
<version>2.3.0.2</version>
</dependency>
Post 这些更改,在迁移到 Java 11.
之前,我得到的 XML 响应与我在 Java 8 上得到的响应相同
更新:显然问题是由于新 JDK 中缺少 rt.jar 和 jaxws-rt.jar。添加这些依赖项并不能完全解决问题,因为它们的传递性由于未编译 pom.xml 而无法使用。
在 maven 中添加所有必需的传递依赖项解决了这个问题。
我正在将我的应用程序从 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>
Java11 对 WS 响应的元素顺序被打乱有什么影响吗?如果是,那么这是由于一些过时的依赖项还是我们需要修改一些实现?
虽然我不确定这是否是正确的解决方案,但以下对我有用:
在我的 pom.xml 中明确添加了以下条目(这些是旧的依赖项,因为较新的依赖项导致 xml 响应发生变化):
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.2.8</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.8</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>com.sun.xml.stream.buffer</groupId>
<artifactId>streambuffer</artifactId>
<version>1.5.7</version>
</dependency>
<dependency>
<groupId>com.sun.org.apache.xml.internal</groupId>
<artifactId>resolver</artifactId>
<version>20050927</version>
</dependency>
<dependency>
<groupId>org.glassfish.gmbal</groupId>
<artifactId>gmbal</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt-ha</artifactId>
<version>2.3.0.2</version>
</dependency>
Post 这些更改,在迁移到 Java 11.
之前,我得到的 XML 响应与我在 Java 8 上得到的响应相同更新:显然问题是由于新 JDK 中缺少 rt.jar 和 jaxws-rt.jar。添加这些依赖项并不能完全解决问题,因为它们的传递性由于未编译 pom.xml 而无法使用。 在 maven 中添加所有必需的传递依赖项解决了这个问题。