blob: d7ec2ec122e6f37cb8f4691f77aadbf34bab88bd [file] [log] [blame]
/*
* Copyright 2001-2013 The Apache Software Foundation.
*
* Licensed 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.juddi.webconsole.hub;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.Serializable;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.URL;
import java.net.URLEncoder;
import java.rmi.RemoteException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.bind.JAXB;
import javax.xml.bind.JAXBElement;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Holder;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.juddi.api_v3.Node;
import org.apache.juddi.v3.client.ClassUtil;
import org.apache.juddi.v3.client.UDDIConstants;
import org.apache.juddi.v3.client.config.ClientConfig;
import org.apache.juddi.v3.client.config.UDDIClient;
import org.apache.juddi.v3.client.config.UDDINode;
import org.apache.juddi.v3.client.cryptor.XmlUtils;
import org.apache.juddi.v3.client.transport.Transport;
import org.apache.juddi.webconsole.AES;
import org.apache.juddi.webconsole.PostBackConstants;
import org.apache.juddi.webconsole.hub.builders.Builders;
import org.apache.juddi.webconsole.hub.builders.Printers;
import org.apache.juddi.webconsole.resources.ResourceLoader;
import org.uddi.api_v3.*;
import org.uddi.custody_v3.DiscardTransferToken;
import org.uddi.custody_v3.GetTransferToken;
import org.uddi.custody_v3.TransferEntities;
import org.uddi.custody_v3.TransferToken;
import org.uddi.sub_v3.*;
import org.uddi.v3_service.DispositionReportFaultMessage;
import org.uddi.v3_service.UDDICustodyTransferPortType;
import org.uddi.v3_service.UDDIInquiryPortType;
import org.uddi.v3_service.UDDIPublicationPortType;
import org.uddi.v3_service.UDDISecurityPortType;
import org.uddi.v3_service.UDDISubscriptionPortType;
import org.w3._2000._09.xmldsig_.SignatureType;
import org.w3._2000._09.xmldsig_.X509DataType;
/**
* UddiHub - The hub acts as a single point for managing browser to uddi
* services. At most 1 instance is allowed per http session. In general, all
* methods in the class trigger web service call outs. All callouts also support
* expired UDDI tokens and will attempt to reauthenticate and retry the request.
*
* @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a>
*/
public class UddiHub implements Serializable {
/**
* The logger name
*/
public static final String LOGGER_NAME = "org.apache.juddi";
private static final long serialVersionUID = 1L;
AuthStyle style = null;
private String nodename = null;
private static final String DEFAULT_NODE_NAME = "default";
private final String clientName = "juddigui";
private boolean WS_Transport = false;
private boolean WS_securePorts = false;
private transient HttpSession session;
private transient Transport transport = null;
private transient ClientConfig clientConfig;
private transient Properties properties;
private transient UDDISubscriptionPortType subscription = null;
private transient UDDISecurityPortType security = null;
private transient UDDIInquiryPortType inquiry = null;
private transient UDDIPublicationPortType publish = null;
private transient UDDICustodyTransferPortType custody = null;
//private JUDDIApiPortType juddi = null;
private transient String token = null;
/**
* The Log4j logger. This is also referenced from the Builders class,
* thus it is public
*/
public transient static final Log log = LogFactory.getLog(LOGGER_NAME);
private transient DatatypeFactory df;
/**
* the name of the 'node' property in the config
*/
public static final String PROP_CONFIG_NODE = "config.props.node";
/**
* "config.props.authtype"
*/
public static final String PROP_AUTH_TYPE = "config.props.authtype";
/**
* "config.props.automaticLogouts.enable"
*/
public static final String PROP_AUTO_LOGOUT = "config.props.automaticLogouts.enable";
/**
* "config.props.automaticLogouts.duration"
*/
public static final String PROP_AUTO_LOGOUT_TIMER = "config.props.automaticLogouts.duration";
/**
* "config.props."
*/
public static final String PROP_PREFIX = "config.props.";
/**
* "config.props.configLocalHostOnly"
*
*/
public static final String PROP_ADMIN_LOCALHOST_ONLY = "config.props.configLocalHostOnly";
private UddiHub() throws DatatypeConfigurationException {
df = DatatypeFactory.newInstance();
}
/**
* removes the Hub from the current http session
*
* @param _session
*/
public static void reset(HttpSession _session) {
_session.removeAttribute("hub");
// token = null;
}
public String verifyLogin() {
EnsureConfig();
token = null;
if (style != AuthStyle.UDDI_AUTH) {
if (WS_Transport) {
BindingProvider bp = null;
Map<String, Object> context = null;
bp = (BindingProvider) inquiry;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.PASSWORD_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));
bp = (BindingProvider) publish;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.PASSWORD_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));
bp = (BindingProvider) custody;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.PASSWORD_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));
bp = (BindingProvider) subscription;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.PASSWORD_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));
}
FindBusiness fb = new FindBusiness();
fb.setListHead(0);
fb.setMaxRows(1);
fb.setFindQualifiers(new FindQualifiers());
fb.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);
fb.getName().add(new Name(UDDIConstants.WILDCARD, null));
try {
inquiry.findBusiness(fb);
} catch (Exception ex) {
return HandleException(ex);
}
/*
bp = (BindingProvider) juddi;
context = bp.getRequestContext();
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));*/
return null;
} else {
if (WS_Transport) {
BindingProvider bp = null;
Map<String, Object> context = null;
bp = (BindingProvider) inquiry;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
bp = (BindingProvider) publish;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
bp = (BindingProvider) custody;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
bp = (BindingProvider) subscription;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
}
GetAuthToken req = new GetAuthToken();
try {
if (security == null) {
security = transport.getUDDISecurityService();
}
} catch (Exception ex) {
return HandleException(ex);
}
if (session.getAttribute("username") != null
&& session.getAttribute("password") != null) {
req.setUserID((String) session.getAttribute("username"));
req.setCred(AES.Decrypt((String) session.getAttribute("password"), (String) properties.get("key")));
log.info("AUDIT: fetching auth token for " + req.getUserID() + " Auth Mode is " + ((security == null) ? "HTTP" : "AUTH_TOKEN"));
try {
AuthToken authToken = security.getAuthToken(req);
token = authToken.getAuthInfo();
return null;
} catch (Exception ex) {
return HandleException(ex);
}
}
}
return "Unexpected error";
}
/**
* This kills any authentication tokens, logs the user out and nulls out
* all services
*/
public void die() {
DiscardAuthToken da = new DiscardAuthToken();
da.setAuthInfo(token);
try {
if (token != null && security != null) {
security.discardAuthToken(da);
}
} catch (Exception ex) {
HandleException(ex);
}
token = null;
inquiry = null;
publish = null;
custody = null;
security = null;
//juddi = null;
subscription = null;
if (session != null) {
session.removeAttribute("username");
session.removeAttribute("password");
}
}
/**
* This is the singleton accessor UddiHub. There should be at most 1
* instance per HTTP Session (user login)
*
* @param application
* @param _session
* @return instance
* @throws Exception
*/
public static UddiHub getInstance(ServletContext application, HttpSession _session) throws Exception {
Object j = _session.getAttribute("hub");
if (j == null) {
UddiHub hub = new UddiHub(application, _session);
_session.setAttribute("hub", hub);
hub.locale = (String) _session.getAttribute("locale");
return hub;
}
UddiHub hub = (UddiHub) j;
hub.locale = (String) _session.getAttribute("locale");
return hub;
}
String locale = "en";
/**
* gets the user selected locale
*
* @return something like "en" or "es"
*/
public String getLocale() {
if (session != null) {
if (session.getAttribute("locale") != null) {
locale = (String) session.getAttribute("locale");
}
}
if (locale == null) {
locale = "en";
}
return locale;
}
private void EnsureConfig() {
if (clientConfig == null) {
String clazz = null;
try {
UDDIClient client = new UDDIClient();
clientConfig = client.getClientConfig();
try {
style = AuthStyle.valueOf(clientConfig.getConfiguration().getString(PROP_AUTH_TYPE));
} catch (Exception ex) {
log.warn("'UDDI_AUTH' is not defined in the config (" + PROP_AUTH_TYPE + ")! defaulting to UDDI_AUTH");
style = AuthStyle.UDDI_AUTH;
}
// String newNodename = clientConfig.getConfiguration().getString(PROP_CONFIG_NODE);
// if (newNodename != null && !newNodename.equals("")) {
// nodename = newNodename;
// }
if (nodename == null) {
nodename = clientConfig.getConfiguration().getString(PROP_CONFIG_NODE);
}
if (nodename == null || nodename.equals("")) {
log.warn("'node' is not defined in the config! defaulting to '" + DEFAULT_NODE_NAME + "'");
nodename = DEFAULT_NODE_NAME;
}
UDDINode uddiNode = clientConfig.getUDDINode(nodename);
clazz = uddiNode.getProxyTransport();
if (clazz.contains("JAXWS")) {
WS_Transport = true;
}
transport = client.getTransport(nodename);
security = transport.getUDDISecurityService();
inquiry = transport.getUDDIInquiryService();
subscription = transport.getUDDISubscriptionService();
publish = transport.getUDDIPublishService();
custody = transport.getUDDICustodyTransferService();
if (WS_Transport) {
if (uddiNode.getPublishUrl().toLowerCase().startsWith("https://")
&& (uddiNode.getSecurityUrl() != null && uddiNode.getSecurityUrl().toLowerCase().startsWith("https://"))
&& uddiNode.getInquiryUrl().toLowerCase().startsWith("https://")
&& (uddiNode.getCustodyTransferUrl() != null && uddiNode.getCustodyTransferUrl().toLowerCase().startsWith("https://"))
&& (uddiNode.getSubscriptionUrl() != null && uddiNode.getSubscriptionUrl().toLowerCase().startsWith("https://"))) {
WS_securePorts = true;
} else {
WS_securePorts = false;
}
}
} catch (Exception ex) {
HandleException(ex);
log.info("DEBUG info node=" + nodename + " transport=" + clazz);
}
}
}
private UddiHub(ServletContext application, HttpSession _session) throws Exception {
session = _session;
URL prop = application.getResource("/META-INF/config.properties");
if (prop == null) {
prop = application.getResource("META-INF/config.properties");
}
if (prop == null) {
throw new Exception("Cannot locate the configuration file.");
}
InputStream in = prop.openStream();
Properties p = new Properties();
p.load(in);
in.close();
properties = p;
EnsureConfig();
}
/**
* returns true if we are using JAXWS transport AND all of the URLs
* start with https://
*
* @return true if all coms are SSL based
*/
public boolean isSecure() {
EnsureConfig();
return WS_securePorts;
}
/**
* gets a reference to the current juddi client config file. this is a
* live instance changes can be stored to disk
*
* @return client config
* @throws ConfigurationException g
*/
public ClientConfig GetJuddiClientConfig() throws ConfigurationException {
EnsureConfig();
return clientConfig;
}
/**
* gets the configuration file's node name element of the currently
* connected node
*
* @return
*/
public String getNodeName() {
EnsureConfig();
return nodename;
}
private boolean NodeExists(String newnode) {
try {
List<Node> uddiNodeList = GetJuddiClientConfig().getUDDINodeList();
for (int i = 0; i < uddiNodeList.size(); i++) {
if (uddiNodeList.get(i).getName().equals(newnode)) {
return true;
}
}
} catch (Exception ex) {
log.error(ex);
return false;
}
return false;
}
/**
* attempts to switch the current context to the proposed node id. if
* the node does not exist in the config file, null is returned and no
* changes are made. if the node does exist in the config file, the
* current login token is discard, all web service client objects are
* destroyed, user credentials are removed from the session. The client
* objects are then recreated from the config using the new node name
* and transport
*
* @param newnode
* @return the new node name if successful, or null on failure
*/
public String switchNodes(String newnode) {
EnsureConfig();
if (this.nodename.equalsIgnoreCase(newnode)) {
return newnode;
}
if (NodeExists(newnode)) {
this.die();
clientConfig = null;
this.nodename = newnode;
} else {
return null;
}
EnsureConfig();
return this.nodename;
}
/**
* returns all of the current properties defining digital signatures
*
* @return digsig properties
*/
public Properties GetDigitalSignatureConfig() {
try {
return GetJuddiClientConfig().getDigitalSignatureConfiguration();
} catch (Exception ex) {
log.error("error fetching uddi.xml", ex);
}
return new Properties();
}
private String GetToken() {
EnsureConfig();
if (style != AuthStyle.UDDI_AUTH) {
if (WS_Transport) {
BindingProvider bp = null;
Map<String, Object> context = null;
bp = (BindingProvider) inquiry;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.PASSWORD_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));
bp = (BindingProvider) publish;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.PASSWORD_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));
bp = (BindingProvider) custody;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.PASSWORD_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));
bp = (BindingProvider) subscription;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.PASSWORD_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));
}
/*
bp = (BindingProvider) juddi;
context = bp.getRequestContext();
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute("username"));
context.put(BindingProvider.USERNAME_PROPERTY, session.getAttribute(AES.Decrypt("password", (String) properties.get("key"))));*/
return null;
} else {
if (token != null) {
return token;
}
if (WS_Transport) {
BindingProvider bp = null;
Map<String, Object> context = null;
bp = (BindingProvider) inquiry;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
bp = (BindingProvider) publish;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
bp = (BindingProvider) custody;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
bp = (BindingProvider) subscription;
context = bp.getRequestContext();
context.remove(BindingProvider.USERNAME_PROPERTY);
context.remove(BindingProvider.PASSWORD_PROPERTY);
}
GetAuthToken req = new GetAuthToken();
try {
if (security == null) {
security = transport.getUDDISecurityService();
}
} catch (Exception ex) {
log.error(ex);
}
if (session != null && session.getAttribute("username") != null
&& session.getAttribute("password") != null) {
req.setUserID((String) session.getAttribute("username"));
req.setCred(AES.Decrypt((String) session.getAttribute("password"), (String) properties.get("key")));
log.info("AUDIT: fetching auth token for " + req.getUserID() + " Auth Mode is " + ((security == null) ? "HTTP" : "AUTH_TOKEN"));
try {
AuthToken authToken = security.getAuthToken(req);
token = authToken.getAuthInfo();
} catch (Exception ex) {
return HandleException(ex);
}
}
}
return token;
}
/**
* Returns true if the current user has a token and is signed in. Does
* not apply to non-UDDI security API logins
*
* @return true if authenticated
*/
public boolean getUddiIsAuthenticated() {
return (token != null && !token.isEmpty());
}
/**
* Performs a find_business call in the inquiry API
*
* @param offset
* @param maxrecords
* @param keyword
* @param lang
* @param isChooser
* @return PagableContainer of businesses
*/
public PagableContainer GetBusinessListAsHtml(int offset, int maxrecords, String keyword, String lang, boolean isChooser) {
PagableContainer ret = new PagableContainer();
ret.offset = offset;
ret.displaycount = 0;
ret.totalrecords = 0;
try {
FindBusiness fb = new FindBusiness();
fb.setMaxRows(maxrecords);
fb.setListHead(offset);
fb.setAuthInfo(GetToken());
org.uddi.api_v3.FindQualifiers fq = new org.uddi.api_v3.FindQualifiers();
fq.getFindQualifier().add(UDDIConstants.CASE_INSENSITIVE_MATCH);
fq.getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);
fq.getFindQualifier().add(UDDIConstants.SORT_BY_NAME_ASC);
fb.setFindQualifiers(fq);
Name searchname = new Name();
searchname.setLang(lang);
searchname.setValue(keyword);
fb.getName().add(searchname);
//transport
BusinessList findBusiness = null;
try {
findBusiness = inquiry.findBusiness(fb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fb.setAuthInfo(GetToken());
findBusiness = inquiry.findBusiness(fb);
} else {
throw ex;
}
}
if (findBusiness == null || findBusiness.getBusinessInfos() == null) {
ret.renderedHtml = (ResourceLoader.GetResource(session, "errors.nodatareturned"));
} else {
if (findBusiness.getListDescription() != null) {
ret.displaycount = findBusiness.getListDescription().getIncludeCount();
ret.offset = findBusiness.getListDescription().getListHead();
ret.totalrecords = findBusiness.getListDescription().getActualCount();
} else {
ret.displaycount = findBusiness.getBusinessInfos().getBusinessInfo().size();
ret.offset = offset;
ret.totalrecords = findBusiness.getBusinessInfos().getBusinessInfo().size();
}
ret.renderedHtml = Printers.BusinessListAsTable(findBusiness, session, isChooser);
}
} catch (Exception ex) {
ret.renderedHtml = (HandleException(ex));
}
return ret;
}
/**
* The get_registeredInfo API call is used to get an abbreviated list of
* all businessEntity and tModel data that are controlled by a
* publisher. When the registry distinguishes between publishers, this
* is the individual associated with the credentials passed in the
* authInfo element. This returned information is intended, for example,
* for driving tools that display lists of registered information and
* then provide drill-down features. This is the recommended API to use
* after a network problem results in an unknown status of saved
* information.
*
* @param businesses
* @param tModels
* @return returns all of "my" keys
*/
public String GetMyTransferableKeys(boolean businesses, boolean tModels) {
StringBuilder sb = new StringBuilder();
RegisteredInfo findBusiness = null;
try {
GetRegisteredInfo r = new GetRegisteredInfo();
r.setAuthInfo(GetToken());
if (r.getAuthInfo() == null) {
return ToErrorAlert(ResourceLoader.GetResource(session, "errors.notsignedin"));
}
r.setInfoSelection(InfoSelection.ALL);
try {
findBusiness = publish.getRegisteredInfo(r);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
r.setAuthInfo(GetToken());
findBusiness = publish.getRegisteredInfo(r);
} else {
throw ex;
}
}
} catch (Exception ex) {
return (HandleException(ex));
}
if (findBusiness == null || findBusiness.getBusinessInfos() == null) {
return (ResourceLoader.GetResource(session, "errors.nodatareturned"));
} else {
if (findBusiness.getBusinessInfos() != null && businesses) {
sb.append("<select id=\"businesslist\" multiple=\"multiple\" size=\"10\">");
for (int i = 0; i < findBusiness.getBusinessInfos().getBusinessInfo().size(); i++) {
sb.append("<option class=\"transferable\" id=\"").
append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
append("\" title=\"").
append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
append("\">").
append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getName()))).
append("</option>");
}
sb.append("</select>");
}
if (findBusiness.getTModelInfos() != null && tModels) {
sb.append("<select id=\"tmodellist\" multiple=\"multiple\" size=\"10\">");
for (int i = 0; i < findBusiness.getTModelInfos().getTModelInfo().size(); i++) {
sb.append("<option class=\"transferable\" id=\"").
append(StringEscapeUtils.escapeHtml(findBusiness.getTModelInfos().getTModelInfo().get(i).getTModelKey())).
append("\" title=\"").
append(StringEscapeUtils.escapeHtml(findBusiness.getTModelInfos().getTModelInfo().get(i).getTModelKey())).
append("\">").
append(StringEscapeUtils.escapeHtml((findBusiness.getTModelInfos().getTModelInfo().get(i).getName().getValue()))).
append("</option>");
}
sb.append("</select>");
}
return sb.toString();
}
}
/**
* Performs Inquiry Find_service API used from servicedetails.jsp
*
* @param serviceid
* @return string
*/
public String GetServiceDetailAsHtml(String serviceid) {
if (serviceid == null || serviceid.length() == 0) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
StringBuilder sb = new StringBuilder();
try {
GetServiceDetail gbd = new GetServiceDetail();
gbd.setAuthInfo(GetToken());
gbd.getServiceKey().add(serviceid);
ServiceDetail get = null;//inquiry.getServiceDetail(gbd);
try {
get = inquiry.getServiceDetail(gbd);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
gbd.setAuthInfo(GetToken());
get = inquiry.getServiceDetail(gbd);
} else {
throw ex;
}
}
if (get != null) {
for (int i = 0; i < get.getBusinessService().size(); i++) {
session.setAttribute(get.getBusinessService().get(i).getServiceKey(), get.getBusinessService().get(i));
sb.append("<b>").append(ResourceLoader.GetResource(session, "items.name")).append(":</b><div class=\"editable\" id=\"ServiceName\">").append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(get.getBusinessService().get(i).getName()))).append("</div><Br>");
sb.append("<b>").append(ResourceLoader.GetResource(session, "items.description")).append(":</b><div class=\"editable\" id=\"ServiceDescription\">").append(StringEscapeUtils.escapeHtml((Printers.ListToDescString(get.getBusinessService().get(i).getDescription())))).append("</div><Br>");
sb.append("<b>").append(ResourceLoader.GetResource(session, "items.key")).append(":</b><div class=\"editable\" id=\"ServiceKey\">").append(StringEscapeUtils.escapeHtml((get.getBusinessService().get(i).getServiceKey()))).append("</div><Br>");
sb.append("<b>").append(ResourceLoader.GetResource(session, "items.keyrefcat")).append(":</b> ").append(Printers.CatBagToString(get.getBusinessService().get(i).getCategoryBag(), getLocale())).append("<Br>");
if (!get.getBusinessService().get(i).getSignature().isEmpty()) {
sb.append(ResourceLoader.GetResource(session, "items.signed")).append("<Br>");
} else {
sb.append(ResourceLoader.GetResource(session, "items.signed.not")).append("<Br>");
}
sb.append(Printers.PrintBindingTemplates(get.getBusinessService().get(i).getBindingTemplates(), getLocale())).append("<Br>");
}
} else {
sb.append(ResourceLoader.GetResource(session, "errors.nodatareturned"));
}
} catch (Exception ex) {
sb.append(HandleException(ex));
}
return sb.toString();
}
/**
* return true if the word expire is in the exception or the UDDI error
* code representing an expired token
*
* @param ex
* @return true if it's an expired token
*/
public static boolean isExceptionExpiration(Exception ex) {
if (ex == null) {
return false;
}
if (ex instanceof DispositionReportFaultMessage) {
DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;
if (f.getFaultInfo().countainsErrorCode(DispositionReport.E_AUTH_TOKEN_EXPIRED)
|| ex.getMessage().contains(DispositionReport.E_AUTH_TOKEN_EXPIRED)
|| ex.getMessage().toLowerCase().contains("expire")) {
return true;
}
}
if (ex.getMessage() == null) {
return false;
}
if (ex.getMessage().toLowerCase().contains("expire")) {
return true;
}
if (ex.getMessage().toLowerCase().contains(DispositionReport.E_AUTH_TOKEN_EXPIRED.toLowerCase())) {
return true;
}
if (ex.getLocalizedMessage() == null) {
return false;
}
if (ex.getLocalizedMessage().toLowerCase().contains("expire")) {
return true;
}
return false;
}
/**
* returns an html formatted list of services for a specific business
* used on browse.jsp
*
* @param bizid
* @return string
*/
public String GetServiceList(String bizid) {
if (bizid == null || bizid.isEmpty()) {
return ResourceLoader.GetResource(session, "errors.nobusinessid");
}
StringBuilder sb = new StringBuilder();
try {
GetBusinessDetail gbd = new GetBusinessDetail();
gbd.setAuthInfo(GetToken());
gbd.getBusinessKey().add(bizid);
BusinessDetail businessDetail = null;
try {
businessDetail = inquiry.getBusinessDetail(gbd);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
gbd.setAuthInfo(GetToken());
businessDetail = inquiry.getBusinessDetail(gbd);
} else {
throw ex;
}
}
if (businessDetail != null) {
for (int i = 0; i < businessDetail.getBusinessEntity().size(); i++) {
if (businessDetail.getBusinessEntity().get(i).getBusinessServices() == null) {
sb.append(ResourceLoader.GetResource(session, "errors.noservicesdefined"));
} else {
for (int k = 0; k < businessDetail.getBusinessEntity().get(i).getBusinessServices().getBusinessService().size(); k++) {
sb.append("<div><a href=\"serviceEditor.jsp?id=").
append(StringEscapeUtils.escapeHtml(businessDetail.getBusinessEntity().get(i).getBusinessServices().getBusinessService().get(k).getServiceKey())).append("\">").
append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(businessDetail.getBusinessEntity().get(i).getBusinessServices().getBusinessService().get(k).getName()))).append("</a></div>");
}
}
}
} else {
sb.append(ResourceLoader.GetResource(session, "errors.nodatareturned"));
}
} catch (Exception ex) {
sb.append(ResourceLoader.GetResource(session, "errors.generic")).append(ex.getMessage());
}
return sb.toString();
}
/**
* Performs a getServiceDetails in Inquiry API
*
* @param serviceid
* @return null if no id was specified or if it didn't exist
*/
public BusinessService GetServiceDetail(String serviceid) {
if (serviceid == null || serviceid.length() == 0) {
return null;
}
if (serviceid.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
return null;
}
try {
GetServiceDetail gbd = new GetServiceDetail();
gbd.setAuthInfo(GetToken());
gbd.getServiceKey().add(serviceid);
ServiceDetail get = null;
try {
get = inquiry.getServiceDetail(gbd);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
gbd.setAuthInfo(GetToken());
get = inquiry.getServiceDetail(gbd);
} else {
throw ex;
}
}
if (get == null || get.getBusinessService().isEmpty()) {
return null;
}
return get.getBusinessService().get(0);
} catch (Exception ex) {
HandleException(ex);
}
return null;
}
/**
* this is used from the save from xml.jsp page
*
* @param be
* @return status message
*/
public String SaveBindingTemplate(BindingTemplate be) {
try {
SaveBinding sb = new SaveBinding();
sb.setAuthInfo(GetToken());
sb.getBindingTemplate().add(be);
BindingDetail saveBinding = null;
try {
saveBinding = publish.saveBinding(sb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
sb.setAuthInfo(GetToken());
saveBinding = publish.saveBinding(sb);
} else {
throw ex;
}
}
return ResourceLoader.GetResource(session, "actions.saved") + " "
+ "<a href=\"bindingEditor.jsp?id=" + URLEncoder.encode(saveBinding.getBindingTemplate().get(0).getBindingKey(), "UTF8")
+ "\">" + StringEscapeUtils.escapeHtml(saveBinding.getBindingTemplate().get(0).getBindingKey()) + "</a>";
} catch (Exception ex) {
return HandleException(ex);
}
}
/**
* This method will rebuild a Service entity from the HTTP request from
* the Service Editor page and will then attempt to save it.
*
* @param request
* @return a localized Saved or an error message
*/
public String SaveServiceDetails(HttpServletRequest request) {
BusinessService be = new BusinessService();
be.setBusinessKey(request.getParameter(PostBackConstants.BUSINESSKEY).trim());
be.setServiceKey(request.getParameter(PostBackConstants.SERVICEKEY).trim());
if (be.getServiceKey().equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
be.setServiceKey(null);
}
if (be.getBusinessKey() == null || be.getBusinessKey().length() == 0) {
return ResourceLoader.GetResource(session, "errors.noinput.businesskey");
}
be.getName().addAll(Builders.BuildNames(Builders.MapFilter(request.getParameterMap(), PostBackConstants.NAME), PostBackConstants.NAME, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
//JUDDI-806get existing service details and copy over binding templates
BusinessService GetServiceDetail = GetServiceDetail(request.getParameter(PostBackConstants.SERVICEKEY).trim());
if (GetServiceDetail != null) {
be.setBindingTemplates(GetServiceDetail.getBindingTemplates());
}
/*JUDDI-806
BindingTemplates bt = new BindingTemplates();
bt.getBindingTemplate().addAll(Builders.BuildBindingTemplates(Builders.MapFilter(request.getParameterMap(), PostBackConstants.BINDINGTEMPLATE), PostBackConstants.BINDINGTEMPLATE, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
if (!bt.getBindingTemplate().isEmpty()) {
be.setBindingTemplates(bt);
}*/
be.getDescription().addAll(Builders.BuildDescription(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DESCRIPTION), PostBackConstants.DESCRIPTION, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
CategoryBag cb = new CategoryBag();
cb.getKeyedReference().addAll(Builders.BuildKeyedReference(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF), PostBackConstants.CATBAG_KEY_REF, getLocale()));
cb.getKeyedReferenceGroup().addAll(Builders.BuildKeyedReferenceGroup(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF_GRP), PostBackConstants.CATBAG_KEY_REF_GRP, getLocale()));
if (!cb.getKeyedReference().isEmpty() || !cb.getKeyedReferenceGroup().isEmpty()) {
be.setCategoryBag(cb);
}
return SaveServiceDetails(be);
}
/**
* Saves a Service
*
* @param be
* @return a readable error message or, success
*/
public String SaveServiceDetails(BusinessService be) {
try {
SaveService sb = new SaveService();
sb.setAuthInfo(GetToken());
ServiceDetail saveService = null;
sb.getBusinessService().add(be);
try {
saveService = publish.saveService(sb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
sb.setAuthInfo(GetToken());
saveService = publish.saveService(sb);
} else {
throw ex;
}
}
return ResourceLoader.GetResource(session, "actions.saved") + " "
+ "<a href=\"serviceEditor.jsp?id=" + URLEncoder.encode(saveService.getBusinessService().get(0).getServiceKey(), "UTF8")
+ "\">" + StringEscapeUtils.escapeHtml(saveService.getBusinessService().get(0).getServiceKey()) + "</a>";
} catch (Exception ex) {
return HandleException(ex);
}
}
/**
* Saves a business entity
*
* @param be
* @return a readable error message
*/
public String SaveBusinessDetails(BusinessEntity be) {
try {
SaveBusiness sb = new SaveBusiness();
sb.setAuthInfo(GetToken());
sb.getBusinessEntity().add(be);
BusinessDetail saveBusiness = null;
try {
saveBusiness = publish.saveBusiness(sb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
sb.setAuthInfo(GetToken());
saveBusiness = publish.saveBusiness(sb);
} else {
throw ex;
}
}
return ResourceLoader.GetResource(session, "actions.saved") + " "
+ " <script type=\"text/javascript\">window.location.href='"+
StringEscapeUtils.escapeJavaScript("businessEditor2.jsp?id=" + URLEncoder.encode(saveBusiness.getBusinessEntity().get(0).getBusinessKey(), "UTF8")) + "';</script>"
+ "<a href=\"businessEditor2.jsp?id=" + URLEncoder.encode(saveBusiness.getBusinessEntity().get(0).getBusinessKey(), "UTF8")
+ "\">" + StringEscapeUtils.escapeHtml(saveBusiness.getBusinessEntity().get(0).getBusinessKey()) + "</a>";
} catch (Exception ex) {
return HandleException(ex);
}
}
/**
* Save Business
*
* This method saves a business to a UDDI registry, preserving the
* service listing The request is build from the HTTP post back
* parameters. A human readable response message is returned
*
* @param request
* @return string
*/
public String SaveBusinessDetails(HttpServletRequest request) {
BusinessEntity be = new BusinessEntity();
be.setBusinessKey(request.getParameter(PostBackConstants.BUSINESSKEY).trim());
if (be.getBusinessKey().equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
be.setBusinessKey(null);
} else {
BusinessEntity GetBusinessDetails = GetBusinessDetails(be.getBusinessKey());
if (GetBusinessDetails == null) //this is a new business
{
} else {
//copy over the existing child element, business
be.setBusinessServices(GetBusinessDetails.getBusinessServices());
}
}
be.getName().addAll(Builders.BuildNames(Builders.MapFilter(request.getParameterMap(), PostBackConstants.NAME), PostBackConstants.NAME, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
be.setContacts(Builders.BuildContacts(request.getParameterMap(), ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
be.getDescription().addAll(Builders.BuildDescription(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DESCRIPTION), PostBackConstants.DESCRIPTION, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
be.setDiscoveryURLs(Builders.BuildDisco(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DISCOVERYURL), PostBackConstants.DISCOVERYURL, getLocale()));
CategoryBag cb = new CategoryBag();
cb.getKeyedReference().addAll(Builders.BuildKeyedReference(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF), PostBackConstants.CATBAG_KEY_REF, getLocale()));
cb.getKeyedReferenceGroup().addAll(Builders.BuildKeyedReferenceGroup(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF_GRP), PostBackConstants.CATBAG_KEY_REF_GRP, getLocale()));
if (!cb.getKeyedReference().isEmpty() || !cb.getKeyedReferenceGroup().isEmpty()) {
be.setCategoryBag(cb);
}
be.setIdentifierBag(Builders.BuildIdentBag(Builders.MapFilter(request.getParameterMap(), PostBackConstants.IDENT_KEY_REF), PostBackConstants.IDENT_KEY_REF, getLocale()));
return SaveBusinessDetails(be);
}
/**
* Gets a business's details used for the businessEditor
*
* @param bizid
* @return null if no id is provided or if there is a remote error
*/
public BusinessEntity GetBusinessDetails(String bizid) {
if (bizid == null || bizid.isEmpty()) {
return null;
}
if (bizid.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
return null;
}
try {
GetBusinessDetail gbd = new GetBusinessDetail();
gbd.setAuthInfo(GetToken());
gbd.getBusinessKey().add(bizid);
BusinessDetail businessDetail = null;
try {
businessDetail = inquiry.getBusinessDetail(gbd);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
gbd.setAuthInfo(GetToken());
businessDetail = inquiry.getBusinessDetail(gbd);
} else {
throw ex;
}
}
if (businessDetail != null && businessDetail.getBusinessEntity().size() == 1) {
return businessDetail.getBusinessEntity().get(0);
}
} catch (Exception ex) {
HandleException(ex);
}
return null;
}
/**
* returns a bootstrap html stylizies an error message with a warning
* icon
*
* @param HandleException, any string representing an error message
* @return string
*/
public static String ToErrorAlert(String HandleException) {
return "<div class=\"alert alert-error\"><i class=\"icon-warning-sign icon-large\"></i>&nbsp;" + HandleException + "</div>";
}
private String deleteBinding(List<String> serviceId) {
if (serviceId == null || serviceId.isEmpty()) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
DeleteBinding db = new DeleteBinding();
db.setAuthInfo(GetToken());
db.getBindingKey().addAll(serviceId);
try {
try {
publish.deleteBinding(db);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
db.setAuthInfo(GetToken());
publish.deleteBinding(db);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return ResourceLoader.GetResource(session, "actions.delete.binding");
}
/**
* AuthStyles for the Hub to use, default is UDDI_AUTH
*/
public enum AuthStyle {
/**
* Http
*/
HTTP,
/**
* UDDI Authentication via the Security API
*/
UDDI_AUTH
}
/**
* Search for services using find_services
*
* @param keyword
* @param lang
* @param maxrecords
* @param offset
* @param isChooser
* @return PagableContainer of services
*/
public PagableContainer SearchForServices(String keyword, String lang, int maxrecords, int offset, boolean isChooser) {
PagableContainer ret = new PagableContainer();
ret.displaycount = 0;
ret.offset = offset;
ret.totalrecords = 0;
try {
FindService fs = new FindService();
fs.setAuthInfo(GetToken());
fs.setMaxRows(maxrecords);
fs.setListHead(offset);
Name n = new Name();
if (lang == null || lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
n.setLang(null);
} else {
n.setLang(lang);
}
n.setValue(keyword);
fs.getName().add(n);
fs.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());
fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);
fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.CASE_INSENSITIVE_MATCH);
fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.SORT_BY_NAME_ASC);
ServiceList findService = null;//inquiry.findService(fs);
try {
findService = inquiry.findService(fs);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fs.setAuthInfo(GetToken());
findService = inquiry.findService(fs);
} else {
throw ex;
}
}
if (findService == null || findService.getServiceInfos() == null) {
ret.renderedHtml = ResourceLoader.GetResource(session, "errors.norecordsfound");
return ret;
}
if (findService.getListDescription() != null) {
ret.displaycount = findService.getListDescription().getIncludeCount();
ret.totalrecords = findService.getListDescription().getActualCount();
} else {
ret.displaycount = findService.getServiceInfos().getServiceInfo().size();
ret.totalrecords = findService.getServiceInfos().getServiceInfo().size();
}
ret.renderedHtml = Printers.ServiceListAsHtml(findService, isChooser, session);
// ret.renderedHtml = sb.toString();
return ret;
} catch (Exception ex) {
ret.renderedHtml = HandleException(ex);
}
return ret;
}
/**
* Adds a special tModel key generator keyGenerator: Marking a tModel
* with this categorization designates it as one whose tModelKey
* identifies a key generator partition that can be used by its owner to
* derive and assign other entity keys. This categorization is reserved
* for key generator tModels. Any attempt to use this categorization for
* something other than a key generator tModel will fail with
* E_valueNotAllowed returned.
*
* @param partitionName
* @param name
* @param lang
* @return string
*/
public String AddTmodelKenGenerator(String partitionName, String name, String lang) {
if (partitionName == null || partitionName.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
return ToErrorAlert(ResourceLoader.GetResource(session, "errors.noinput"));
}
try {
if (!partitionName.toLowerCase().startsWith("uddi:")) {
return ResourceLoader.GetResource(session, "errors.tmodel.prefix");
}
if (!partitionName.toLowerCase().endsWith(":keygenerator")) {
return ResourceLoader.GetResource(session, "errors.tmodel.postfix");
}
SaveTModel st = new SaveTModel();
st.setAuthInfo(GetToken());
TModel tm = new TModel();
tm.setName(new Name());
tm.getName().setValue(name);
if (lang == null || lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
tm.getName().setLang(null);
} else {
tm.getName().setLang(lang);
}
tm.setCategoryBag(new CategoryBag());
KeyedReference kr = new KeyedReference();
kr.setTModelKey("uddi:uddi.org:categorization:types");
kr.setKeyName("uddi-org:keyGenerator");
kr.setKeyValue("keyGenerator");
tm.getCategoryBag().getKeyedReference().add(kr);
OverviewDoc overviewDoc = new OverviewDoc();
OverviewURL overviewUrl = new OverviewURL();
overviewUrl.setUseType("text");
overviewUrl.setValue("http://uddi.org/pubs/uddi_v3.htm#keyGen");
overviewDoc.setOverviewURL(overviewUrl);
tm.getOverviewDoc().add(overviewDoc);
tm.setTModelKey(partitionName.toLowerCase());
st.getTModel().add(tm);
TModelDetail saveTModel = publish.saveTModel(st);
return "<div class=\"alert alert-success\"><i class=\"icon-2x icon-thumbs-up\"></i> " + ResourceLoader.GetResource(session, "messages.success") + " <a href=\"tmodelEditor.jsp?id="
+ URLEncoder.encode(saveTModel.getTModel().get(0).getTModelKey(), "UTF8") + "\">"
+ StringEscapeUtils.escapeHtml(saveTModel.getTModel().get(0).getTModelKey()) + "</a></div>";
// "Success";
} catch (Exception ex) {
return ToErrorAlert(HandleException(ex));
}
}
/**
* This function provides a basic error handling rutine that will pull
* out the true error message in a UDDI fault message, returning
* bootstrap stylized html error message
*
* @param ex
* @return string
*/
public String HandleException(Exception ex) {
if (ex instanceof DispositionReportFaultMessage) {
DispositionReportFaultMessage f = (DispositionReportFaultMessage) ex;
log.error(ex.getMessage() + (f.detail != null && f.detail.getMessage() != null ? StringEscapeUtils.escapeHtml(f.detail.getMessage()) : ""));
log.debug(ex.getMessage(), ex);
return ResourceLoader.GetResource(session, "errors.generic") + " " + StringEscapeUtils.escapeHtml(ex.getMessage()) + " " + (f.detail != null && f.detail.getMessage() != null ? StringEscapeUtils.escapeHtml(f.detail.getMessage()) : "") + " " + ex.getClass().getCanonicalName();
} else if (ex instanceof RemoteException) {
RemoteException f = (RemoteException) ex;
log.error("RemoteException " + ex.getMessage());
log.debug("RemoteException " + ex.getMessage(), ex);
return ResourceLoader.GetResource(session, "errors.generic") + " " + StringEscapeUtils.escapeHtml(ex.getMessage()) + " " + (f.detail != null && f.detail.getMessage() != null ? StringEscapeUtils.escapeHtml(f.detail.getMessage()) : "") + " " + ex.getClass().getCanonicalName();
} else if (ex instanceof NullPointerException) {
log.error("NPE! Please report! " + ex.getMessage(), ex);
return ResourceLoader.GetResource(session, "errors.generic") + " " + StringEscapeUtils.escapeHtml(ex.getMessage()) + " " + ex.getClass().getCanonicalName();
} else if (ex instanceof javax.xml.ws.soap.SOAPFaultException) {
javax.xml.ws.soap.SOAPFaultException x = (javax.xml.ws.soap.SOAPFaultException) ex;
log.error("SOAP Fault returned: " + x.getMessage() + (x.getFault() != null ? x.getFault().getFaultString() : ""));
String err = null;
if (x.getFault() != null
&& x.getFault().getDetail() != null) {
Iterator detailEntries = x.getFault().getDetail().getDetailEntries();
while (detailEntries.hasNext()) {
err += detailEntries.next().toString();
}
}
return ResourceLoader.GetResource(session, "errors.generic") + " " + StringEscapeUtils.escapeHtml(ex.getMessage() + " " + err) + " " + ex.getClass().getCanonicalName();
} else {
log.error("Unexpected error " + ex.getMessage(), ex);
//log.debug(ex.getMessage(), ex);
return ResourceLoader.GetResource(session, "errors.generic") + " " + StringEscapeUtils.escapeHtml(ex.getMessage()) + " " + ex.getClass().getCanonicalName();
}
}
/**
* provides based tmodel searching/browser capability that's pagable
*
* @param keyword
* @param lang
* @param offset
* @param maxrecords
* @param isChooser if true, tModel keys will not be clickable and will
* instead be render for a modal dialog box
* @return PagableContainer tmodel
*/
public PagableContainer tModelListAsHtml(String keyword, String lang, int offset, int maxrecords, boolean isChooser) {
PagableContainer ret = new PagableContainer();
try {
FindTModel fm = new FindTModel();
fm.setAuthInfo(GetToken());
fm.setMaxRows(maxrecords);
fm.setListHead(offset);
fm.setName(new Name());
if (lang == null || lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
fm.getName().setLang(null);
} else {
fm.getName().setLang(lang);
}
fm.getName().setValue(keyword);
fm.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());
fm.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);
fm.getFindQualifiers().getFindQualifier().add(UDDIConstants.CASE_INSENSITIVE_MATCH);
fm.getFindQualifiers().getFindQualifier().add(UDDIConstants.SORT_BY_NAME_ASC);
TModelList findTModel = null;
try {
findTModel = inquiry.findTModel(fm);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fm.setAuthInfo(GetToken());
findTModel = inquiry.findTModel(fm);
} else {
throw ex;
}
}
ret.offset = offset;
if (findTModel.getListDescription() != null) {
ret.displaycount = findTModel.getListDescription().getIncludeCount();
ret.totalrecords = findTModel.getListDescription().getActualCount();
}
else
{
ret.displaycount = findTModel.getTModelInfos().getTModelInfo().size();
ret.totalrecords = findTModel.getTModelInfos().getTModelInfo().size();
}
if (findTModel.getTModelInfos() == null || findTModel.getTModelInfos().getTModelInfo().isEmpty()) {
ret.renderedHtml = ResourceLoader.GetResource(session, "errors.norecordsfound");//"No tModels are defined";
} else {
ret.renderedHtml = Printers.PrintTModelListAsHtml(findTModel, session, isChooser);
}
} catch (Exception ex) {
ret.renderedHtml = HandleException(ex);
}
return ret;
}
/**
* Returns the details of a tModel by tModelKey
*
* @param id
* @return the details or null if it doesn't exist or a null value was
* passed tmodel
*/
public TModel getTmodelDetails(String id) {
try {
if (id == null || id.length() == 0) {
return null;
}
GetTModelDetail req = new GetTModelDetail();
req.setAuthInfo(GetToken());
req.getTModelKey().add(id);
TModelDetail tModelDetail = null;
try {
tModelDetail = inquiry.getTModelDetail(req);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
req.setAuthInfo(GetToken());
tModelDetail = inquiry.getTModelDetail(req);
} else {
throw ex;
}
}
if (tModelDetail != null && !tModelDetail.getTModel().isEmpty()) {
return tModelDetail.getTModel().get(0);
}
} catch (Exception ex) {
HandleException(ex);
}
return null;
}
/**
* A convenience function for GetBusinessDetails
*
* @param key
* @return be
*/
public BusinessEntity GetBusinessDetailsAsObject(String key) {
return GetBusinessDetails(key);
}
/**
* A convenience function for GetServiceDetail
*
* @param key
* @return bs
*/
public BusinessService GetServiceDetailsAsObject(String key) {
return GetServiceDetail(key);
}
/**
* Returns a specific binding template as an object
*
* @param key
* @return null if not found
*/
public BindingTemplate GetBindingDetailsAsObject(String key) {
try {
GetBindingDetail r = new GetBindingDetail();
r.setAuthInfo(GetToken());
r.getBindingKey().add(key);
BindingDetail bindingDetail = null;
try {
bindingDetail = inquiry.getBindingDetail(r);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
r.setAuthInfo(GetToken());
bindingDetail = inquiry.getBindingDetail(r);
} else {
throw ex;
}
}
return bindingDetail.getBindingTemplate().get(0);
} catch (Exception ex) {
HandleException(ex);
}
return null;
}
/**
* Returns a tmodel given the key
*
* @param key
* @return null if not found
*/
public TModel GettModelDetailsAsObject(String key) {
try {
GetTModelDetail r = new GetTModelDetail();
r.setAuthInfo(GetToken());
r.getTModelKey().add(key);
TModelDetail tModelDetail = null;
try {
tModelDetail = inquiry.getTModelDetail(r);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
r.setAuthInfo(GetToken());
tModelDetail = inquiry.getTModelDetail(r);
} else {
throw ex;
}
}
return tModelDetail.getTModel().get(0);
} catch (Exception ex) {
HandleException(ex);
}
return null;
}
/**
* An enum to help make UDDI searching easier to work with
*/
public enum FindType {
/**
* search for a business
*/
Business,
/**
* search for a related business
*/
RelatedBusiness,
/**
* search for a business
*/
Service,
/**
* search for a tmodel
*/
tModel,
/**
* search for a binding template
*/
BindingTemplate
}
/**
* An enum to help make UDDI searching easier to work with
*/
public enum CriteriaType {
/**
* search by name
*/
Name,
/**
* by category
*/
Category,
/**
* by key
*/
uid,
/**
* by tmodel
*/
tmodel,
/**
* by identifier bag
*/
identbag
}
/**
* Provides a simple search interface for the complex UDDI search APIs
*
* @param type
* @param criteria
* @param parameters
* @param lang
* @param findqualifier
* @return stylized html
*/
public String Search(FindType type, CriteriaType criteria, String parameters, String lang, String[] findqualifier) {
switch (type) {
case BindingTemplate:
return FindBindingTemplateToHtml(criteria, parameters, lang, findqualifier);
case Business:
return FindBusiness(criteria, parameters, lang, findqualifier);
case RelatedBusiness:
return FindRelatedBusiness(criteria, parameters, lang, findqualifier);
case Service:
return FindService(criteria, parameters, lang, findqualifier);
case tModel:
return FindtModels(criteria, parameters, lang, findqualifier);
}
return ResourceLoader.GetResource(session, "items.unknown");
}
private String FindBindingTemplateToHtml(CriteriaType criteria, String parameters, String lang, String[] fq) {
try {
FindBinding fb = new FindBinding();
fb.setAuthInfo(GetToken());
if (fq != null) {
fb.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());
for (int i = 0; i < fq.length; i++) {
fb.getFindQualifiers().getFindQualifier().add(fq[i]);
}
}
BindingDetail findBusiness = null;
switch (criteria) {
case Category:
fb.setCategoryBag(new CategoryBag());
KeyedReference kr = new KeyedReference();
kr.setTModelKey(parameters);
kr.setKeyName("%");
kr.setKeyValue("%");
fb.getCategoryBag().getKeyedReference().add(kr);
break;
case Name:
break;
case tmodel:
fb.setTModelBag(new TModelBag());
fb.getTModelBag().getTModelKey().add(parameters);
break;
case uid:
//BusinessEntity t = GetBusinessDetails(parameters);
findBusiness = new BindingDetail();
BindingTemplate bt = GetBindingDetailsAsObject(parameters);
if (bt != null) {
findBusiness.getBindingTemplate().add(bt);
}
break;
}
if (findBusiness == null) {
try {
findBusiness = inquiry.findBinding(fb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fb.setAuthInfo(GetToken());
findBusiness = inquiry.findBinding(fb);
} else {
throw ex;
}
}
}
if (findBusiness != null && !findBusiness.getBindingTemplate().isEmpty()) {
StringBuilder sb = new StringBuilder();
sb.append("<table class=\"table\">");
for (int i = 0; i < findBusiness.getBindingTemplate().size(); i++) {
sb.append("<tr><td>");
sb.append(ResourceLoader.GetResource(session, "items.service.key")).append(": ");
sb.append("<a href=\"serviceEditor.jsp?id=").
append(StringEscapeUtils.escapeHtml(findBusiness.getBindingTemplate().get(i).getServiceKey())).
append("\">");
if (findBusiness.getBindingTemplate().get(i).getDescription().isEmpty()) {
sb.append(StringEscapeUtils.escapeHtml(findBusiness.getBindingTemplate().get(i).getBindingKey()));
} else {
String t = StringEscapeUtils.escapeHtml(Printers.ListToDescString(findBusiness.getBindingTemplate().get(i).getDescription()));
if (t == null || t.trim().length() == 0) {
sb.append(StringEscapeUtils.escapeHtml(findBusiness.getBindingTemplate().get(i).getBindingKey()));
} else {
sb.append(t);
}
}
sb.append("</a><br>");
sb.append(ResourceLoader.GetResource(session, "items.bindingtemplate.key"));
sb.append(": <a href=\"bindingEditor.jsp?id=");
sb.append(StringEscapeUtils.escapeHtml(findBusiness.getBindingTemplate().get(i).getBindingKey()));
sb.append("\">");
sb.append(StringEscapeUtils.escapeHtml(findBusiness.getBindingTemplate().get(i).getBindingKey()));
sb.append("</a>");
sb.append("</td></tr>");
}
sb.append("</table>");
return sb.toString();
} else {
return ResourceLoader.GetResource(session, "errors.norecordsfound");
}
} catch (Exception ex) {
return HandleException(ex);
}
}
private String FindBusiness(CriteriaType criteria, String parameters, String lang, String[] fq) {
try {
FindBusiness fb = new FindBusiness();
fb.setAuthInfo(GetToken());
if (fq != null) {
fb.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());
if (fq != null) {
for (int i = 0; i < fq.length; i++) {
fb.getFindQualifiers().getFindQualifier().add(fq[i]);
}
}
}
BusinessList findBusiness = null;
switch (criteria) {
case Category:
fb.setCategoryBag(new CategoryBag());
KeyedReference kr = new KeyedReference();
kr.setTModelKey(parameters);
kr.setKeyName("%");
kr.setKeyValue("%");
fb.getCategoryBag().getKeyedReference().add(kr);
break;
case Name:
Name n = new Name();
n.setLang(lang);
n.setValue(parameters);
fb.getName().add(n);
break;
case tmodel:
fb.setTModelBag(new TModelBag());
fb.getTModelBag().getTModelKey().add(parameters);
break;
case uid:
BusinessEntity t = GetBusinessDetails(parameters);
findBusiness = new BusinessList();
if (t != null) {
findBusiness.setBusinessInfos(new BusinessInfos());
BusinessInfo bd = new BusinessInfo();
bd.setBusinessKey(t.getBusinessKey());
bd.getName().addAll(t.getName());
findBusiness.getBusinessInfos().getBusinessInfo().add(bd);
}
break;
}
if (findBusiness == null) {
try {
findBusiness = inquiry.findBusiness(fb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fb.setAuthInfo(GetToken());
findBusiness = inquiry.findBusiness(fb);
} else {
throw ex;
}
}
}
if (findBusiness != null && findBusiness.getBusinessInfos() != null) {
StringBuilder sb = new StringBuilder();
sb.append("<table class=\"table\">");
for (int i = 0; i < findBusiness.getBusinessInfos().getBusinessInfo().size(); i++) {
sb.append("<tr><td>");
sb.append("<a href=\"businessEditor2.jsp?id=").
append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey())).
append("\">");
if (findBusiness.getBusinessInfos().getBusinessInfo().get(i).getName().isEmpty()) {
sb.append(StringEscapeUtils.escapeHtml(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getBusinessKey()));
} else {
sb.append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getBusinessInfos().getBusinessInfo().get(i).getName())));
}
sb.append("</a>");
sb.append("</td></tr>");
}
sb.append("</table>");
return sb.toString();
} else {
return ResourceLoader.GetResource(session, "errors.norecordsfound");
}
} catch (Exception ex) {
return HandleException(ex);
}
}
private String FindRelatedBusiness(CriteriaType criteria, String parameters, String lang, String[] fq) {
try {
FindRelatedBusinesses fb = new FindRelatedBusinesses();
fb.setAuthInfo(GetToken());
fb.setBusinessKey(parameters);
RelatedBusinessesList findBusiness = null;
switch (criteria) {
case Category:
break;
case Name:
break;
case tmodel:
break;
case uid:
break;
}
try {
findBusiness = inquiry.findRelatedBusinesses(fb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fb.setAuthInfo(GetToken());
findBusiness = inquiry.findRelatedBusinesses(fb);
} else {
throw ex;
}
}
if (findBusiness != null && findBusiness.getRelatedBusinessInfos() != null) {
StringBuilder sb = new StringBuilder();
sb.append("<table class=\"table table-hover\">");
sb.append("<tr><th>").append(ResourceLoader.GetResource(session, "items.business")).append("</th><th>").append(ResourceLoader.GetResource(session, "items.publisherassertions.relationship")).append("</th><tr>");
for (int i = 0; i < findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().size(); i++) {
sb.append("<tr><td>");
sb.append("<a href=\"businessEditor2.jsp?id=").
append(StringEscapeUtils.escapeHtml(findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getBusinessKey())).
append("\">");
if (findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getName().isEmpty()) {
sb.append(StringEscapeUtils.escapeHtml(findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getBusinessKey()));
} else {
sb.append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getName())));
}
sb.append("</a>");
sb.append("</td><td>");
sb.append(Printers.PrintPublisherAssertion(findBusiness.getRelatedBusinessInfos().getRelatedBusinessInfo().get(i).getSharedRelationships(), getLocale()));
sb.append("</td></tr>");
}
sb.append("</table>");
return sb.toString();
} else {
return ResourceLoader.GetResource(session, "errors.norecordsfound");
}
} catch (Exception ex) {
return HandleException(ex);
}
}
private String FindService(CriteriaType criteria, String parameters, String lang, String[] fq) {
try {
FindService fb = new FindService();
fb.setAuthInfo(GetToken());
if (fq != null) {
fb.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());
if (fq != null) {
fb.getFindQualifiers().getFindQualifier().addAll(Arrays.asList(fq));
}
}
ServiceList findBusiness = null;
switch (criteria) {
case Category:
fb.setCategoryBag(new CategoryBag());
KeyedReference kr = new KeyedReference();
kr.setTModelKey(parameters);
kr.setKeyName("%");
kr.setKeyValue("%");
fb.getCategoryBag().getKeyedReference().add(kr);
break;
case Name:
Name n = new Name();
n.setLang(lang);
n.setValue(parameters);
fb.getName().add(n);
break;
case tmodel:
fb.setTModelBag(new TModelBag());
fb.getTModelBag().getTModelKey().add(parameters);
break;
case uid:
findBusiness = new ServiceList();
BusinessService GetServiceDetail = GetServiceDetail(parameters);
if (GetServiceDetail != null) {
findBusiness.setServiceInfos(new ServiceInfos());
ServiceInfo si = new ServiceInfo();
si.setBusinessKey(GetServiceDetail.getBusinessKey());
si.setServiceKey(GetServiceDetail.getServiceKey());
si.getName().addAll(GetServiceDetail.getName());
findBusiness.getServiceInfos().getServiceInfo().add(si);
}
break;
}
if (findBusiness == null) {
try {
findBusiness = inquiry.findService(fb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fb.setAuthInfo(GetToken());
findBusiness = inquiry.findService(fb);
} else {
throw ex;
}
}
}
if (findBusiness != null && findBusiness.getServiceInfos() != null) {
StringBuilder sb = new StringBuilder();
sb.append("<table class=\"table\">");
for (int i = 0; i < findBusiness.getServiceInfos().getServiceInfo().size(); i++) {
sb.append("<tr><td>");
sb.append("<a href=\"serviceEditor.jsp?id=").
append(StringEscapeUtils.escapeHtml(findBusiness.getServiceInfos().getServiceInfo().get(i).getServiceKey())).
append("\">");
if (findBusiness.getServiceInfos().getServiceInfo().get(i).getName().isEmpty()) {
sb.append(StringEscapeUtils.escapeHtml(findBusiness.getServiceInfos().getServiceInfo().get(i).getServiceKey()));
} else {
sb.append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(findBusiness.getServiceInfos().getServiceInfo().get(i).getName())));
}
sb.append("</a>");
sb.append("</td></tr>");
}
sb.append("</table>");
return sb.toString();
} else {
return ResourceLoader.GetResource(session, "errors.norecordsfound");
}
} catch (Exception ex) {
return HandleException(ex);
}
}
private String FindtModels(CriteriaType criteria, String parameters, String lang, String[] fq) {
try {
FindTModel fb = new FindTModel();
fb.setAuthInfo(GetToken());
if (fq != null) {
fb.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());
for (int i = 0; i < fq.length; i++) {
fb.getFindQualifiers().getFindQualifier().add(fq[i]);
}
}
TModelList findBusiness = null;
switch (criteria) {
case Category:
fb.setCategoryBag(new CategoryBag());
KeyedReference kr = new KeyedReference();
kr.setTModelKey(parameters);
kr.setKeyName("%");
kr.setKeyValue("%");
fb.getCategoryBag().getKeyedReference().add(kr);
break;
case Name:
Name n = new Name();
n.setLang(lang);
n.setValue(parameters);
fb.setName(n);
break;
case tmodel:
fb.setCategoryBag(new CategoryBag());
KeyedReference kr2 = new KeyedReference();
kr2.setTModelKey(parameters);
kr2.setKeyName("%");
kr2.setKeyValue("%");
fb.getCategoryBag().getKeyedReference().add(kr2);
break;
case uid:
TModel tmodelDetails = this.getTmodelDetails(parameters);
findBusiness = new TModelList();
if (tmodelDetails != null) {
findBusiness.setTModelInfos(new TModelInfos());
TModelInfo tmi = new TModelInfo();
tmi.setName(tmodelDetails.getName());
tmi.setTModelKey(tmodelDetails.getTModelKey());
tmi.getDescription().addAll(tmodelDetails.getDescription());
findBusiness.getTModelInfos().getTModelInfo().add(tmi);
}
break;
}
if (findBusiness == null) {
try {
findBusiness = inquiry.findTModel(fb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fb.setAuthInfo(GetToken());
findBusiness = inquiry.findTModel(fb);
} else {
throw ex;
}
}
}
if (findBusiness != null && findBusiness.getTModelInfos() != null) {
StringBuilder sb = new StringBuilder();
sb.append("<table class=\"table\">");
for (int i = 0; i < findBusiness.getTModelInfos().getTModelInfo().size(); i++) {
sb.append("<tr><td>");
sb.append("<a href=\"tmodelEditor.jsp?id=").
append(StringEscapeUtils.escapeHtml(findBusiness.getTModelInfos().getTModelInfo().get(i).getTModelKey())).
append("\">");
if (findBusiness.getTModelInfos().getTModelInfo().get(i).getName() == null) {
sb.append(StringEscapeUtils.escapeHtml(findBusiness.getTModelInfos().getTModelInfo().get(i).getTModelKey()));
} else {
sb.append(StringEscapeUtils.escapeHtml((findBusiness.getTModelInfos().getTModelInfo().get(i).getName().getValue())));
}
sb.append("</a>");
sb.append("</td></tr>");
}
sb.append("</table>");
return sb.toString();
} else {
return ResourceLoader.GetResource(session, "errors.norecordsfound");
}
} catch (Exception ex) {
return HandleException(ex);
}
}
/**
* Deletes a business
*
* @param bizid
* @return null if successful, otherwise an error message
*/
public String deleteBusiness(String bizid) {
if (bizid == null || bizid.length() == 0) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
List<String> x = new ArrayList<String>();
x.add(bizid.trim());
return deleteBusiness(x);
}
/**
* delete a service
*
* @param serviceId
* @return status msg
*/
public String deleteService(String serviceId) {
if (serviceId == null || serviceId.length() == 0) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
List<String> x = new ArrayList<String>();
x.add(serviceId.trim());
return deleteService(x);
}
/**
* deletes a list of services
*
* @param serviceId
* @return status msg
*/
public String deleteService(List<String> serviceId) {
if (serviceId == null || serviceId.isEmpty()) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
DeleteService db = new DeleteService();
db.setAuthInfo(GetToken());
db.getServiceKey().addAll(serviceId);
try {
try {
publish.deleteService(db);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
db.setAuthInfo(GetToken());
publish.deleteService(db);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return ResourceLoader.GetResource(session, "actions.delete.service");
}
/**
* Deletes a list of UDDI businesses by key
*
* @param bizid
* @return null if successful, otherwise an error message
*/
public String deleteBusiness(List<String> bizid) {
if (bizid == null || bizid.isEmpty()) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
DeleteBusiness db = new DeleteBusiness();
db.setAuthInfo(GetToken());
db.getBusinessKey().addAll(bizid);
try {
try {
publish.deleteBusiness(db);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
db.setAuthInfo(GetToken());
publish.deleteBusiness(db);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return ResourceLoader.GetResource(session, "actions.delete.business");
}
/**
* delete a tmodel
*
* @param bizid
* @return status msg
*/
public String deleteTmodel(String bizid) {
if (bizid == null || bizid.length() == 0) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
List<String> x = new ArrayList<String>();
x.add(bizid);
return deleteTmodel(x);
}
/**
* Deletes a list of UDDI tModels by key
*
* @param bizid
* @return null if successful, otherwise an error message
*/
public String deleteTmodel(List<String> bizid) {
if (bizid == null || bizid.isEmpty()) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
DeleteTModel db = new DeleteTModel();
db.setAuthInfo(GetToken());
db.getTModelKey().addAll(bizid);
try {
try {
publish.deleteTModel(db);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
db.setAuthInfo(GetToken());
publish.deleteTModel(db);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return ResourceLoader.GetResource(session, "actions.delete.tmodel");
}
/**
* saves a tmodel object
*
* @param be
* @return status msg
*/
public String SaveTModel(TModel be) {
try {
SaveTModel sb = new SaveTModel();
sb.setAuthInfo(GetToken());
TModelDetail saveTModel = null;
sb.getTModel().add(be);
//JAXB.marshal(be, System.out);
try {
saveTModel = publish.saveTModel(sb);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
sb.setAuthInfo(GetToken());
saveTModel = publish.saveTModel(sb);
} else {
throw ex;
}
}
//return ResourceLoader.GetResource(session, "actions.saved");
return ResourceLoader.GetResource(session, "actions.saved") + " "
+ "<a href=\"tmodelEditor.jsp?id=" + URLEncoder.encode(saveTModel.getTModel().get(0).getTModelKey(), "UTF8")
+ "\">" + StringEscapeUtils.escapeHtml(saveTModel.getTModel().get(0).getTModelKey()) + "</a>";
} catch (Exception ex) {
return HandleException(ex);
}
}
/**
* This rebuild a tmodel from the http request, such as from the tmodel
* editor page
*
* @param request
* @return status msg
*/
public String SaveTModel(HttpServletRequest request) {
TModel be = new TModel();
be.setTModelKey(request.getParameter(PostBackConstants.SERVICEKEY).trim());
if (be.getTModelKey() != null && (be.getTModelKey().equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit")))
|| be.getTModelKey().length() == 0) {
be.setTModelKey(null);
}
be.setName(new Name());
String t = request.getParameter(PostBackConstants.NAME + PostBackConstants.VALUE);
if (t != null && !t.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit")) && t.length() > 0) {
be.getName().setValue(t);
}
t = request.getParameter(PostBackConstants.NAME + PostBackConstants.LANG);
if (t != null && !t.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit")) && t.length() > 0) {
be.getName().setLang(t);
}
t = request.getParameter(PostBackConstants.TMODEL_DELETED);
if (t != null) {
if (t.equalsIgnoreCase("checked")) {
be.setDeleted(Boolean.TRUE);
}
}
if (!be.isDeleted()) {
be.setDeleted(Boolean.FALSE);
}
be.getDescription().addAll(Builders.BuildDescription(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DESCRIPTION), PostBackConstants.DESCRIPTION, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
be.getOverviewDoc().addAll(Builders.BuildOverviewDocs(Builders.MapFilter(request.getParameterMap(), PostBackConstants.OVERVIEW), PostBackConstants.OVERVIEW, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
CategoryBag cb = new CategoryBag();
cb.getKeyedReference().addAll(Builders.BuildKeyedReference(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF), PostBackConstants.CATBAG_KEY_REF, getLocale()));
cb.getKeyedReferenceGroup().addAll(Builders.BuildKeyedReferenceGroup(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF_GRP), PostBackConstants.CATBAG_KEY_REF_GRP, getLocale()));
if (!cb.getKeyedReference().isEmpty() || !cb.getKeyedReferenceGroup().isEmpty()) {
be.setCategoryBag(cb);
}
be.setIdentifierBag(Builders.BuildIdentBag(Builders.MapFilter(request.getParameterMap(), PostBackConstants.IDENT_KEY_REF), PostBackConstants.IDENT_KEY_REF, getLocale()));
return SaveTModel(be);
}
/**
* Converts a UDDI Signature to a readable representation of the signing
* certificate subject name
*
* @param sig
* @return human readable signature
*/
public static String SignatureToReadable(SignatureType sig) {
StringBuilder sb = new StringBuilder();
// X509Certificate signingcert = null;
//sb.append("Signature Id: ").append(sig.getKeyInfo().getId());
for (int i = 0; i < sig.getKeyInfo().getContent().size(); i++) {
//sb.append("Signature #").append((i + 1)).append(": ");
JAXBElement get = (JAXBElement) sig.getKeyInfo().getContent().get(i);
if (get.getValue() instanceof org.w3._2000._09.xmldsig_.X509DataType) {
X509DataType xd = (X509DataType) get.getValue();
for (int k = 0; k < xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().size(); k++) {
if (xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().get(k) instanceof JAXBElement) {
JAXBElement element = (JAXBElement) xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().get(k);
if (element.getValue() instanceof byte[]) {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream is = new ByteArrayInputStream((byte[]) element.getValue());
X509Certificate cert = (X509Certificate) cf.generateCertificate(is);
is.close();
sb.append(cert.getSubjectDN().getName());
} catch (Exception ex) {
}
} else if (element.getValue() instanceof String) {
// sb.append((String) element.getValue());
}
}
}
}
}
return sb.toString();
}
/**
* converts a UDDI Signature Type element into a base64 string
* containing the raw data for the signing certificate, if present
*
* @param sig
* @return x509 cert
*/
public String SignatureToBase64(SignatureType sig) {
if (sig == null) {
return "Error, the signature was nullavailable";
}
for (int i = 0; i < sig.getKeyInfo().getContent().size(); i++) {
JAXBElement get = (JAXBElement) sig.getKeyInfo().getContent().get(i);
if (get.getValue() instanceof org.w3._2000._09.xmldsig_.X509DataType) {
X509DataType xd = (X509DataType) get.getValue();
for (int k = 0; k < xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().size(); k++) {
if (xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().get(k) instanceof JAXBElement) {
JAXBElement element = (JAXBElement) xd.getX509IssuerSerialOrX509SKIOrX509SubjectName().get(k);
if (element.getValue() instanceof byte[]) {
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream is = new ByteArrayInputStream((byte[]) element.getValue());
X509Certificate cert = (X509Certificate) cf.generateCertificate(is);
is.close();
//this is the most supportable way to do this
return org.apache.commons.codec.binary.Base64.encodeBase64String(cert.getEncoded());
//BASE64Encoder encoder = new BASE64Encoder();
//return encoder.encodeBuffer(cert.getEncoded());
} catch (Exception ex) {
return HandleException(ex);
}
} else if (element.getValue() instanceof String) {
}
}
}
}
}
return ResourceLoader.GetResource(session, "errors.nocertavaiable");
}
/**
* Retrieves the UDDI entity, then attempts to return a base64 encoded
* certificate of the N'th indexed signature
*
* @param ft The type of item requested
* @param id the unique identifier of the entity
* @param index the offset of the signature, starting at 0
* @return the base64 encoded certification, omitting headers and
* footers OR "Error" with an error message
*/
public String GetCertificate(FindType ft, String id, int index) {
SignatureType st = null;
switch (ft) {
case BindingTemplate:
BindingTemplate GetBindingDetailsAsObject = GetBindingDetailsAsObject(id);
if (GetBindingDetailsAsObject != null) {
return SignatureToBase64(GetBindingDetailsAsObject.getSignature().get(index));
}
break;
case Business:
BusinessEntity GetBusinessDetailsAsObject = GetBusinessDetailsAsObject(id);
if (GetBusinessDetailsAsObject != null) {
return SignatureToBase64(GetBusinessDetailsAsObject.getSignature().get(index));
}
break;
case Service:
BusinessService GetServiceDetailsAsObject = GetServiceDetailsAsObject(id);
if (GetServiceDetailsAsObject != null) {
return SignatureToBase64(GetServiceDetailsAsObject.getSignature().get(index));
}
break;
case tModel:
TModel GettModelDetailsAsObject = GettModelDetailsAsObject(id);
if (GettModelDetailsAsObject != null) {
return SignatureToBase64(GettModelDetailsAsObject.getSignature().get(index));
}
break;
}
return ResourceLoader.GetResource(session, "errors.unknownentity");
}
/**
* gets all of my subscriptions
*
* @return null if there's an error
*/
public List<Subscription> GetSubscriptions() {
try {
try {
return subscription.getSubscriptions(GetToken());
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
return subscription.getSubscriptions(GetToken());
} else {
throw ex;
}
}
} catch (Exception ex) {
HandleException(ex);
}
return null;
}
/**
* attempts to save subscription
*
* @param sub
* @return a success or fail message
*/
public String AddSubscription(Subscription sub) {
Holder<List<Subscription>> data = new Holder<List<Subscription>>();
data.value = new ArrayList<Subscription>();
data.value.add(sub);
try {
try {
subscription.saveSubscription(GetToken(), data);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
subscription.saveSubscription(GetToken(), data);
} else {
throw ex;
}
}
return ResourceLoader.GetResource(session, "messages.success")
+ " <a href=\"editSubscription.jsp?id=" + URLEncoder.encode(data.value.get(0).getSubscriptionKey(), "UTF8")
+ "\">" + StringEscapeUtils.escapeHtml(data.value.get(0).getSubscriptionKey()) + "</a>";
} catch (Exception ex) {
return HandleException(ex);
}
}
/**
* Removes/deletes a subscription
*
* @param key
* @return success or failure message
*/
public String RemoveSubscription(String key) {
DeleteSubscription ds = new DeleteSubscription();
ds.setAuthInfo(GetToken());
ds.getSubscriptionKey().add(key);
try {
try {
subscription.deleteSubscription(ds);
return ResourceLoader.GetResource(session, "actions.deleted");
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
ds.setAuthInfo(GetToken());
subscription.deleteSubscription(ds);
return ResourceLoader.GetResource(session, "actions.deleted");
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
// return ResourceLoader.GetResource(session, "messages.success");
}
/**
* gets the opinfo on an item
*
* @param id
* @return null if theres an error
*/
public List<OperationalInfo> GetOperationalInfo(String id) {
if (id == null || id.equalsIgnoreCase("null")) {
return null;
}
GetOperationalInfo goi = new GetOperationalInfo();
goi.setAuthInfo(GetToken());
goi.getEntityKey().add(id);
OperationalInfos operationalInfo = null;
try {
try {
operationalInfo = inquiry.getOperationalInfo(goi);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
goi.setAuthInfo(GetToken());
operationalInfo = inquiry.getOperationalInfo(goi);
} else {
throw ex;
}
}
return operationalInfo.getOperationalInfo();
} catch (Exception ex) {
HandleException(ex);
}
return null;
}
/**
* GetOperationalInfo
*
* @param info
* @return formatted html
*/
public String GetOperationalInfo(List<OperationalInfo> info) {
StringBuilder sb = new StringBuilder();
if (info != null && !info.isEmpty()) {
sb.append("<table class=\"table table-hover\">");
sb.append("<tr><th>").
append(ResourceLoader.GetResource(session, "items.nodeid")).
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.authorizedname")).
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.key")).
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.created")).
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.modified")).
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.modifiedwithchildren")).
append("</th></tr>");
for (int i = 0; i < info.size(); i++) {
if (info.get(i) == null) {
continue;
}
sb.append("<tr><td>");
sb.append((info.get(i).getNodeID() != null ? StringEscapeUtils.escapeHtml(info.get(i).getNodeID()) : ""))
.append("</td><td>")
.append((info.get(i).getAuthorizedName() != null ? StringEscapeUtils.escapeHtml(info.get(i).getAuthorizedName()) : ""))
.append("</td><td>")
.append((info.get(i).getEntityKey() != null ? StringEscapeUtils.escapeHtml(info.get(i).getEntityKey()) : ""))
.append("</td><td>")
.append((info.get(i).getCreated() != null ? StringEscapeUtils.escapeHtml(info.get(i).getCreated().toString()) : ""))
.append("</td><td>")
.append((info.get(i).getModified() != null ? StringEscapeUtils.escapeHtml(info.get(i).getModified().toString()) : ""))
.append("</td><td>")
.append((info.get(i).getModifiedIncludingChildren() != null ? StringEscapeUtils.escapeHtml(info.get(i).getModifiedIncludingChildren().toString()) : ""))
.append("</td></tr>");
}
sb.append("</table>");
} else {
sb.append(ResourceLoader.GetResource(session, "errors.nooperationalinfo"));
}
return sb.toString();
}
/**
* This function returns all businesses that the current user
* owns<br><br>
* The get_registeredInfo API call is used to get an abbreviated list of
* all businessEntity and tModel data that are controlled by a
* publisher. When the registry distinguishes between publishers, this
* is the individual associated with the credentials passed in the
* authInfo element. This returned information is intended, for example,
* for driving tools that display lists of registered information and
* then provide drill-down features. This is the recommended API to use
* after a network problem results in an unknown status of saved
* information.
*
* @return RegisteredInfo
*/
public RegisteredInfo GetNodeInformation(AtomicReference<String> outmsg) {
if (outmsg == null) {
outmsg = new AtomicReference<String>();
}
try {
GetRegisteredInfo r = new GetRegisteredInfo();
r.setAuthInfo(GetToken());
if (r.getAuthInfo() == null) {
outmsg.set(ResourceLoader.GetResource(session, "errors.notsignedin"));
return null;
}
r.setInfoSelection(InfoSelection.ALL);
RegisteredInfo registeredInfo = null;
try {
registeredInfo = publish.getRegisteredInfo(r);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
r.setAuthInfo(GetToken());
registeredInfo = publish.getRegisteredInfo(r);
} else {
throw ex;
}
}
return registeredInfo;
} catch (Exception ex) {
outmsg.set(HandleException(ex));
}
return null;
}
/**
* Gets a list of all assertions for all businesses owned by the current
* user
*
* The get_assertionStatusReport API call provides administrative
* support for determining the status of current and outstanding
* publisher assertions that involve any of the business registrations
* managed by the individual publisher. Using this API, a publisher can
* see the status of assertions that they have made, as well as see
* assertions that others have made that involve businessEntity
* structures controlled by the requesting publisher. See Appendix A
* Relationships and Publisher Assertions for more information.
*
* @param msg
* @return list
*/
public List<AssertionStatusItem> GetPublisherAssertions(AtomicReference<String> msg) {
List<AssertionStatusItem> out = new ArrayList<AssertionStatusItem>();
if (GetToken() == null) {
msg.set(ResourceLoader.GetResource(session, "errors.notsignedin"));
return null;
}
List<AssertionStatusItem> STATUS_COMPLETE = null;
try {
try {
STATUS_COMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_COMPLETE);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
STATUS_COMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_COMPLETE);
} else {
throw ex;
}
}
} catch (Exception ex) {
msg.set(HandleException(ex));
}
if (STATUS_COMPLETE != null) {
out.addAll(STATUS_COMPLETE);
}
List<AssertionStatusItem> STATUS_FROM_KEY_INCOMPLETE = null;
try {
try {
STATUS_FROM_KEY_INCOMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_FROM_KEY_INCOMPLETE);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
STATUS_FROM_KEY_INCOMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_FROM_KEY_INCOMPLETE);
} else {
throw ex;
}
}
} catch (Exception ex) {
msg.set(HandleException(ex));
}
if (STATUS_FROM_KEY_INCOMPLETE != null) {
out.addAll(STATUS_FROM_KEY_INCOMPLETE);
}
List<AssertionStatusItem> STATUS_TO_KEY_INCOMPLETE = null;
try {
try {
STATUS_TO_KEY_INCOMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_TO_KEY_INCOMPLETE);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
STATUS_TO_KEY_INCOMPLETE = publish.getAssertionStatusReport(GetToken(), CompletionStatus.STATUS_TO_KEY_INCOMPLETE);
} else {
throw ex;
}
}
} catch (Exception ex) {
msg.set(HandleException(ex));
}
if (STATUS_TO_KEY_INCOMPLETE != null) {
out.addAll(STATUS_TO_KEY_INCOMPLETE);
}
return out;
//return publisherAssertions;
}
/**
* deletes a publisher assertion, all fields must match exactly
*
* @param tokey
* @param fromkey
* @param tmodelkey
* @param keyname
* @param keyvalue
* @return status msg
*/
public String DeletePublisherAssertion(String tokey, String fromkey, String tmodelkey, String keyname, String keyvalue) {
DeletePublisherAssertions dp = new DeletePublisherAssertions();
dp.setAuthInfo(GetToken());
PublisherAssertion add = new PublisherAssertion();
add.setToKey(tokey);
add.setFromKey(fromkey);
add.setKeyedReference(new KeyedReference());
add.getKeyedReference().setTModelKey(tmodelkey);
add.getKeyedReference().setKeyName(keyname);
add.getKeyedReference().setKeyValue(keyvalue);
dp.getPublisherAssertion().add(add);
try {
try {
publish.deletePublisherAssertions(dp);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
dp.setAuthInfo(GetToken());
publish.deletePublisherAssertions(dp);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return ResourceLoader.GetResource(session, "actions.saved");
}
/**
* Adds a new publisher assertion
*
* @param tokey
* @param fromkey
* @param keyname
* @param keyvalue
* @return status msg, expected value is actions.saved
*/
public String AddPublisherAssertion(String tokey, String fromkey, String tmodelkey, String keyname, String keyvalue) {
// List<PublisherAssertion> x = GetPublisherAssertions();
AddPublisherAssertions r = new AddPublisherAssertions();
r.setAuthInfo(GetToken());
PublisherAssertion add = new PublisherAssertion();
add.setToKey(tokey);
add.setFromKey(fromkey);
add.setKeyedReference(new KeyedReference());
add.getKeyedReference().setTModelKey(tmodelkey);
add.getKeyedReference().setKeyName(keyname);
add.getKeyedReference().setKeyValue(keyvalue);
//TODO signatures? :(
r.getPublisherAssertion().add(add);
try {
try {
publish.addPublisherAssertions(r);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
r.setAuthInfo(GetToken());
publish.addPublisherAssertions(r);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return ResourceLoader.GetResource(session, "actions.saved");
}
/**
* Returns bootstrap stylized html representing all changes in the last
* refresh
*
* @param lastRefresh
* @return formatted html
* @throws DatatypeConfigurationException
*/
public String GetNewsFeed(XMLGregorianCalendar lastRefresh) throws DatatypeConfigurationException {
if (GetToken() == null) {
return ToErrorAlert(ResourceLoader.GetResource(session, "errors.notsignedin"));
}
if (df == null) {
df = DatatypeFactory.newInstance();
}
List<Subscription> subscriptions = new ArrayList<Subscription>();
try {
try {
subscriptions = subscription.getSubscriptions(GetToken());
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
subscriptions = subscription.getSubscriptions(GetToken());
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
GregorianCalendar gcal = new GregorianCalendar();
gcal.setTimeInMillis(System.currentTimeMillis());
GetSubscriptionResults r = new GetSubscriptionResults();
r.setAuthInfo(GetToken());
r.setCoveragePeriod(new CoveragePeriod());
r.getCoveragePeriod().setEndPoint(df.newXMLGregorianCalendar(gcal));
r.getCoveragePeriod().setStartPoint(lastRefresh);
StringBuilder sb = new StringBuilder();
if (subscriptions.isEmpty()) {
return ToErrorAlert(ResourceLoader.GetResource(session, "errors.subscriptionfeed.nosubs"));
}
for (int k = 0; k < subscriptions.size(); k++) {
r.setSubscriptionKey(subscriptions.get(k).getSubscriptionKey());
SubscriptionResultsList subscriptionResults = null;
try {
try {
subscriptionResults = subscription.getSubscriptionResults(r);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
r.setAuthInfo(GetToken());
subscriptionResults = subscription.getSubscriptionResults(r);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
if (subscriptionResults != null) {
// subscriptionResults.getAssertionStatusReport().
if (subscriptionResults.getAssertionStatusReport() != null) {
sb.append(ResourceLoader.GetResource(session, "items.subscriptions.assertion")).
append("<table class=\"table table-hover\">");
for (int i = 0; i < subscriptionResults.getAssertionStatusReport().getAssertionStatusItem().size(); i++) {
sb.append("<tr><td>");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getAssertionStatusReport().getAssertionStatusItem().get(i).getFromKey()));
sb.append("</td><td>");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getAssertionStatusReport().getAssertionStatusItem().get(i).getToKey()));
sb.append("</td><td>");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getAssertionStatusReport().getAssertionStatusItem().get(i).getCompletionStatus().toString()));
sb.append("</td></tr>");
}
sb.append("</table><br>");
}
if (subscriptionResults.getBindingDetail() != null) {
sb.append(ResourceLoader.GetResource(session, "items.subscriptions.bindings")).
append("<table class=\"table table-hover\">");
for (int i = 0; i < subscriptionResults.getBindingDetail().getBindingTemplate().size(); i++) {
sb.append("<tr><td>");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getBindingDetail().getBindingTemplate().get(i).getServiceKey()));
sb.append("</td><td>");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getBindingDetail().getBindingTemplate().get(i).getBindingKey()));
sb.append("</td></tr>");
}
sb.append("</table><br>");
}
if (subscriptionResults.getBusinessDetail() != null) {
sb.append(ResourceLoader.GetResource(session, "items.subscriptions.business")).
append("<table class=\"table table-hover\">");
for (int i = 0; i < subscriptionResults.getBusinessDetail().getBusinessEntity().size(); i++) {
sb.append("<tr><td><a href=\"businessEditor2.jsp?id=");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getBusinessDetail().getBusinessEntity().get(i).getBusinessKey()));
sb.append("\">");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getBusinessDetail().getBusinessEntity().get(i).getBusinessKey()));
sb.append("<i class=\"icon-large icon-edit\"></i></a></td></tr>");
}
sb.append("</table><br>");
}
if (subscriptionResults.getRelatedBusinessesList() != null) {
sb.append(ResourceLoader.GetResource(session, "items.subscriptions.assertion2")).
append("<table class=\"table table-hover\">");
// for (int i = 0; i < subscriptionResults.getRelatedBusinessesList().getBusinessKey().size(); i++) {
sb.append("<tr><td>");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getRelatedBusinessesList().getBusinessKey()));
sb.append("</td></tr>");
//}
sb.append("</table><br>");
}
if (subscriptionResults.getServiceDetail() != null) {
sb.append(ResourceLoader.GetResource(session, "items.subscriptions.services")).
append("<table class=\"table table-hover\">");
for (int i = 0; i < subscriptionResults.getServiceDetail().getBusinessService().size(); i++) {
sb.append("<tr><td><a href=\"serviceEditor.jsp?id=");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getServiceDetail().getBusinessService().get(i).getServiceKey()));
sb.append("\">");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getServiceDetail().getBusinessService().get(i).getServiceKey()));
sb.append("<i class=\"icon-large icon-edit\"></i></a></td></tr>");
}
sb.append("</table><br>");
}
if (subscriptionResults.getServiceList() != null) {
sb.append(ResourceLoader.GetResource(session, "items.subscriptions.servicelist")).
append("<table class=\"table table-hover\">");
for (int i = 0; i < subscriptionResults.getServiceList().getServiceInfos().getServiceInfo().size(); i++) {
sb.append("<tr><td>");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getServiceList().getServiceInfos().getServiceInfo().get(i).getServiceKey()));
sb.append("</td><td>");
sb.append(StringEscapeUtils.escapeHtml(Printers.ListNamesToString(subscriptionResults.getServiceList().getServiceInfos().getServiceInfo().get(i).getName())));
sb.append("</td></tr>");
}
sb.append("</table><br>");
}
if (subscriptionResults.getTModelDetail() != null) {
sb.append(ResourceLoader.GetResource(session, "items.subscriptions.tmodels")).append("<br><table class=\"table table-hover\">");
for (int i = 0; i < subscriptionResults.getTModelDetail().getTModel().size(); i++) {
sb.append("<tr><td>");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getTModelDetail().getTModel().get(i).getTModelKey()));
sb.append("</td><td>");
sb.append(StringEscapeUtils.escapeHtml((subscriptionResults.getTModelDetail().getTModel().get(i).getName().getValue())));
sb.append("</td></tr>");
}
sb.append("</table><br>");
}
if (subscriptionResults.getTModelList() != null) {
sb.append(ResourceLoader.GetResource(session, "items.subscriptions.tmodels2"))
.append("<table class=\"table table-hover\">");
for (int i = 0; i < subscriptionResults.getTModelList().getTModelInfos().getTModelInfo().size(); i++) {
sb.append("<tr><td><a href=\"serviceEditor.jsp?id=");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getTModelList().getTModelInfos().getTModelInfo().get(i).getTModelKey()));
sb.append("\">");
sb.append(StringEscapeUtils.escapeHtml(subscriptionResults.getTModelList().getTModelInfos().getTModelInfo().get(i).getTModelKey()));
sb.append("<i class=\"icon-large icon-edit\"></i></a></td><td>");
sb.append(StringEscapeUtils.escapeHtml((subscriptionResults.getTModelList().getTModelInfos().getTModelInfo().get(i).getName().getValue())));
sb.append("</td></tr>");
}
sb.append("</table>");
}
}
}
return sb.toString();
}
/**
* Searches first for a service, then iterates through to identify
* bindings matching the specified criteria. Since UDDI does not have name/keyword searches for a
* find_binding API, this is as good as it gets.
*
* @param keyword
* @param lang
* @param offset
* @param maxrecords
* @param isChooser
* @return PagableContainer
*/
public PagableContainer SearchForBinding(String keyword, String lang, int offset, int maxrecords, boolean isChooser) {
PagableContainer ret = new PagableContainer();
ret.displaycount = 0;
ret.offset = offset;
ret.totalrecords = 0;
try {
FindService fs = new FindService();
fs.setAuthInfo(GetToken());
fs.setMaxRows(maxrecords);
fs.setListHead(offset);
Name n = new Name();
if (lang == null || lang.equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
n.setLang(null);
} else {
n.setLang(lang);
}
n.setValue(keyword);
fs.getName().add(n);
fs.setFindQualifiers(new org.uddi.api_v3.FindQualifiers());
fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.APPROXIMATE_MATCH);
fs.getFindQualifiers().getFindQualifier().add(UDDIConstants.SORT_BY_NAME_ASC);
ServiceList findService = null;//inquiry.findService(fs);
try {
findService = inquiry.findService(fs);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fs.setAuthInfo(GetToken());
findService = inquiry.findService(fs);
} else {
throw ex;
}
}
if (findService == null || findService.getServiceInfos() == null) {
ret.renderedHtml = ResourceLoader.GetResource(session, "errors.norecordsfound");
return ret;
}
if (findService.getListDescription() != null) {
ret.displaycount = findService.getListDescription().getIncludeCount();
ret.totalrecords = findService.getListDescription().getActualCount();
} else {
ret.displaycount = findService.getServiceInfos().getServiceInfo().size();
ret.totalrecords = findService.getServiceInfos().getServiceInfo().size();
}
GetServiceDetail gs = new GetServiceDetail();
gs.setAuthInfo(GetToken());
for (int i = 0; i < findService.getServiceInfos().getServiceInfo().size(); i++) {
gs.getServiceKey().add(findService.getServiceInfos().getServiceInfo().get(i).getServiceKey());
}
ServiceDetail serviceDetail = null;
try {
serviceDetail = inquiry.getServiceDetail(gs);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
fs.setAuthInfo(GetToken());
serviceDetail = inquiry.getServiceDetail(gs);
} else {
throw ex;
}
}
if (serviceDetail == null || serviceDetail.getBusinessService().isEmpty()) {
ret.renderedHtml = ResourceLoader.GetResource(session, "errors.norecordsfound");
return ret;
}
StringBuilder sb = new StringBuilder();
sb.append("<table class=\"table\"><tr><th>").
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.business")).
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.service")).
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.bindingtemplate.key")).
append("</th><th>").
append(ResourceLoader.GetResource(session, "items.accesspoint.value")).
append("</th></tr>");
for (int i = 0; i < serviceDetail.getBusinessService().size(); i++) {
// System.out.println(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size());
if (serviceDetail.getBusinessService().get(i).getBindingTemplates() != null) {
for (int k = 0; k < serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().size(); k++) {
//System.out.println(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint().getValue());
sb.append("<tr><td><input type=\"checkbox\" class=\"modalableBinding\" id=\"").
append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey())).
append("\">").
append("</td><td>").
append("<a href=\"businessEditor2.jsp?id=").
append(StringEscapeUtils.escapeHtml(findService.getServiceInfos().getServiceInfo().get(i).getBusinessKey())).
append("\">").
append(StringEscapeUtils.escapeHtml((findService.getServiceInfos().getServiceInfo().get(i).getBusinessKey()))).
append("</a>").
append("</td><td>").append("<a href=\"serviceEditor.jsp?id=").
append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getServiceKey())).
append("\" title=\"").
append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getServiceKey())).
append("\">").
append(Printers.ListNamesToString(serviceDetail.getBusinessService().get(i).getName())).
append("</a>").
append("</td><td>").
append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getBindingKey())).
append("</td><td>");
if (serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint() != null) {
sb.append(StringEscapeUtils.escapeHtml(serviceDetail.getBusinessService().get(i).getBindingTemplates().getBindingTemplate().get(k).getAccessPoint().getValue()));
}
sb.append("</td></tr>");
}
}
}
sb.append("</table>");
ret.renderedHtml = sb.toString();
return ret;
} catch (Exception ex) {
ret.renderedHtml = HandleException(ex);
}
return ret;
}
/**
* Get a custody transfer token for giving away control of the specified
* business or tmodel keys
*
* authInfo: This OPTIONAL argument is an element that contains an
* authentication token. Authentication tokens are obtained using the
* get_authToken API call or through some other means external to this
* specification, and represent the identity of the publisher at a UDDI
* node.
*
* · transferToken: This is a known transferToken obtained by a
* publisher at the node where the get_transferToken API was invoked.
*
* · keyBag: One or more uddiKeys associated either with businessEntity
* or tModel entities owned by the publisher that were to be transferred
* to some other publisher and/or node in the registry as the result of
* invocation of get_transferToken. At least one businessKey or
* tModelKey must be provided in a keyBag.
*
* @param keys
* @param nodeid
* @param outExpires
* @param outToken
* @return status
*/
public String GetCustodyTransferToken(org.uddi.custody_v3.KeyBag keys, Holder<String> nodeid, Holder<XMLGregorianCalendar> outExpires, Holder<byte[]> outToken) {
// org.uddi.custody_v3.KeyBag kb = new org.uddi.custody_v3.KeyBag();
// kb.getKey().addAll(keys);
try {
try {
custody.getTransferToken(GetToken(), keys, nodeid, outExpires, outToken);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
custody.getTransferToken(GetToken(), keys, nodeid, outExpires, outToken);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return null;//"Success";
}
/**
*
* @param tokenxml
* @return The discard_transferToken API is a client API used to discard
* a transferToken obtained through the get_transferToken API at the
* same node. This API accepts either a transferToken or a keyBag as
* parameters to remove the permission to transfer data associated with
* a particular transferToken. If a keyBag is provided, all tokens
* corresponding to the keys in the keyBag will be discarded and will no
* longer be valid for custody or ownership transfer after the
* discard_transferToken is processed, irrespective of whether the keys
* match any known business or tmodelKey values. In the event that the
* keyBag represents a subset of the keyBag for one or more
* transferToken elements, the transferToken is discarded and will no
* longer be valid for transferring any entity. If the token passed in
* the transferToken argument does not match an existing token known to
* the system, no action is taken and success is reported. Keys in the
* keyBag argument that do not have a corresponding token are ignored.
*/
public String DiscardToken(String tokenxml) {
DiscardTransferToken r = new DiscardTransferToken();
r.setAuthInfo(GetToken());
r.setTransferToken((TransferToken) XmlUtils.unmarshal(new StringReader(tokenxml), TransferToken.class));
try {
try {
custody.discardTransferToken(r);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
r.setAuthInfo(GetToken());
custody.discardTransferToken(r);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return null;//"Success";
}
/**
* Accepts a transfer token and transfers the entities.
*
* @param tokenXML
* @param keyBagXML
* @return status msg
*/
public String AcceptCustodyTranferToken(String tokenXML, String keyBagXML) {
try {
TransferEntities te = new TransferEntities();
te.setAuthInfo(GetToken());
StringReader sr = new StringReader(tokenXML.trim());
te.setTransferToken((TransferToken) XmlUtils.unmarshal(sr, TransferToken.class));
sr = new StringReader(keyBagXML.trim());
te.setKeyBag((org.uddi.custody_v3.KeyBag) XmlUtils.unmarshal(sr, org.uddi.custody_v3.KeyBag.class));
try {
custody.transferEntities(te);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
te.setAuthInfo(GetToken());
custody.transferEntities(te);
} else {
throw ex;
}
}
} catch (Exception ex) {
return HandleException(ex);
}
return null;//"Success";
}
/**
* returns a subscription by id, since UDDI does not provide this
* function, it simply gets all of them for the current user then
* filters out the requested item
*
* @param id
* @return null if not found
*/
public Subscription GetSubscriptionDetails(String id) {
if (id == null) {
return null;
}
List<Subscription> GetSubscriptions = this.GetSubscriptions();
if (GetSubscriptions == null) {
return null;
}
for (int i = 0; i < GetSubscriptions.size(); i++) {
if (GetSubscriptions.get(i).getSubscriptionKey() != null && GetSubscriptions.get(i).getSubscriptionKey().equalsIgnoreCase(id)) {
return GetSubscriptions.get(i);
}
}
return null;
}
/**
*
* @param request
* @param service
* @param method
* @return xml response
* @see UDDIRequestsAsXML
*/
public String SendAdvancedQuery(Object request, String service, String method) {
if (service.equalsIgnoreCase(UDDIRequestsAsXML.inquiry)) {
return SendAdvancedQueryInquiry(method, request);
}
if (service.equalsIgnoreCase(UDDIRequestsAsXML.publish)) {
return SendAdvancedQueryPublish(method, request);
}
if (service.equalsIgnoreCase(UDDIRequestsAsXML.custody)) {
return SendAdvancedQueryCustody(method, request);
}
if (service.equalsIgnoreCase(UDDIRequestsAsXML.subscription)) {
return SendAdvancedQuerySubscription(method, request);
}
return "Unknown error";
}
private String SendAdvancedQueryInquiry(String method, Object request) {
Object response = null;
try {
if (method.equalsIgnoreCase("findBinding")) {
((FindBinding) request).setAuthInfo(GetToken());
try {
response = inquiry.findBinding((FindBinding) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((FindBinding) request).setAuthInfo(GetToken());
response = inquiry.findBinding((FindBinding) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("findBusiness")) {
((FindBusiness) request).setAuthInfo(GetToken());
try {
response = inquiry.findBusiness((FindBusiness) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((FindBusiness) request).setAuthInfo(GetToken());
response = inquiry.findBusiness((FindBusiness) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("findService")) {
((FindService) request).setAuthInfo(GetToken());
try {
response = inquiry.findService((FindService) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((FindService) request).setAuthInfo(GetToken());
response = inquiry.findService((FindService) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("findRelatedBusines")) {
((FindRelatedBusinesses) request).setAuthInfo(GetToken());
try {
response = inquiry.findRelatedBusinesses((FindRelatedBusinesses) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((FindRelatedBusinesses) request).setAuthInfo(GetToken());
response = inquiry.findRelatedBusinesses((FindRelatedBusinesses) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("findTModel")) {
((FindTModel) request).setAuthInfo(GetToken());
try {
response = inquiry.findTModel((FindTModel) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((FindTModel) request).setAuthInfo(GetToken());
response = inquiry.findTModel((FindTModel) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getBindingDetail")) {
((GetBindingDetail) request).setAuthInfo(GetToken());
try {
response = inquiry.getBindingDetail((GetBindingDetail) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((GetBindingDetail) request).setAuthInfo(GetToken());
response = inquiry.getBindingDetail((GetBindingDetail) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getBusinessDetail")) {
((GetBusinessDetail) request).setAuthInfo(GetToken());
try {
response = inquiry.getBusinessDetail((GetBusinessDetail) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((GetBusinessDetail) request).setAuthInfo(GetToken());
response = inquiry.getBusinessDetail((GetBusinessDetail) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getServiceDetail")) {
((GetServiceDetail) request).setAuthInfo(GetToken());
try {
response = inquiry.getServiceDetail((GetServiceDetail) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((GetServiceDetail) request).setAuthInfo(GetToken());
response = inquiry.getServiceDetail((GetServiceDetail) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getOperationalInfo")) {
((GetOperationalInfo) request).setAuthInfo(GetToken());
try {
response = inquiry.getOperationalInfo((GetOperationalInfo) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
response = inquiry.getOperationalInfo((GetOperationalInfo) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getTModelDetail")) {
((GetTModelDetail) request).setAuthInfo(GetToken());
try {
response = inquiry.getTModelDetail((GetTModelDetail) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
response = inquiry.getTModelDetail((GetTModelDetail) request);
} else {
throw ex;
}
}
}
if (response == null) {
return ResourceLoader.GetResource(session, "actions.success");
}
StringWriter sw = new StringWriter();
JAXB.marshal(response, sw);
return sw.toString();
} catch (Exception ex) {
return HandleException(ex);
}
}
private String SendAdvancedQueryPublish(String method, Object request) {
Object response = null;
try {
if (method.equalsIgnoreCase("addPublisherAssertions")) {
((AddPublisherAssertions) request).setAuthInfo(GetToken());
try {
publish.addPublisherAssertions((AddPublisherAssertions) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((AddPublisherAssertions) request).setAuthInfo(GetToken());
publish.addPublisherAssertions((AddPublisherAssertions) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("deleteBinding")) {
try {
((DeleteBinding) request).setAuthInfo(GetToken());
publish.deleteBinding((DeleteBinding) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((DeleteBinding) request).setAuthInfo(GetToken());
publish.deleteBinding((DeleteBinding) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("deleteBusiness")) {
try {
((DeleteBusiness) request).setAuthInfo(GetToken());
publish.deleteBusiness((DeleteBusiness) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((DeleteBusiness) request).setAuthInfo(GetToken());
publish.deleteBusiness((DeleteBusiness) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("deletePublisherAssertions")) {
try {
((DeletePublisherAssertions) request).setAuthInfo(GetToken());
publish.deletePublisherAssertions((DeletePublisherAssertions) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((DeleteBusiness) request).setAuthInfo(GetToken());
publish.deletePublisherAssertions((DeletePublisherAssertions) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("deleteService")) {
try {
((DeleteService) request).setAuthInfo(GetToken());
publish.deleteService((DeleteService) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((DeleteBusiness) request).setAuthInfo(GetToken());
publish.deleteService((DeleteService) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("deleteTModel")) {
try {
((DeleteTModel) request).setAuthInfo(GetToken());
publish.deleteTModel((DeleteTModel) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((DeleteTModel) request).setAuthInfo(GetToken());
publish.deleteTModel((DeleteTModel) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getAssertionStatusReport")) {
CompletionStatus stat = ((GetAssertionStatusReport) request).getCompletionStatus();
try {
response = publish.getAssertionStatusReport(GetToken(), stat);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
response = publish.getAssertionStatusReport(GetToken(), stat);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getPublisherAssertions")) {
try {
response = publish.getPublisherAssertions(GetToken());
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
response = publish.getPublisherAssertions(GetToken());
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getRegisteredInfo")) {
try {
((GetRegisteredInfo) request).setAuthInfo(GetToken());
response = publish.getRegisteredInfo((GetRegisteredInfo) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((GetRegisteredInfo) request).setAuthInfo(GetToken());
publish.getRegisteredInfo((GetRegisteredInfo) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("saveBinding")) {
try {
((SaveBinding) request).setAuthInfo(GetToken());
response = publish.saveBinding((SaveBinding) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((SaveBinding) request).setAuthInfo(GetToken());
publish.saveBinding((SaveBinding) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("saveBusiness")) {
try {
((SaveBusiness) request).setAuthInfo(GetToken());
response = publish.saveBusiness((SaveBusiness) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((SaveBusiness) request).setAuthInfo(GetToken());
publish.saveBusiness((SaveBusiness) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("saveTModel")) {
try {
((SaveTModel) request).setAuthInfo(GetToken());
response = publish.saveTModel((SaveTModel) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((SaveTModel) request).setAuthInfo(GetToken());
publish.saveTModel((SaveTModel) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("saveService")) {
try {
((SaveService) request).setAuthInfo(GetToken());
response = publish.saveService((SaveService) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((SaveService) request).setAuthInfo(GetToken());
publish.saveService((SaveService) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("setPublisherAssertions")) {
Holder<List<PublisherAssertion>> list = new Holder<List<PublisherAssertion>>();
list.value = ((SetPublisherAssertions) request).getPublisherAssertion();
try {
publish.setPublisherAssertions(GetToken(), list);
response = list.value;
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((SetPublisherAssertions) request).setAuthInfo(GetToken());
publish.setPublisherAssertions(GetToken(), list);
response = list.value;
} else {
throw ex;
}
}
}
if (response == null) {
return "The operation completed without error";
}
StringWriter sw = new StringWriter();
JAXB.marshal(response, sw);
return sw.toString();
} catch (Exception ex) {
return HandleException(ex);
}
}
private String SendAdvancedQueryCustody(String method, Object request) {
Object response = null;
try {
if (method.equalsIgnoreCase("discardTransferToken")) {
try {
((DiscardTransferToken) request).setAuthInfo(GetToken());
custody.discardTransferToken((DiscardTransferToken) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((DiscardTransferToken) request).setAuthInfo(GetToken());
custody.discardTransferToken((DiscardTransferToken) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getTransferToken")) {
GetTransferToken r = ((GetTransferToken) request);
TransferToken tt = new TransferToken();
Holder<String> node = new Holder<String>();
Holder<XMLGregorianCalendar> xcal = new Holder<XMLGregorianCalendar>();
Holder<byte[]> ttoken = new Holder<byte[]>();
try {
custody.getTransferToken(GetToken(), r.getKeyBag(), node, xcal, ttoken);
tt.setNodeID(node.value);
tt.setOpaqueToken(ttoken.value);
tt.setExpirationTime(xcal.value);
response = tt;
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
custody.getTransferToken(GetToken(), r.getKeyBag(), node, xcal, ttoken);
tt.setNodeID(node.value);
tt.setOpaqueToken(ttoken.value);
tt.setExpirationTime(xcal.value);
response = tt;
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("transferEntities")) {
try {
((TransferEntities) request).setAuthInfo(GetToken());
custody.transferEntities((TransferEntities) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((TransferEntities) request).setAuthInfo(GetToken());
custody.transferEntities((TransferEntities) request);
} else {
throw ex;
}
}
}
if (response == null) {
return "The operation completed without error";
}
StringWriter sw = new StringWriter();
JAXB.marshal(response, sw);
return sw.toString();
} catch (Exception ex) {
return HandleException(ex);
}
}
private String SendAdvancedQuerySubscription(String method, Object request) {
Object response = null;
try {
if (method.equalsIgnoreCase("deleteSubscription")) {
try {
((DeleteSubscription) request).setAuthInfo(GetToken());
subscription.deleteSubscription((DeleteSubscription) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((DeleteSubscription) request).setAuthInfo(GetToken());
subscription.deleteSubscription((DeleteSubscription) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getSubscriptionResults")) {
try {
((GetSubscriptionResults) request).setAuthInfo(GetToken());
response = subscription.getSubscriptionResults((GetSubscriptionResults) request);
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
((GetSubscriptionResults) request).setAuthInfo(GetToken());
subscription.getSubscriptionResults((GetSubscriptionResults) request);
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("getSubscriptions")) {
try {
response = subscription.getSubscriptions(GetToken());
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
response = subscription.getSubscriptions(GetToken());
} else {
throw ex;
}
}
}
if (method.equalsIgnoreCase("saveSubscription")) {
SaveSubscription ss = (SaveSubscription) request;
Holder<List<Subscription>> h = new Holder<List<Subscription>>(ss.getSubscription());
try {
subscription.saveSubscription(GetToken(), h);
response = h.value;
} catch (Exception ex) {
if (isExceptionExpiration(ex)) {
token = null;
subscription.saveSubscription(GetToken(), h);
response = h.value;
} else {
throw ex;
}
}
}
if (response == null) {
return "The operation completed without error";
}
StringWriter sw = new StringWriter();
JAXB.marshal(response, sw);
return sw.toString();
} catch (Exception ex) {
return HandleException(ex);
}
}
/**
* returns true if automatic logouts are configured
*
* @return true/false
*/
public boolean isAutoLogoutEnabled() {
if (clientConfig == null) {
EnsureConfig();
}
String val = clientConfig.getConfiguration().getString(PROP_AUTO_LOGOUT);
if (val == null) {
return false;
}
try {
return Boolean.parseBoolean(val);
} catch (Exception ex) {
log.warn("unable to parse the value for " + PROP_AUTO_LOGOUT + " in uddi.xml, defaulting to false", ex);
}
return false;
}
/**
* defaults to 15 minutes if not defined
*
* @return duration
*/
public long GetAutoLogoutDuration() {
try {
String val = clientConfig.getConfiguration().getString(PROP_AUTO_LOGOUT_TIMER);
if (val == null) {
return 15 * 60 * 1000;
}
return Long.parseLong(val);
} catch (Throwable ex) {
log.warn("unable to parse the value for " + PROP_AUTO_LOGOUT_TIMER + " in uddi.xml, defaulting to 15 minutes", ex);
}
return 15 * 60 * 1000;
}
/**
* If false, the configuration page will be available from anywhere. If
* true, it will only be accessible from the server hosting juddi-gui.
* if not defined, the result is true.
*
* @return true/false
*/
public boolean isAdminLocalhostOnly() {
try{
return clientConfig.getConfiguration().getBoolean(PROP_ADMIN_LOCALHOST_ONLY, true);
}catch (Throwable ex) {
log.warn("unable to parse the value for " + PROP_ADMIN_LOCALHOST_ONLY + " in uddi.xml, defaulting to 15 minutes", ex);
}
return true;
}
public String SaveBindingTemplate(HttpServletRequest request) {
BindingTemplate be = new BindingTemplate();
be.setServiceKey(request.getParameter(PostBackConstants.SERVICEKEY).trim());
be.setBindingKey(request.getParameter(PostBackConstants.BINDINGKEY).trim());
if (be.getBindingKey().equalsIgnoreCase(ResourceLoader.GetResource(session, "items.clicktoedit"))) {
be.setBindingKey(null);
}
be.getDescription().addAll(Builders.BuildDescription(Builders.MapFilter(request.getParameterMap(), PostBackConstants.DESCRIPTION), PostBackConstants.DESCRIPTION, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
CategoryBag cb = new CategoryBag();
cb.getKeyedReference().addAll(Builders.BuildKeyedReference(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF), PostBackConstants.CATBAG_KEY_REF, getLocale()));
cb.getKeyedReferenceGroup().addAll(Builders.BuildKeyedReferenceGroup(Builders.MapFilter(request.getParameterMap(), PostBackConstants.CATBAG_KEY_REF_GRP), PostBackConstants.CATBAG_KEY_REF_GRP, getLocale()));
if (!cb.getKeyedReference().isEmpty() || !cb.getKeyedReferenceGroup().isEmpty()) {
be.setCategoryBag(cb);
}
Map map = request.getParameterMap();
String[] t = (String[]) map.get(PostBackConstants.HOSTINGREDIRECTOR);
if (t != null && t.length > 0) {
be.setHostingRedirector(new HostingRedirector());
be.getHostingRedirector().setBindingKey(t[0]);
}
AccessPoint ap = new AccessPoint();
t = (String[]) map.get(PostBackConstants.ACCESSPOINT_TYPE);
if (t != null && t.length > 0) {
ap.setUseType(t[0]);
}
t = (String[]) map.get(PostBackConstants.ACCESSPOINT_VALUE);
if (t != null && t.length > 0) {
ap.setValue(t[0]);
}
if (ap.getValue() != null) {
be.setAccessPoint(ap);
}
be.setTModelInstanceDetails(Builders.BuildTmodelInstanceDetails(
Builders.MapFilter(map, PostBackConstants.TMODELINSTANCE),
PostBackConstants.TMODELINSTANCE, ResourceLoader.GetResource(session, "items.clicktoedit"), getLocale()));
//JAXB.marshal(be, System.out);
return SaveBindingTemplate(be);
}
public String deleteBinding(String id) {
if (id == null || id.length() == 0) {
return ResourceLoader.GetResource(session, "errors.noinput");
}
List<String> x = new ArrayList<String>();
x.add(id.trim());
return deleteBinding(x);
}
}