public SubscriptionResponse saveSubscription(String userAuthToken, Subscription modelSubscription) {
HttpServletRequest request = getThreadLocalRequest();
HttpSession session = request.getSession();
SubscriptionResponse response = new SubscriptionResponse();
logger.info("Sending saveSubscriptions request..");
try {
//before sending this we need to ready the listener node
UDDIClerkManager manager = WebHelper.getUDDIClerkManager(session.getServletContext());
UDDINode homeNode = WebHelper.getUDDIHomeNode(session.getServletContext());
UDDIClerk clerk = manager.getClientConfig().getUDDIClerks().get(modelSubscription.getFromClerkName());
UDDIClerk toClerk = manager.getClientConfig().getUDDIClerks().get(modelSubscription.getToClerkName());
if (toClerk==null) {
String publisher = (String) session.getAttribute("UserName");
Map<String, UDDIClerk> clerks = manager.getClientConfig().getUDDIClerks();
for (UDDIClerk uddiClerk : clerks.values()) {
if (publisher.equals(uddiClerk.getPublisher())
&& homeNode.getName().equals(uddiClerk.getUDDINode().getName())) {
toClerk = uddiClerk;
}
}
}
logger.info("Updating homeNode server using jUDDI specific API..");
Transport defaultTransport = WebHelper.getTransport(session.getServletContext());
JUDDIApiPortType juddiApiService = defaultTransport.getJUDDIApiService();
//making sure our node info is there and up to date.
SaveNode saveNode = new SaveNode();
saveNode.setAuthInfo(userAuthToken);
saveNode.getNode().add(clerk.getApiClerk().getNode());
juddiApiService.saveNode(saveNode);
//making sure our clerk info is there and up to date
SaveClerk saveClerk = new SaveClerk();
saveClerk.setAuthInfo(userAuthToken);
saveClerk.getClerk().add(clerk.getApiClerk());
juddiApiService.saveClerk(saveClerk);
//making sure our node info is there and up to date.
SaveNode saveToNode = new SaveNode();
saveToNode.setAuthInfo(userAuthToken);
saveToNode.getNode().add(toClerk.getApiClerk().getNode());
juddiApiService.saveNode(saveToNode);
//making sure our clerk info is there and up to date
SaveClerk saveToClerk = new SaveClerk();
saveToClerk.setAuthInfo(userAuthToken);
saveToClerk.getClerk().add(toClerk.getApiClerk());
juddiApiService.saveClerk(saveToClerk);
logger.debug("Updating default UDDI server completed.");
SaveClientSubscriptionInfo saveClientSubscriptionInfo = new SaveClientSubscriptionInfo();
saveClientSubscriptionInfo.setAuthInfo(userAuthToken);
ClientSubscriptionInfo clientSubscriptionInfo = new ClientSubscriptionInfo();
clientSubscriptionInfo.setSubscriptionKey(modelSubscription.getSubscriptionKey());
clientSubscriptionInfo.setFromClerk(clerk.getApiClerk());
clientSubscriptionInfo.setToClerk(toClerk.getApiClerk());
saveClientSubscriptionInfo.getClientSubscriptionInfo().add(clientSubscriptionInfo);
//save clientSubscription to the listening UDDI default server.
juddiApiService.saveClientSubscriptionInfo(saveClientSubscriptionInfo);
logger.debug("Saved ClientSubscriptionInfo to the default UDDI server");
//the listening server is ready; now add the subscription
Transport transport = WebHelper.getTransport(session.getServletContext(), clerk.getUDDINode());
UDDISubscriptionPortType subscriptionService = transport.getUDDISubscriptionService();
List<org.uddi.sub_v3.Subscription> subscriptionList = new ArrayList<org.uddi.sub_v3.Subscription>();
org.uddi.sub_v3.Subscription subscription = new org.uddi.sub_v3.Subscription();
if (!"".equals(modelSubscription.getBindingKey())) {
subscription.setBindingKey(modelSubscription.getBindingKey());
}
subscription.setBrief(modelSubscription.getBrief());
if (!"".equals(modelSubscription.getExpiresAfter())) {
XMLGregorianCalendar calendar = DatatypeFactory.newInstance().newXMLGregorianCalendar(modelSubscription.getExpiresAfter());
subscription.setExpiresAfter(calendar);
}
subscription.setMaxEntities(modelSubscription.getMaxEntities());
if (!"".equals(modelSubscription.getNotificationInterval())) {
Duration duration = DatatypeFactory.newInstance().newDuration(modelSubscription.getNotificationInterval());
subscription.setNotificationInterval(duration);
}
if (!"".equals(modelSubscription.getSubscriptionFilter())) {
SubscriptionFilter subscriptionFilter = (SubscriptionFilter)JAXBMarshaller.unmarshallFromString(modelSubscription.getSubscriptionFilter(), JAXBMarshaller.PACKAGE_SUBSCRIPTION);
subscription.setSubscriptionFilter(subscriptionFilter);
}
subscription.setSubscriptionKey(modelSubscription.getSubscriptionKey());
subscriptionList.add(subscription);
Holder<List<org.uddi.sub_v3.Subscription>> subscriptionHolder = new Holder<List<org.uddi.sub_v3.Subscription>>();
subscriptionHolder.value = subscriptionList;
String authToken = (String) session.getAttribute("token-" + clerk.getName());
subscriptionService.saveSubscription(authToken, subscriptionHolder);
subscription = subscriptionHolder.value.get(0);
String expiresAfter = null;
if (subscription.getExpiresAfter()!=null) expiresAfter = subscription.getExpiresAfter().toString();
String rawFilter = JAXBMarshaller.marshallToString(new ObjectFactory().createSubscriptionFilter(subscription.getSubscriptionFilter()), "org.uddi.sub_v3");
Subscription savedModelSubscription = new Subscription(
(subscription.getBindingKey()==null)?"":subscription.getBindingKey(),
subscription.isBrief(),
expiresAfter,
subscription.getMaxEntities(),
(subscription.getNotificationInterval()==null)?"":subscription.getNotificationInterval().toString(),
rawFilter,
subscription.getSubscriptionKey());
savedModelSubscription.setNode(modelSubscription.getNode());
response.setSubscription(savedModelSubscription);
response.setSuccess(true);
} catch (Exception e) {
logger.error("Could not save subscription. " + e.getMessage(), e);
response.setSuccess(false);
response.setMessage(e.getMessage());
response.setErrorCode("102");
} catch (Throwable t) {
logger.error("Could not save subscription. " + t.getMessage(), t);
response.setSuccess(false);
response.setMessage(t.getMessage());
response.setErrorCode("102");
}
return response;
}