使用开放源代码框架的 Java 应用程序的 Web 服务集成模式,第 1 部分: 实现调用模式
2009-11-05 00:00:00 来源:WEB开发网异步调用
在异步调用中,客户机将消息发送到服务,服务然后使用该消息。此时,客户机并不会等待服务进行应答。
如 WSDL 语法所定义的,单向操作仅具有输入元素。
清单 4. 单向操作的 WSDL<wsdl:definitions> <wsdl:portType .... > *
<wsdl:operation name="nmtoken">
<wsdl:input name="nmtoken"? message="qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>>
可以通过使用 SOAP over JMS 实现异步调用。JMS 的缺省行为就是进行异步消息传递。
清单 5. 使用 SOAP over JMS 的单向 Web 服务客户机示例代码
// ...
// provide JMS handler
Call.addTransportPackage(packageName);
Call.setTransportForProtocol(
"JMSTransport",
JMSTransport.class);
// get client configuration
EngineConfiguration defaultConfig =
(new
DefaultEngineConfigurationFactory()).getClientEngineConfig();
// create custom configuration for client
SimpleProvider config = new SimpleProvider(defaultConfig);
// get chain for given transport
SimpleTargetedChain chain =
new SimpleTargetedChain(
new JMSSender(connectionFactory, destination));
config.deployTransport("JMSTransport", chain);
// create service using custom configuration
Service service = new Service(config);
Call call = (Call) service.createCall();
call.setOperation(super.getOperation());
// set JMS specific information (topic/queue name, context factory) in call
// these values will be needed in chain for actually sending JMS message
call.setProperty(JMSConstants.DESTINATION, destination);
call.setProperty(
"transport.jms.ConnectionFactoryJNDIName",
connectionFactory);
if (destinationDomain.equalsIgnoreCase("topic")) {
call.setProperty(JMSConstants.DOMAIN,
JMSConstants.DOMAIN_TOPIC);
}
if (destinationDomain.equalsIgnoreCase("queue")) {
call.setProperty(JMSConstants.DOMAIN,
JMSConstants.DOMAIN_QUEUE);
}
call.setTransport(new JMSTransport());
// invoke the web service
call.invoke(params);
// ...
WSIF 支持异步调用。可以通过调用 API 中的不同方法来使用 WSIF 客户机进行异步调用。
清单 6. 使用 WSIF 的单向 Web 服务客户机示例代码
// ...
// create operation
WSIFOperation operation = port.createOperation(
operationName,
inputMessage,
outputMessage);
// prepare input
WSIFMessage input = operation.createInputMessage();
// invoke web service one-way
operation.executeInputOnlyOperation(input);
// ...
结束语
在本文中,我们对 Web 服务端点的请求-响应模式和单向模式进行了详细的讨论。而且说明,在标识了功能后,可以如何使用采用开放源代码框架的相应 Web 服务来支持这两种模式。在本系列的第 2 部分,我们将讨论 Web 服务中涉及的客户机端点可支持的其他两个集成模式,即要求-响应模式和通知模式。
更多精彩
赞助商链接