/******************************************************************************* * Copyright (c) 2009 MATERNA Information & Communications. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html. For further * project-related information visit http://www.ws4d.org. The most recent * version of the JMEDS framework can be obtained from * http://sourceforge.net/projects/ws4d-javame. ******************************************************************************/ package org.ws4d.java.communication.protocol.soap; import org.ws4d.java.DPWSFramework; import org.ws4d.java.communication.ProtocolData; import org.ws4d.java.communication.ResponseCallback; import org.ws4d.java.message.FaultMessage; import org.ws4d.java.message.InvokeMessage; import org.ws4d.java.message.Message; import org.ws4d.java.message.discovery.ProbeMatchesMessage; import org.ws4d.java.message.discovery.ResolveMatchesMessage; import org.ws4d.java.message.eventing.GetStatusResponseMessage; import org.ws4d.java.message.eventing.RenewResponseMessage; import org.ws4d.java.message.eventing.SubscribeResponseMessage; import org.ws4d.java.message.eventing.UnsubscribeResponseMessage; import org.ws4d.java.message.metadata.GetMetadataResponseMessage; import org.ws4d.java.message.metadata.GetResponseMessage; import org.ws4d.java.service.OperationDescription; import org.ws4d.java.types.XAddressInfo; /** * This is a special implementation of the {@link ResponseCallback} which allows * to continue handling further messages, without waiting for the callback to be * finished. */ class NonBlockingResponseCallback implements ResponseCallback { private ResponseCallback to = null; private XAddressInfo targetXAddresInfo = null; /** * Creates a non-blocking callback for SOAP messages. * * @param to the origin callback. */ NonBlockingResponseCallback(XAddressInfo targetXAddressInfo, ResponseCallback to) { this.targetXAddresInfo = targetXAddressInfo; this.to = to; } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, * org.ws4d.java.message.discovery.ProbeMatchesMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, ProbeMatchesMessage probeMatches, final ProtocolData protocolData) { final ProbeMatchesMessage res = probeMatches; final Message req = request; final ResponseCallback callback = to; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, protocolData); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, * org.ws4d.java.message.discovery.ResolveMatchesMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, ResolveMatchesMessage resolveMatches, final ProtocolData protocolData) { final ResolveMatchesMessage res = resolveMatches; final Message req = request; final ResponseCallback callback = to; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, protocolData); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, * org.ws4d.java.message.metadata.GetResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, GetResponseMessage getResponse, ProtocolData protocolData) { final GetResponseMessage res = getResponse; final Message req = request; final ResponseCallback callback = to; final ProtocolData data = protocolData; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, data); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, org.ws4d.java.message.metadata * .GetMetadataResponseMessage, org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, GetMetadataResponseMessage getMetadataResponse, ProtocolData protocolData) { final GetMetadataResponseMessage res = getMetadataResponse; final Message req = request; final ResponseCallback callback = to; final ProtocolData data = protocolData; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, data); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, * org.ws4d.java.message.eventing.SubscribeResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, SubscribeResponseMessage subscribeResponse, ProtocolData protocolData) { final SubscribeResponseMessage res = subscribeResponse; final Message req = request; final ResponseCallback callback = to; final ProtocolData data = protocolData; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, data); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, * org.ws4d.java.message.eventing.GetStatusResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, GetStatusResponseMessage getStatusResponse, ProtocolData protocolData) { final GetStatusResponseMessage res = getStatusResponse; final Message req = request; final ResponseCallback callback = to; final ProtocolData data = protocolData; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, data); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, * org.ws4d.java.message.eventing.RenewResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, RenewResponseMessage renewResponse, ProtocolData protocolData) { final RenewResponseMessage res = renewResponse; final Message req = request; final ResponseCallback callback = to; final ProtocolData data = protocolData; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, data); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, * org.ws4d.java.message.eventing.UnsubscribeResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, UnsubscribeResponseMessage unsubscribeResponse, ProtocolData protocolData) { final UnsubscribeResponseMessage res = unsubscribeResponse; final Message req = request; final ResponseCallback callback = to; final ProtocolData data = protocolData; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, data); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, * org.ws4d.java.message.invocation.InvokeMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, InvokeMessage invokeResponse, ProtocolData protocolData) { final InvokeMessage res = invokeResponse; final Message req = request; final ResponseCallback callback = to; final ProtocolData data = protocolData; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, data); } }); } /* * (non-Javadoc) * @seeorg.ws4d.java.communication.ResponseCallback#handle(org.ws4d.java. * communication.message.Message, org.ws4d.java.message.FaultMessage, * org.ws4d.java.communication.ProtocolData) */ public void handle(Message request, FaultMessage fault, ProtocolData protocolData) { final FaultMessage res = fault; final Message req = request; final ResponseCallback callback = to; final ProtocolData data = protocolData; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handle(req, res, data); } }); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.ResponseCallback#handleTransmissionException * (org.ws4d.java.message.Message, java.lang.Exception, * org.ws4d.java.communication.ProtocolData) */ public void handleTransmissionException(Message request, Exception exception, final ProtocolData protocolData) { final Exception res = exception; final Message req = request; final ResponseCallback callback = to; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handleTransmissionException(req, res, protocolData); } }); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.ResponseCallback#handleMalformedResponseException * (org.ws4d.java.message.Message, java.lang.Exception, * org.ws4d.java.communication.ProtocolData) */ public void handleMalformedResponseException(Message request, Exception exception, final ProtocolData protocolData) { final Exception res = exception; final Message req = request; final ResponseCallback callback = to; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handleMalformedResponseException(req, res, protocolData); } }); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.ResponseCallback#handleTimeout(org.ws4d.java * .communication.message.Message) */ public void handleTimeout(Message request) { final Message req = request; final ResponseCallback callback = to; DPWSFramework.getThreadPool().execute(new Runnable() { /* * (non-Javadoc) * @see java.lang.Runnable#run() */ public void run() { callback.handleTimeout(req); } }); } /* * (non-Javadoc) * @see org.ws4d.java.communication.ResponseCallback#getOperation() */ public OperationDescription getOperation() { return to.getOperation(); } /* (non-Javadoc) * @see org.ws4d.java.communication.ResponseCallback#setTargetAddress(org.ws4d.java.types.XAddressInfo) */ public void setTargetAddress(XAddressInfo targetXAddressInfo) { this.targetXAddresInfo = targetXAddressInfo; } /* (non-Javadoc) * @see org.ws4d.java.communication.ResponseCallback#getTargetAddress() */ public XAddressInfo getTargetAddress() { return targetXAddresInfo; } }