/******************************************************************************* * 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; import org.ws4d.java.communication.protocol.soap.generator.MessageReceiver; import org.ws4d.java.communication.protocol.soap.generator.UnexpectedMessageException; import org.ws4d.java.dispatch.MessageInformer; import org.ws4d.java.message.FaultMessage; import org.ws4d.java.message.InvokeMessage; import org.ws4d.java.message.Message; import org.ws4d.java.message.discovery.ByeMessage; import org.ws4d.java.message.discovery.HelloMessage; import org.ws4d.java.message.discovery.ProbeMatchesMessage; import org.ws4d.java.message.discovery.ProbeMessage; import org.ws4d.java.message.discovery.ResolveMatchesMessage; import org.ws4d.java.message.discovery.ResolveMessage; import org.ws4d.java.message.eventing.GetStatusMessage; import org.ws4d.java.message.eventing.GetStatusResponseMessage; import org.ws4d.java.message.eventing.RenewMessage; import org.ws4d.java.message.eventing.RenewResponseMessage; import org.ws4d.java.message.eventing.SubscribeMessage; import org.ws4d.java.message.eventing.SubscribeResponseMessage; import org.ws4d.java.message.eventing.SubscriptionEndMessage; import org.ws4d.java.message.eventing.UnsubscribeMessage; import org.ws4d.java.message.eventing.UnsubscribeResponseMessage; import org.ws4d.java.message.metadata.GetMessage; import org.ws4d.java.message.metadata.GetMetadataMessage; import org.ws4d.java.message.metadata.GetMetadataResponseMessage; import org.ws4d.java.message.metadata.GetResponseMessage; import org.ws4d.java.service.OperationDescription; import org.ws4d.java.util.Log; /** * */ final class SOAPResponseReceiver implements MessageReceiver { private static final MessageInformer MESSAGE_INFORMER = MessageInformer.getInstance(); private final Message request; private final ResponseCallback callback; /** * @param request * @param callback */ SOAPResponseReceiver(Message request, ResponseCallback callback) { super(); this.request = request; this.callback = callback; } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.discovery.HelloMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(HelloMessage hello, ProtocolData protocolData) { receiveUnexpectedMessage(hello, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.discovery.ByeMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(ByeMessage bye, ProtocolData protocolData) { receiveUnexpectedMessage(bye, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.discovery.ProbeMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(ProbeMessage probe, ProtocolData protocolData) { receiveUnexpectedMessage(probe, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.discovery.ProbeMatchesMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(ProbeMatchesMessage probeMatches, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(probeMatches); callback.handle(request, probeMatches, protocolData); MESSAGE_INFORMER.forwardMessage(probeMatches, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.discovery.ResolveMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(ResolveMessage resolve, ProtocolData protocolData) { receiveUnexpectedMessage(resolve, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.discovery.ResolveMatchesMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(ResolveMatchesMessage resolveMatches, ProtocolData protocolData) { receiveUnexpectedMessage(resolveMatches, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.metadata.GetMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(GetMessage get, ProtocolData protocolData) { receiveUnexpectedMessage(get, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.metadata.GetResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(GetResponseMessage getResponse, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(getResponse); callback.handle(request, getResponse, protocolData); MESSAGE_INFORMER.forwardMessage(getResponse, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.metadata.GetMetadataMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(GetMetadataMessage getMetadata, ProtocolData protocolData) { receiveUnexpectedMessage(getMetadata, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.metadata. GetMetadataResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(GetMetadataResponseMessage getMetadataResponse, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(getMetadataResponse); callback.handle(request, getMetadataResponse, protocolData); MESSAGE_INFORMER.forwardMessage(getMetadataResponse, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.SubscribeMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(SubscribeMessage subscribe, ProtocolData protocolData) { receiveUnexpectedMessage(subscribe, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.SubscribeResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(SubscribeResponseMessage subscribeResponse, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(subscribeResponse); callback.handle(request, subscribeResponse, protocolData); MESSAGE_INFORMER.forwardMessage(subscribeResponse, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.GetStatusMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(GetStatusMessage getStatus, ProtocolData protocolData) { receiveUnexpectedMessage(getStatus, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.GetStatusResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(GetStatusResponseMessage getStatusResponse, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(getStatusResponse); callback.handle(request, getStatusResponse, protocolData); MESSAGE_INFORMER.forwardMessage(getStatusResponse, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.RenewMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(RenewMessage renew, ProtocolData protocolData) { receiveUnexpectedMessage(renew, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.RenewResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(RenewResponseMessage renewResponse, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(renewResponse); callback.handle(request, renewResponse, protocolData); MESSAGE_INFORMER.forwardMessage(renewResponse, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.UnsubscribeMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(UnsubscribeMessage unsubscribe, ProtocolData protocolData) { receiveUnexpectedMessage(unsubscribe, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.UnsubscribeResponseMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(UnsubscribeResponseMessage unsubscribeResponse, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(unsubscribeResponse); callback.handle(request, unsubscribeResponse, protocolData); MESSAGE_INFORMER.forwardMessage(unsubscribeResponse, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.eventing.SubscriptionEndMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(SubscriptionEndMessage subscriptionEnd, ProtocolData protocolData) { receiveUnexpectedMessage(subscriptionEnd, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.invocation.InvokeMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(InvokeMessage invoke, ProtocolData protocolData) { IncomingMIMEReceiver.storeMIMEContext(invoke.getContent(), protocolData); IncomingSOAPReceiver.markIncoming(invoke); callback.handle(request, invoke, protocolData); MESSAGE_INFORMER.forwardMessage(invoke, protocolData); } /* * (non-Javadoc) * @see * org.ws4d.java.communication.protocol.soap.generator.MessageReceiver#receive * (org.ws4d.java.message.FaultMessage, * org.ws4d.java.communication.ProtocolData) */ public void receive(FaultMessage fault, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(fault); callback.handle(request, fault, protocolData); MESSAGE_INFORMER.forwardMessage(fault, protocolData); } /* * (non-Javadoc) * @see org.ws4d.java.communication.protocol.soap.generator.MessageReceiver# * receiveFailed(java.lang.Exception, * org.ws4d.java.communication.ProtocolData) */ public void receiveFailed(Exception e, ProtocolData protocolData) { callback.handleMalformedResponseException(request, e, protocolData); } /* * (non-Javadoc) * @see org.ws4d.java.communication.protocol.soap.generator.MessageReceiver# * sendFailed(java.lang.Exception, org.ws4d.java.communication.ProtocolData) */ public void sendFailed(Exception e, ProtocolData protocolData) { callback.handleTransmissionException(request, e, protocolData); } private void receiveUnexpectedMessage(Message message, ProtocolData protocolData) { IncomingSOAPReceiver.markIncoming(message); String actionName = message.getAction().toString(); Log.error("<I> Unexpected SOAP response message: " + actionName); if (Log.isDebug()) { Log.error(message.toString()); } callback.handleMalformedResponseException(request, new UnexpectedMessageException(actionName), protocolData); MESSAGE_INFORMER.forwardMessage(message, protocolData); } /* * (non-Javadoc) * @see org.ws4d.java.communication.protocol.soap.generator.MessageReceiver# * getOperation(java.lang.String) */ public OperationDescription getOperation(String action) { return callback.getOperation(); } }