/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.ode.bpel.iapi; import javax.wsdl.Operation; import javax.wsdl.PortType; import javax.xml.namespace.QName; import java.util.Set; /** * A representation of a communication (message-exchange) between the BPEL * BPEL engine and an external "partner". * * @author mszefler */ public interface MessageExchange { /** * Enumeration of message exchange patterns. */ public enum MessageExchangePattern { REQUEST_ONLY, REQUEST_RESPONSE, UNKNOWN } /** * Enumeration of the possible states for the message exchange. */ public enum Status { /** New message exchange, has not been "invoked" */ NEW, /** The request is being sent to the "server" */ REQUEST, /** Waiting for an asynchronous response from the "server" */ ASYNC, /** The one way request has been sent to the server. */ // ONE_WAY, - supported as ASYNC + getMessageExchangePatter() - See JIRA ODE-54 /** Processing the response received from the "server". */ RESPONSE, /** Processing the fault received from the "server". */ FAULT, /** Processing a failure. */ FAILURE, /** Message exchange completed succesfully. */ COMPLETED_OK, /** Message exchange completed with a fault. */ COMPLETED_FAULT, /** Message exchange completed with a failure. */ COMPLETED_FAILURE, } /** * Enumeration of the types of failures. */ public enum FailureType { /** Requested endpoint is invalid. */ INVALID_ENDPOINT, /** Requested endpoint is unknown/unavailable. */ UNKNOWN_ENDPOINT, /** Requested operation is unknown/unimplemented. */ UNKNOWN_OPERATION, /** Network / IPC errror. */ COMMUNICATION_ERROR, /** Request message was of an invalid/unrecognized format. */ FORMAT_ERROR, /** An internal failure: no response was provided. */ NO_RESPONSE, /** Message exchange processing was aborted. */ ABORTED, /** Other failure. */ OTHER, NOMATCH } /** * Get the message exchange identifier. This identifier should be globally * unique as the BPEL engine may keep identifiers for extended periods of * time. * @return unique message exchange identifier */ String getMessageExchangeId() throws BpelEngineException; /** * Get the name of the operation (WSDL 1.1) / message exchange (WSDL 1.2?). * * @return name of the operation (WSDL 1.1) /message exchange (WSDL 1.2?). */ String getOperationName() throws BpelEngineException; /** * Get a reference to the end-point targeted by this message exchange. * @return end-point reference for this message exchange */ EndpointReference getEndpointReference() throws BpelEngineException; /** * Return the type of message-exchange that resulted form this invocation * (request only/request-respone). If a * {@link MessageExchangePattern#REQUEST_RESPONSE} message-exchange was * created, then the caller should expect a response in the future. * @return type of message exchange created by the invocation */ MessageExchangePattern getMessageExchangePattern(); /** * Create a message associated with this exchange. * @param msgType message type * @return a new {@link Message} */ Message createMessage(QName msgType); boolean isTransactionPropagated() throws BpelEngineException; /** * Get the message exchange status. * @return */ Status getStatus(); /** * Get the request message. * @return request message */ Message getRequest(); /** * Get the response message. * @return response message (or null if not avaiable) */ Message getResponse(); /** * Get the fault type. * @return fault type, or <code>null</code> if not available/applicable. */ QName getFault(); String getFaultExplanation(); /** * Get the fault resposne message. * @return fault response, or <code>null</code> if not available/applicable. */ Message getFaultResponse(); /** * Get the operation description for this message exchange. * It is possible that the description cannot be resolved, for example if * the EPR is unknown or if the operation does not exist. * TODO: How to get rid of the WSDL4j dependency? * @return WSDL operation description or <code>null</code> if not availble */ Operation getOperation(); /** * Get the port type description for this message exchange. * It is possible that the description cannot be resolved, for example if * the EPR is unknown or if the operation does not exist. * TODO: How to get rid of the WSDL4j dependency? * @return WSDL port type description or <code>null</code> if not available. */ PortType getPortType(); /** * Set a message exchange property. Message exchange properties are not * interpreted by the engine--they exist to enable the integration layer * to persist information about the exchange. * @param key property key * @param value property value */ void setProperty(String key, String value); /** * Get a message exchange property. * @param key property key * @return property value */ String getProperty(String key); /** * Get a set containing the names of the defined properties. * @return set of property names. */ public Set<String> getPropertyNames(); /** * Should be called by the external partner when it's done with the * message exchange. Ncessary for a better resource management and * proper mex cleanup. */ public void release(); public static final String PROPERTY_SEP_MYROLE_SESSIONID = "org.apache.ode.bpel.myRoleSessionId"; public static final String PROPERTY_SEP_PARTNERROLE_SESSIONID = "org.apache.ode.bpel.partnerRoleSessionId"; public static final String PROPERTY_SEP_PARTNERROLE_EPR = "org.apache.ode.bpel.partnerRoleEPR"; }