static public void callSender(Message message, XBUSSystem destination)
throws XException
{
try
{
Sender sender = SenderFactory.createSender(destination);
String senderType = Configuration.getInstance().getValueOptional(
"System", destination.getName(), "Type");
if (senderType == null)
{
senderType = sender.getType();
}
if (Constants.TYPE_TEXT.equals(senderType))
{
boolean sendMessage = true;
String request = ((TextMessage) message)
.getRequestText(destination);
if (isEmpty(request))
{
String onEmpty = retrieveOnEmpty(destination.getName(),
true);
if (onEmpty.equals(Constants.READ_IGNORE))
{
sendMessage = false;
}
else if (onEmpty.equals(Constants.READ_PROCESS))
{
sendMessage = true;
}
else if (onEmpty.equals(Constants.READ_ERROR))
{
throw new XException(Constants.LOCATION_EXTERN,
Constants.LAYER_APPLICATION,
Constants.PACKAGE_APPLICATION_ADAPTER, "4");
}
}
if (sendMessage)
{
// Send the message to the destination system
// The message is already transformed and must only be
// retrieved.
// Structure information for message serialisation is due to
// the
// destination system.
TextSender textsender = (TextSender) sender;
String resData = textsender.execute(message.getFunction(),
request);
((TextMessage) message).setResponseText(resData,
destination);
message.setResponseTimestamp(new Date());
}
}
else if (Constants.TYPE_OBJECT.equals(senderType))
{
boolean sendMessage = true;
Object request = ((ObjectMessage) message)
.getRequestObject(destination);
if (isEmpty(request))
{
String onEmpty = retrieveOnEmpty(destination.getName(),
true);
if (onEmpty.equals(Constants.READ_IGNORE))
{
sendMessage = false;
}
else if (onEmpty.equals(Constants.READ_PROCESS))
{
sendMessage = true;
}
else if (onEmpty.equals(Constants.READ_ERROR))
{
throw new XException(Constants.LOCATION_EXTERN,
Constants.LAYER_APPLICATION,
Constants.PACKAGE_APPLICATION_ADAPTER, "4");
}
}
if (sendMessage)
{
// Send the message to the destination system
// The message is already transformed and must only be
// retrieved.
// Structure information for message serialisation is due to
// the
// destination system.
ObjectSender objectsender = (ObjectSender) sender;
Object resData = objectsender.execute(
message.getFunction(), ((ObjectMessage) message)
.getRequestObject(destination));
((ObjectMessage) message).setResponseObject(resData,
destination);
message.setResponseTimestamp(new Date());
}
}
else if (Constants.TYPE_XML.equals(senderType))
{
boolean sendMessage = true;
Object request = ((ObjectMessage) message)
.getRequestObject(destination);
if (isEmpty(request))
{
String onEmpty = retrieveOnEmpty(destination.getName(),
true);
if (onEmpty.equals(Constants.READ_IGNORE))
{
sendMessage = false;
}
else if (onEmpty.equals(Constants.READ_PROCESS))
{
sendMessage = true;
}
else if (onEmpty.equals(Constants.READ_ERROR))
{
throw new XException(Constants.LOCATION_EXTERN,
Constants.LAYER_APPLICATION,
Constants.PACKAGE_APPLICATION_ADAPTER, "4");
}
}
if (sendMessage)
{
// Send the message to the destination system
// The message is already transformed and must only be
// retrieved.
ObjectSender objectsender = (ObjectSender) sender;
Document resData = (Document) objectsender.execute(message
.getFunction(), ((XMLMessage) message)
.getRequestDocument(destination));
((XMLMessage) message).setResponseDocument(resData,
destination);
message.setResponseTimestamp(new Date());
}
}
else
{
List params = new Vector();
params.add(sender.getType());
throw new XException(Constants.LOCATION_INTERN,
Constants.LAYER_APPLICATION,
Constants.PACKAGE_APPLICATION_ADAPTER, "1", params);
}
}