在没有 wsimport 的情况下在 Java 中使用通用 xml soap 网络服务

Consuming generic xml soap webservice in Java without wsimport

我正在寻找一种无需使用 wsimport 和类似工具即可使用 soap 网络服务的方法。到目前为止,我发现的每件事都需要 wsdl 工件生成,我想避免它,因为我不知道将使用哪个 web 服务。

这个想法是让用户可以添加几个 WSDL 的 urls / 方法,程序使用它们并将它的响应发送给另一个 url。

我不是在寻找现成的 solutions/code 或类似的东西。 我需要的是知道是否可能以及如何解决这个问题、想法和类似的事情。

谢谢!

SOAP 强制执行客户端和服务器之间的契约。合同是客户端将发出请求 XML 是 XYZ 格式,服务器将以 ABC 格式给出响应。没有这个,SOAP 就无法工作。这是在 WSDL 中定义的。所以我们不得不使用WSDL。

wsimport、wsdl4j 等工具将这些 WSDL 文件转换为对象层次结构并为您准备 JAXB 包装器,让生活变得轻松!

现在,如果您不想使用自动将 WSDL 转换为 Java Beans 或任何类似工具的工具,请注意 SOAP 仅基于 XML。如果您知道如何解析 java 中的 XML,那就差不多了。您可以使用 JAX 解析器来实现这一点,并且可以读取 SOAP 请求和响应中的所有内容。

您将面临的问题是,随着 SOAP XML 的复杂性增加,您将很难正确解析 XML,正确识别节点、值和关系.除此之外,如果没有适当的对象层次结构,您就无法在相距很远的节点之间建立关联。意思是,从第 100 行开始,你不能返回并关联第 10 行的节点,除非你开始维护自己的对象、关系等(我猜这不是你想要的)

使用 Java Beans 可以维护对象层次结构,因此您可以轻松地将它们与不同节点的不同对象关联起来。但是 JAXB 比 JAX 相对慢。