/*
* Copyright(c) 2005 Center for E-Commerce Infrastructure Development, The
* University of Hong Kong (HKU). All Rights Reserved.
*
* This software is licensed under the GNU GENERAL PUBLIC LICENSE Version 2.0 [1]
*
* [1] http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
*/
package hk.hku.cecid.ebms.spa.service;
import hk.hku.cecid.ebms.pkg.EbxmlMessage;
import hk.hku.cecid.ebms.spa.EbmsProcessor;
import hk.hku.cecid.ebms.spa.dao.MessageDAO;
import hk.hku.cecid.ebms.spa.dao.MessageDVO;
import hk.hku.cecid.ebms.spa.dao.MessageServerDAO;
import hk.hku.cecid.ebms.spa.handler.EbxmlMessageDAOConvertor;
import hk.hku.cecid.ebms.spa.handler.MessageClassifier;
import hk.hku.cecid.piazza.commons.dao.DAOException;
import hk.hku.cecid.piazza.commons.soap.SOAPFaultException;
import hk.hku.cecid.piazza.commons.soap.SOAPRequestException;
import hk.hku.cecid.piazza.commons.soap.SOAPResponse;
import hk.hku.cecid.piazza.commons.soap.WebServicesAdaptor;
import hk.hku.cecid.piazza.commons.soap.WebServicesRequest;
import hk.hku.cecid.piazza.commons.soap.WebServicesResponse;
import java.util.Iterator;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPMessage;
import org.w3c.dom.Element;
/**
* AS2MessageReceiverListService
*
* @author Donahue Sze
*
*/
public class EbmsMessageReceiverService extends WebServicesAdaptor {
public void serviceRequested(WebServicesRequest request,
WebServicesResponse response) throws SOAPRequestException,
DAOException {
Element[] bodies = request.getBodies();
String messageId = getText(bodies, "messageId");
if (messageId == null) {
throw new SOAPFaultException(SOAPFaultException.SOAP_FAULT_CLIENT,
"Missing request information");
}
EbmsProcessor.core.log
.info("Message Receiver received download request - Message ID: "
+ messageId);
SOAPResponse soapResponse = (SOAPResponse) response.getTarget();
SOAPMessage soapResponseMessage = soapResponse.getMessage();
try {
MessageDAO messageDao = (MessageDAO) EbmsProcessor.core.dao
.createDAO(MessageDAO.class);
MessageDVO messageDvo = (MessageDVO) messageDao.createDVO();
messageDvo.setMessageId(messageId);
messageDvo.setMessageBox(MessageClassifier.MESSAGE_BOX_INBOX);
if (messageDao.findMessage(messageDvo)) {
if (messageDvo.getStatus().equals(
MessageClassifier.INTERNAL_STATUS_PROCESSED)) {
EbxmlMessage ebxmlMessage = EbxmlMessageDAOConvertor
.getEbxmlMessage(messageDvo.getMessageId(),
MessageClassifier.MESSAGE_BOX_INBOX);
// add to reply attachment
Iterator i = ebxmlMessage.getSOAPMessage().getAttachments();
while (i.hasNext()) {
AttachmentPart attachmentPart = (AttachmentPart) i
.next();
soapResponseMessage.addAttachmentPart(attachmentPart);
}
MessageServerDAO messageServerDao = (MessageServerDAO) EbmsProcessor.core.dao
.createDAO(MessageServerDAO.class);
messageDvo.setStatus(MessageClassifier.INTERNAL_STATUS_DELIVERED);
messageDvo.setStatusDescription("Message is delivered");
messageServerDao.clearMessage(messageDvo);
}
}
} catch (Exception e) {
EbmsProcessor.core.log
.error(
"Error in processing request of message in receiver service",
e);
throw new SOAPRequestException(
"Error in processing request of message in receiver service",
e);
}
generateReply(response, soapResponseMessage.countAttachments() > 0);
}
private void generateReply(WebServicesResponse response, boolean isReturned)
throws SOAPRequestException {
try {
SOAPElement responseElement = createText("hasMessage", Boolean
.toString(isReturned),
"http://service.ebms.edi.cecid.hku.hk/");
response.setBodies(new SOAPElement[] { responseElement });
} catch (Exception e) {
throw new SOAPRequestException("Unable to generate reply message",
e);
}
}
protected boolean isCacheEnabled() {
return false;
}
}