use of org.w3._2007.rif.If in project nhin-d by DirectProject.
the class DirectDocuments method toProvideAndRegisterDocumentSetRequestType.
public ProvideAndRegisterDocumentSetRequestType toProvideAndRegisterDocumentSetRequestType() throws IOException {
ProvideAndRegisterDocumentSetRequestType request = new ProvideAndRegisterDocumentSetRequestType();
request.setSubmitObjectsRequest(this.getSubmitObjectsRequest());
for (DirectDocument2 document : documents) {
if (document.getData() != null) {
DataSource source = new ByteArrayDataSource(document.getData(), document.getMetadata().getMimeType());
DataHandler dhnew = new DataHandler(source);
Document pdoc = new Document();
pdoc.setValue(dhnew);
String id = document.getMetadata().getId();
pdoc.setId(id);
request.getDocument().add(pdoc);
}
}
return request;
}
use of org.w3._2007.rif.If in project nhin-d by DirectProject.
the class DocumentRepositoryProxy method initProxy.
private void initProxy() {
try {
URL url = DocumentRepositoryProxy.class.getClassLoader().getResource("XDS.b_DocumentRepositoryWSDLSynchMTOM.wsdl");
QName qname = new QName("urn:ihe:iti:xds-b:2007", "DocumentRepository_Service");
DocumentRepositoryService service = new DocumentRepositoryService(url, qname);
if (handlerResolver != null)
service.setHandlerResolver(handlerResolver);
proxy = service.getDocumentRepositoryPortSoap12(new MTOMFeature(true, 1));
BindingProvider bp = (BindingProvider) proxy;
SOAPBinding binding = (SOAPBinding) bp.getBinding();
binding.setMTOMEnabled(true);
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint);
} catch (Exception e) {
LOGGER.error("Error initializing proxy.", e);
}
}
use of org.w3._2007.rif.If in project nhin-d by DirectProject.
the class DefaultXdmXdsTransformer method transform.
/*
* (non-Javadoc)
*
* @see org.nhindirect.transform.XdmXdsTransformer#transform(java.io.File)
*/
@Override
public ProvideAndRegisterDocumentSetRequestType transform(File file) throws TransformationException {
LOGGER.trace("Begin transformation of XDM to XDS (file)");
String docId = null;
ZipFile zipFile = null;
String docName = getDocName(file);
if (docName != null) {
XDM_FILENAME_DATA = docName;
}
ProvideAndRegisterDocumentSetRequestType prsr = new ProvideAndRegisterDocumentSetRequestType();
try {
zipFile = new ZipFile(file, ZipFile.OPEN_READ);
Enumeration<? extends ZipEntry> zipEntries = zipFile.entries();
ZipEntry zipEntry = null;
// load the ZIP archive into memory
while (zipEntries.hasMoreElements()) {
zipEntry = zipEntries.nextElement();
String zname = zipEntry.getName();
LOGGER.trace("Processing a ZipEntry " + zname);
if (!zipEntry.isDirectory()) {
String subsetDirspec = getSubmissionSetDirspec(zipEntry.getName());
// Read metadata
if (matchName(zname, subsetDirspec, XDM_FILENAME_METADATA)) {
ByteArrayOutputStream byteArrayOutputStream = readData(zipFile, zipEntry);
SubmitObjectsRequest submitObjectRequest = (SubmitObjectsRequest) XmlUtils.unmarshal(byteArrayOutputStream.toString(), oasis.names.tc.ebxml_regrep.xsd.lcm._3.ObjectFactory.class);
prsr.setSubmitObjectsRequest(submitObjectRequest);
docId = getDocId(submitObjectRequest);
} else // Read data
if (matchName(zname, subsetDirspec, XDM_FILENAME_DATA)) {
ByteArrayOutputStream byteArrayOutputStream = readData(zipFile, zipEntry);
DataSource source = new ByteArrayDataSource(byteArrayOutputStream.toByteArray(), MimeType.APPLICATION_XML + "; charset=UTF-8");
DataHandler dhnew = new DataHandler(source);
Document pdoc = new Document();
pdoc.setValue(dhnew);
pdoc.setId(docId);
List<Document> docs = prsr.getDocument();
docs.add(pdoc);
}
}
if (!prsr.getDocument().isEmpty()) {
((Document) prsr.getDocument().get(0)).setId(zname);
}
}
zipFile.close();
} catch (Exception e) {
if (LOGGER.isErrorEnabled()) {
LOGGER.error("Unable to complete transformation.", e);
}
throw new TransformationException("Unable to complete transformation.", e);
}
return prsr;
}
use of org.w3._2007.rif.If in project nhin-d by DirectProject.
the class DefaultXdsDirectDocumentsTransformer method transform.
@Override
public DirectDocuments transform(ProvideAndRegisterDocumentSetRequestType provideAndRegisterDocumentSetRequestType) throws TransformationException {
DirectDocuments documents = new DirectDocuments();
try {
documents.setValues(provideAndRegisterDocumentSetRequestType.getSubmitObjectsRequest());
} catch (MetadataException e) {
throw new TransformationException("Unable to complete transformation due to metadata error", e);
}
for (ihe.iti.xds_b._2007.ProvideAndRegisterDocumentSetRequestType.Document document : provideAndRegisterDocumentSetRequestType.getDocument()) {
byte[] data = null;
try {
DataHandler dataHandler = document.getValue();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
dataHandler.writeTo(outputStream);
data = outputStream.toByteArray();
} catch (IOException e) {
throw new TransformationException("Unable to complete transformation due to document IO error", e);
}
DirectDocument2 doc = documents.getDocumentByUniqueId(document.getId());
if (doc != null) {
doc.setData(data);
} else {
documents.getDocumentById(document.getId()).setData(data);
}
}
return documents;
}
use of org.w3._2007.rif.If in project nhin-d by DirectProject.
the class DirectXdMailet method service.
/*
* (non-Javadoc)
*
* @see org.apache.mailet.base.GenericMailet#service(org.apache.mailet.Mail)
*/
@Override
public void service(Mail mail) throws MessagingException {
LOGGER.info("Servicing DirectXdMailet");
if (StringUtils.isBlank(endpointUrl)) {
LOGGER.error("DirectXdMailet endpoint URL cannot be empty or null.");
throw new MessagingException("DirectXdMailet endpoint URL cannot be empty or null.");
}
boolean successfulTransaction = false;
final MimeMessage msg = mail.getMessage();
final boolean isReliableAndTimely = TxUtil.isReliableAndTimelyRequested(msg);
final NHINDAddressCollection initialRecipients = getMailRecipients(mail);
final NHINDAddressCollection xdRecipients = new NHINDAddressCollection();
final NHINDAddress sender = getMailSender(mail);
Tx txToTrack = null;
// Get recipients and create a collection of Strings
final List<String> recipAddresses = new ArrayList<String>();
for (NHINDAddress addr : initialRecipients) {
recipAddresses.add(addr.getAddress());
}
// Service XD* addresses
if (getResolver().hasXdEndpoints(recipAddresses)) {
LOGGER.info("Recipients include XD endpoints");
try {
//List<Address> xdAddresses = new ArrayList<Address>();
for (String s : getResolver().getXdEndpoints(recipAddresses)) {
//xdAddresses.add((new MailAddress(s)).toInternetAddress());
xdRecipients.add(new NHINDAddress(s));
}
txToTrack = this.getTxToTrack(msg, sender, xdRecipients);
// Replace recipients with only XD* addresses
//msg.setRecipients(RecipientType.TO, xdAddresses.toArray(new Address[0]));
msg.setRecipients(RecipientType.TO, xdRecipients.toArray(new Address[0]));
// Transform MimeMessage into ProvideAndRegisterDocumentSetRequestType object
ProvideAndRegisterDocumentSetRequestType request = getMimeXDSTransformer().transform(msg);
for (String directTo : recipAddresses) {
String response = getDocumentRepository().forwardRequest(endpointUrl, request, directTo, sender.toString());
if (!isSuccessful(response)) {
LOGGER.error("DirectXdMailet failed to deliver XD message.");
LOGGER.error(response);
} else {
successfulTransaction = true;
if (isReliableAndTimely && txToTrack != null && txToTrack.getMsgType() == TxMessageType.IMF) {
// send MDN dispatch for messages the recipients that were successful
final Collection<NotificationMessage> notifications = notificationProducer.produce(new Message(msg), xdRecipients.toInternetAddressCollection());
if (notifications != null && notifications.size() > 0) {
LOGGER.debug("Sending MDN \"dispathed\" messages");
// create a message for each notification and put it on James "stack"
for (NotificationMessage message : notifications) {
try {
getMailetContext().sendMail(message);
} catch (Throwable t) {
// don't kill the process if this fails
LOGGER.error("Error sending MDN dispatched message.", t);
}
}
}
}
}
}
} catch (Throwable e) {
LOGGER.error("DirectXdMailet delivery failure", e);
}
}
// this basically sets the message back to it's original state with SMTP addresses only
if (getResolver().hasSmtpEndpoints(recipAddresses)) {
LOGGER.info("Recipients include SMTP endpoints");
mail.setRecipients(getSmtpRecips(recipAddresses));
} else {
LOGGER.info("Recipients do not include SMTP endpoints");
// No SMTP addresses, ghost it
mail.setState(Mail.GHOST);
}
if (!successfulTransaction) {
if (txToTrack != null && txToTrack.getMsgType() == TxMessageType.IMF) {
// for good measure, send DSN messages back to the original sender on failure
// create a DSN message
this.sendDSN(txToTrack, xdRecipients, false);
}
}
}
Aggregations