13

使用 Service 和 Dispatch 类从 Java 代码调用 Web 服务与 SOAPConnection 类在哲学上或其他方面有什么区别?

例如,像这样:

SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = scf.createConnection();
SOAPMessage reply = soapConnection.call(soapMessage, url);

与这些大致相同的东西?

svc = Service.create(url, serviceName);
Dispatch<SOAPMessage> dispatch = svc.createDispatch(portName, SOAPMessage.class, service.Mode.MESSAGE);
SOAPMessage reply = (SOAPMessage)dispatch.invoke(soapMessage);

这些之间有什么区别,为什么选择一种方法而不是另一种方法?

4

2 回答 2

4

以下行摘自 Java SOA Cookbook - O'Reilly

“SOAP 连接允许您将 SOAP 消息发送到 URL 末尾的资源。这在任何情况下都很方便,但如果该服务没有定义的 WSDL,则这是必需的。这是因为调用 Service.create 需要传递在 WSDL 的位置。您可能很少有没有带有基于 SOAP 的服务的 WSDL,但它确实发生了,您将做好准备。

要创建与不公开 WSDL 的 Web 服务的连接,您可以使用 SOAPConnection 类直接与远程资源通信。然后创建一个 URL 对象,表示要调用的远程资源(servlet)。将 SOAP 请求消息和要调用的端点传递给连接对象的 call 方法,然后等待它返回 SOAP 响应。

• 传递给connection.call 方法的端点URL 可以是字符串或java.net.URL。”

于 2014-04-29T11:36:06.120 回答
1

我有一种感觉,最后,Dispatch 只是将操作委托给 SAAJ 层。但是,我无法证实这一点。

从什么是更好的实践的角度来看,我觉得 Dispatch 方法更合适,因为它抽象了使用较低级别的 SAAJConnection API 的一些开销。就像 - 不需要对连接实例执行 close() 操作,与 SOAPConnection 实例不同,不需要重新创建分派引用。

于 2010-10-07T20:49:54.883 回答