juddi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From alexo...@apache.org
Subject svn commit: r1516676 - /juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/
Date Fri, 23 Aug 2013 01:39:31 GMT
Author: alexoree
Date: Fri Aug 23 01:39:31 2013
New Revision: 1516676

URL: http://svn.apache.org/r1516676
Log:
JUDDI-636 adding a subscription callback API, forgot to add the classes to svn

Added:
    juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/
    juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ISubscriptionCallback.java
    juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/RegistrationAbortedException.java
    juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ServiceAlreadyStartedException.java
    juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/SubscriptionCallbackListener.java
    juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnableToSignException.java
    juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnexpectedResponseException.java

Added: juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ISubscriptionCallback.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ISubscriptionCallback.java?rev=1516676&view=auto
==============================================================================
--- juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ISubscriptionCallback.java
(added)
+++ juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ISubscriptionCallback.java
Fri Aug 23 01:39:31 2013
@@ -0,0 +1,40 @@
+/*
+ * Copyright 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.v3.client.subscription;
+
+import org.uddi.sub_v3.SubscriptionResultsList;
+
+/**
+ * This is an interface for creating asynchronous callback clientsfor the
+ * UDDI Subscription API.
+ * @since 3.2
+ * @author Alex O'Ree
+ * @see SubscriptionCallbackListener
+ */
+public interface ISubscriptionCallback {
+
+    /**
+     * Called when a UDDI server notifies us that something has changed. 
+     * Implementations should never block.
+     * @param body 
+     */
+    public void HandleCallback(SubscriptionResultsList body);
+
+    /**
+     * Called when the callback endpoint is stopped
+     */
+    public void NotifyEndpointStopped();
+}

Added: juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/RegistrationAbortedException.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/RegistrationAbortedException.java?rev=1516676&view=auto
==============================================================================
--- juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/RegistrationAbortedException.java
(added)
+++ juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/RegistrationAbortedException.java
Fri Aug 23 01:39:31 2013
@@ -0,0 +1,32 @@
+/*
+ * Copyright 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.v3.client.subscription;
+
+/**
+ * throw when a particular digital signature situation occurs
+ * @author Alex O'Ree
+ *  @since 3.2
+ */
+public class RegistrationAbortedException extends Exception{
+    private static final long serialVersionUID = 1L;
+
+    public RegistrationAbortedException(String message) {
+        super(message);
+        
+    }
+
+}

Added: juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ServiceAlreadyStartedException.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ServiceAlreadyStartedException.java?rev=1516676&view=auto
==============================================================================
--- juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ServiceAlreadyStartedException.java
(added)
+++ juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/ServiceAlreadyStartedException.java
Fri Aug 23 01:39:31 2013
@@ -0,0 +1,27 @@
+/*
+ * Copyright 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.v3.client.subscription;
+
+/**
+ * throw when attempting to start the SubscriptionCallbackListener service more than once
+ * @author Alex O'Ree
+ *  @since 3.2
+ */
+public class ServiceAlreadyStartedException extends Exception{
+    private static final long serialVersionUID = 1L;
+
+}

Added: juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/SubscriptionCallbackListener.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/SubscriptionCallbackListener.java?rev=1516676&view=auto
==============================================================================
--- juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/SubscriptionCallbackListener.java
(added)
+++ juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/SubscriptionCallbackListener.java
Fri Aug 23 01:39:31 2013
@@ -0,0 +1,447 @@
+/*
+ * Copyright 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.v3.client.subscription;
+
+import java.net.UnknownHostException;
+import java.rmi.RemoteException;
+import java.rmi.UnexpectedException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.jws.WebService;
+import javax.xml.bind.annotation.XmlSeeAlso;
+import javax.xml.ws.Endpoint;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.juddi.v3.client.config.UDDIClerk;
+import org.apache.juddi.v3.client.config.UDDIClient;
+import org.apache.juddi.v3.client.crypto.DigSigUtil;
+import org.apache.juddi.v3.client.transport.Transport;
+import org.apache.juddi.v3.client.transport.TransportException;
+import org.uddi.api_v3.AccessPoint;
+import org.uddi.api_v3.BindingDetail;
+import org.uddi.api_v3.BindingTemplate;
+import org.uddi.api_v3.BusinessDetail;
+import org.uddi.api_v3.DeleteBinding;
+import org.uddi.api_v3.DispositionReport;
+import org.uddi.api_v3.GetBindingDetail;
+import org.uddi.api_v3.GetBusinessDetail;
+import org.uddi.api_v3.GetServiceDetail;
+import org.uddi.api_v3.Result;
+import org.uddi.api_v3.SaveBinding;
+import org.uddi.api_v3.ServiceDetail;
+import org.uddi.api_v3.TModelInstanceDetails;
+import org.uddi.api_v3.TModelInstanceInfo;
+import org.uddi.subr_v3.NotifySubscriptionListener;
+import org.uddi.v3_service.DispositionReportFaultMessage;
+import org.uddi.v3_service.UDDIInquiryPortType;
+import org.uddi.v3_service.UDDIPublicationPortType;
+
+/**
+ * WebService which implements the UDDI v3 SubscriptionListener API. This service will be
called by
+ * the UDDI registry when any change to a Service or BindingTemplate
+ * call in to it.
+ * <h1>Usage scenario</h1>
+ * Use this call for when you need to be notified from a UDDI server that either a UDDI entity
+ * was created, changed, or deleted via the UDDI Subscription web service. This class will

+ * start up an embedded Jetty server (built into the JRE). You can then register your code
+ * to be notified of any inbound messages received from the UDDI server asynchronously. Here's
some sample code.
+<pre>
+        UDDIClient c = new UDDIClient("META-INF/uddiclient.xml");
+        UDDIClerk clerk = c.getClerk("default");
+        TModel createKeyGenator = UDDIClerk.createKeyGenator("uddi:org.apache.juddi:test:keygenerator",
"Test domain", "en");
+        clerk.register(createKeyGenator);
+        BindingTemplate start = SubscriptionCallbackListener.start(c, "default");
+        //keep alive 
+        while(running)
+           Thread.sleep(1000);
+        SubscriptionCallbackListener.stop(c, "default", start.getBindingKey());
+</pre>
+ * @author Alex O'Ree
+ * @since 3.2
+ */
+@WebService(name = "UDDI_SubscriptionListener_PortType", targetNamespace = "urn:uddi-org:v3_service")
+@XmlSeeAlso({
+    org.uddi.custody_v3.ObjectFactory.class,
+    org.uddi.repl_v3.ObjectFactory.class,
+    org.uddi.subr_v3.ObjectFactory.class,
+    org.uddi.api_v3.ObjectFactory.class,
+    org.uddi.vscache_v3.ObjectFactory.class,
+    org.uddi.vs_v3.ObjectFactory.class,
+    org.uddi.sub_v3.ObjectFactory.class,
+    org.w3._2000._09.xmldsig_.ObjectFactory.class,
+    org.uddi.policy_v3.ObjectFactory.class,
+    org.uddi.policy_v3_instanceparms.ObjectFactory.class
+})
+public class SubscriptionCallbackListener implements org.uddi.v3_service.UDDISubscriptionListenerPortType
{
+
+ 
+    private static final Log log = LogFactory.getLog(SubscriptionCallbackListener.class);
+    private static List<ISubscriptionCallback> callbacks = new ArrayList<ISubscriptionCallback>();
+    private static SubscriptionCallbackListener instance = null;
+    private static Endpoint ep = null;
+
+    /**
+     * Starts a embedded Jetty web server (comes with the JDK) using the
+     * Endpoint API.
+     *
+     * @param endpoint this is the url that a UDDI server would use to connect
+     * to the client's subscription listener service Recommend specifying a port
+     * that is firewall friendly
+     * @param callbackBusinessService - optional. if specified, a binding
+     * template is appended to the business service and returned. The new
+     * binding template is annotated for subscription callbacks.
+     * @return null, if and only if callbackBusinessService was null, otherwise
+     * the modified callbackBusinessService is returned. Clients can then use it
+     * to continue the registration process.
+     * @throws ServiceAlreadyStartedException
+     * @throws SecurityException
+     * @see Endpoint
+     */
+    public static synchronized BindingTemplate start(UDDIClient client, String cfg_node_name,
String endpoint,
+            String keydomain, boolean autoregister, String serviceKey,
+            SignatureBehavior behavior) throws ServiceAlreadyStartedException, SecurityException,
ConfigurationException, TransportException, DispositionReportFaultMessage, RemoteException,
UnexpectedException, RegistrationAbortedException, UnableToSignException {
+
+
+        if (instance == null) {
+            instance = new SubscriptionCallbackListener();
+        }
+        if (ep == null) {
+            ep = Endpoint.publish(endpoint, instance);
+        } else {
+            if (ep.isPublished()) {
+                throw new ServiceAlreadyStartedException();
+            }
+        }
+
+
+        BindingTemplate bt = new BindingTemplate();
+        bt.setAccessPoint(new AccessPoint());
+        bt.getAccessPoint().setValue(endpoint);
+        bt.getAccessPoint().setUseType("endPoint");
+        TModelInstanceInfo instanceInfo = new TModelInstanceInfo();
+        instanceInfo.setTModelKey("uddi:uddi.org:transport:http");
+        bt.setTModelInstanceDetails(new TModelInstanceDetails());
+        bt.getTModelInstanceDetails().getTModelInstanceInfo().add(instanceInfo);
+        bt.setServiceKey(serviceKey);
+        if (keydomain.endsWith(":")) {
+            bt.setBindingKey(keydomain + GetHostname() + "_Subscription_Callback");
+        } else {
+            bt.setBindingKey(keydomain + ":" + GetHostname() + "_Subscription_Callback");
+        }
+
+        if (autoregister) {
+            bt = registerBinding(client, cfg_node_name, bt, behavior);
+        }
+
+        return bt;
+
+    }
+
+    /**
+     * Starts a subscription callback service using the juddi client config
+     * file's settings
+     *
+     * @param client
+     * @param cfg_node_name - this is the uddi/client@name
+     * @return a bindingtemplate populated with the relevant information for most UDDI servers
for asynchronous callbacks.
+     * @throws ServiceAlreadyStartedException
+     * @throws SecurityException
+     * @throws ConfigurationException
+     * @throws TransportException
+     * @throws DispositionReportFaultMessage
+     * @throws UnexpectedException
+     * @throws RemoteException
+     */
+    public static synchronized BindingTemplate start(UDDIClient client, String cfg_node_name)
throws ServiceAlreadyStartedException, SecurityException, ConfigurationException, TransportException,
DispositionReportFaultMessage, UnexpectedException, RemoteException, RegistrationAbortedException,
UnableToSignException {
+
+        boolean reg = (client.getClientConfig().getConfiguration().getBoolean(PROPERTY_AUTOREG_BT,
false));
+        String endpoint = client.getClientConfig().getConfiguration().getString(PROPERTY_LISTENURL);
+        String kd = client.getClientConfig().getConfiguration().getString(PROPERTY_KEYDOMAIN);
+        String key = client.getClientConfig().getConfiguration().getString(PROPERTY_AUTOREG_SERVICE_KEY);
+        String sbs = client.getClientConfig().getConfiguration().getString(PROPERTY_SIGNATURE_BEHAVIOR);
+        SignatureBehavior sb = SignatureBehavior.DoNothing;
+        sb = SignatureBehavior.valueOf(sbs);
+
+        return start(client, cfg_node_name, endpoint, kd, reg, key, sb);
+    }
+
+    /**
+     * Registers an implementation of ISubscriptionCallback for subscription
+     * callbacks from a UDDI server. 
+     *
+     * @param callback
+     */
+    public static synchronized void registerCallback(ISubscriptionCallback callback) {
+        if (!callbacks.contains(callback)) {
+            callbacks.add(callback);
+        }
+    }
+
+    /**
+     * unregisters a ISubscriptionCallback for callbacks
+     *
+     * @param callback
+     */
+    public static synchronized void unRegisterCallback(ISubscriptionCallback callback) {
+        if (callbacks.contains(callback)) {
+            callbacks.remove(callback);
+        }
+    }
+    public static final String PROPERTY_LISTENURL = "client.subscriptionCallbacks.listenUrl";
+    public static final String PROPERTY_KEYDOMAIN = "client.subscriptionCallbacks.keyDomain";
+    public static final String PROPERTY_AUTOREG_BT = "client.subscriptionCallbacks.autoRegisterBindingTemplate";
+    public static final String PROPERTY_AUTOREG_SERVICE_KEY = "client.subscriptionCallbacks.autoRegisterBusinessServiceKey";
+    public static final String PROPERTY_SIGNATURE_BEHAVIOR = "client.subscriptionCallbacks.signatureBehavior";
+
+    /**
+     * return true if and only if the binding exists and is signed
+     *
+     * @param bindingKey
+     * @param uddiInquiryService
+     * @param token
+     * @param behavior
+     * @return
+     */
+    private static boolean CheckExistingBindingForSignature(String bindingKey, UDDIInquiryPortType
uddiInquiryService, String token, SignatureBehavior behavior) {
+        GetBindingDetail gbd = new GetBindingDetail();
+        gbd.setAuthInfo(token);
+        gbd.getBindingKey().add(bindingKey);
+        try {
+            BindingDetail bindingDetail = uddiInquiryService.getBindingDetail(gbd);
+            if (bindingDetail != null
+                    && !bindingDetail.getBindingTemplate().isEmpty()
+                    && !bindingDetail.getBindingTemplate().get(0).getSignature().isEmpty())
{
+                log.info("the binding template with key=" + bindingKey + " exists and is
digitally signed");
+            }
+            return true;
+        } catch (Exception ex) {
+            log.debug("Error caught checking for the existence of and if a signature is present
for binding key " + bindingKey + " this may be ignorable", ex);
+        }
+        return false;
+    }
+
+    private static boolean CheckServiceAndParentForSignature(String serviceKey, UDDIInquiryPortType
uddiInquiryService, String token) throws UnexpectedResponseException {
+        GetServiceDetail gsd = new GetServiceDetail();
+        gsd.setAuthInfo(token);
+        gsd.getServiceKey().add(serviceKey);
+        String bizkey = null;
+        try {
+            ServiceDetail serviceDetail = uddiInquiryService.getServiceDetail(gsd);
+            if (serviceDetail != null) {
+                if (!serviceDetail.getBusinessService().isEmpty()) {
+                    bizkey = serviceDetail.getBusinessService().get(0).getBusinessKey();
+                    if (!serviceDetail.getBusinessService().get(0).getSignature().isEmpty())
{
+                        log.info("the service with key=" + serviceKey + " exists and is digitally
signed");
+                        return true;
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            log.info("Error caught checking for the existence of and if a signature is present
for service key " + serviceKey, ex);
+            throw new UnexpectedResponseException("Error caught checking for the existence
of and if a signature is present for service key " + serviceKey, ex);
+        }
+        if (bizkey == null) {
+            throw new UnexpectedResponseException("The service with key " + serviceKey +
" parent's business key could not be determined. This is unexpected");
+        }
+        GetBusinessDetail gbd = new GetBusinessDetail();
+        gbd.setAuthInfo(token);
+        gbd.getBusinessKey().add(bizkey);
+        try {
+            BusinessDetail businessDetail = uddiInquiryService.getBusinessDetail(gbd);
+            if (businessDetail != null && !businessDetail.getBusinessEntity().isEmpty())
{
+                if (!businessDetail.getBusinessEntity().get(0).getSignature().isEmpty())
{
+                    log.info("the business with key=" + bizkey + " exists and is digitally
signed");
+                    return true;
+                }
+            }
+        } catch (Exception ex) {
+            log.info("Error caught checking for the existence of and if a signature is present
for business key " + bizkey, ex);
+            throw new UnexpectedResponseException("Error caught checking for the existence
of and if a signature is present for business key " + bizkey, ex);
+        }
+        return false;
+    }
+
+ 
+
+    /**
+     * This defines how the automatic subscription binding template is suppose
+     * to behave
+     */
+    public enum SignatureBehavior {
+
+        /**
+         * Aborts the save request if either the entity exists and is already
+         * signed, or if any parent uddi element is signed
+         */
+        AbortIfSigned,
+        /**
+         * Signs this element. Warning: It may cause signatures of parent
+         * elements to become invalid. If unable to sign, an exception will be
+         * thrown
+         */
+        SignAlways,
+        /**
+         * Signs this element, but only if parents are not signed. If unable to
+         * sign, an exception will be thrown
+         */
+        SignOnlyIfParentIsntSigned,
+        /**
+         * Do nothing, don't sign it and don't check if a parent item is signed
+         * or not.
+         */
+        DoNothing
+    }
+
+    /**
+     * Registers a UDDI binding template that represents the subscription
+     * callback endpoint
+     *
+     * @param client
+     * @param cfg_node_name
+     * @param bt - Binding Template
+     * @param behavior
+     * @return
+     * @throws ServiceAlreadyStartedException
+     * @throws SecurityException
+     * @throws ConfigurationException
+     * @throws TransportException
+     * @throws DispositionReportFaultMessage
+     * @throws RemoteException
+     * @throws UnexpectedException
+     * @throws RegistrationAbortedException
+     * @throws UnableToSignException
+     */
+    public static BindingTemplate registerBinding(UDDIClient client, String cfg_node_name,
BindingTemplate bt, SignatureBehavior behavior) throws ServiceAlreadyStartedException, SecurityException,
ConfigurationException, TransportException, DispositionReportFaultMessage, RemoteException,
UnexpectedException, RegistrationAbortedException, UnableToSignException {
+
+        UDDIClerk clerk = client.getClerk(cfg_node_name);
+        Transport tp = client.getTransport(cfg_node_name);
+        UDDIInquiryPortType uddiInquiryService = tp.getUDDIInquiryService();
+        UDDIPublicationPortType uddiPublishService = tp.getUDDIPublishService();
+
+
+        String token = clerk.getAuthToken(clerk.getUDDINode().getSecurityUrl());
+
+        switch (behavior) {
+            case AbortIfSigned:
+                if (CheckExistingBindingForSignature(bt.getBindingKey(), uddiInquiryService,
token, behavior)) {
+                    throw new RegistrationAbortedException("Aborting, Either the item exists
and is signed");
+                }
+                if (CheckServiceAndParentForSignature(bt.getServiceKey(), uddiInquiryService,
token)) {
+                    throw new RegistrationAbortedException("Aborting, Either the service
or busness is signed");
+                }
+                break;
+            case DoNothing:
+                break;
+            case SignAlways:
+                try {
+                    DigSigUtil ds = new DigSigUtil(client.getClientConfig().getDigitalSignatureConfiguration());
+                    bt = ds.signUddiEntity(bt);
+                } catch (Exception ex) {
+                    log.error("Unable to sign", ex);
+                    throw new UnableToSignException(ex);
+                }
+
+                break;
+            case SignOnlyIfParentIsntSigned:
+                if (!CheckServiceAndParentForSignature(bt.getServiceKey(), uddiInquiryService,
token)) {
+                    try {
+                        DigSigUtil ds = new DigSigUtil(client.getClientConfig().getDigitalSignatureConfiguration());
+                        bt = ds.signUddiEntity(bt);
+                    } catch (Exception ex) {
+                        log.error("Unable to sign", ex);
+                        throw new UnableToSignException(ex);
+                    }
+                }
+                break;
+        }
+        SaveBinding sb = new SaveBinding();
+        sb.setAuthInfo(token);
+        sb.getBindingTemplate().add(bt);
+
+        BindingDetail saveBinding = uddiPublishService.saveBinding(sb);
+        if (saveBinding.getBindingTemplate().isEmpty() || saveBinding.getBindingTemplate().size()
> 1) {
+            throw new UnexpectedResponseException("The number of binding templates returned
was unexpected, count=" + saveBinding.getBindingTemplate().size());
+        }
+        return saveBinding.getBindingTemplate().get(0);
+    }
+
+    /**
+     * This effectively stops the endpoint address and notifies all
+     * ISubscriptionCallback clients that the endpoint as been stopped. After it
+     * has been stopped, call ISubscriptionCallback are removed from the
+     * callback list.
+     * If unable to remove an auto registered binding template, no exception will be thrown
+     */
+    public static synchronized void stop(UDDIClient client, String cfg_node_name, String
bindingKey) throws ConfigurationException {
+        //stop the service
+        if (ep != null && ep.isPublished()) {
+            log.warn("Stopping jUDDI Subscription callback endpoint");
+            ep.stop();
+            ep = null;
+        }
+        if (callbacks != null) {
+            log.info("Notifying all subscribing classes, count=" + callbacks.size());
+            for (int i = 0; i < callbacks.size(); i++) {
+                callbacks.get(i).NotifyEndpointStopped();
+            }
+            callbacks.clear();
+        }
+
+        if (client.getClientConfig().getConfiguration().getBoolean(PROPERTY_AUTOREG_BT, false)
&& bindingKey != null) {
+            log.info("Attempting to unregister the binding");
+            try {
+                UDDIClerk clerk = client.getClerk(cfg_node_name);
+                Transport tp = client.getTransport(cfg_node_name);
+                String token = clerk.getAuthToken(clerk.getUDDINode().getSecurityUrl());
+                UDDIPublicationPortType uddiPublishService = tp.getUDDIPublishService();
+                DeleteBinding db = new DeleteBinding();
+                db.setAuthInfo(token);
+                db.getBindingKey().add(bindingKey);
+                uddiPublishService.deleteBinding(db);
+            } catch (Exception ex) {
+                log.error("Unable to unregister binding " + bindingKey, ex);
+            }
+        }
+
+
+        //TODO optionally unregister the binding template
+        //delete binding templates matching this endpoint?
+        //or maintain a list of binding templates that i've registered
+        //TODO optionally kill the subscription
+        //get all subscriptions from the uddi node, 
+        //loop through and deduce which ones are pointed at this endpoint
+        //then remove them
+    }
+
+    private static String GetHostname() {
+        try {
+            return java.net.InetAddress.getLocalHost().getHostName();
+        } catch (UnknownHostException ex) {
+            return "HOST_UNKNOWN";
+        }
+    }
+
+    @Override
+    public DispositionReport notifySubscriptionListener(NotifySubscriptionListener body)
throws DispositionReportFaultMessage, RemoteException {
+        for (int i = 0; i < callbacks.size(); i++) {
+            callbacks.get(i).HandleCallback(body.getSubscriptionResultsList());
+        }
+        DispositionReport r = new DispositionReport();
+        r.getResult().add(new Result());
+        return r;
+    }
+}

Added: juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnableToSignException.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnableToSignException.java?rev=1516676&view=auto
==============================================================================
--- juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnableToSignException.java
(added)
+++ juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnableToSignException.java
Fri Aug 23 01:39:31 2013
@@ -0,0 +1,32 @@
+/*
+ * Copyright 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.v3.client.subscription;
+
+/**
+ * Thrown when the SubscriptionCallbackListener is configured to automatically signed
+ * UDDI entities and cannot, usually due to configuration
+ * @author Alex O'Ree
+ * @since 3.2
+ */
+public class UnableToSignException extends Exception {
+    private static final long serialVersionUID = 1L;
+
+    public UnableToSignException(Exception ex) {
+        super(ex);
+    }
+
+}

Added: juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnexpectedResponseException.java
URL: http://svn.apache.org/viewvc/juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnexpectedResponseException.java?rev=1516676&view=auto
==============================================================================
--- juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnexpectedResponseException.java
(added)
+++ juddi/trunk/juddi-client/src/main/java/org/apache/juddi/v3/client/subscription/UnexpectedResponseException.java
Fri Aug 23 01:39:31 2013
@@ -0,0 +1,34 @@
+/*
+ * Copyright 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.v3.client.subscription;
+
+/**
+ *
+ * @author Alex O'Ree
+ * @since 3.2
+ */
+public class UnexpectedResponseException extends RuntimeException {
+
+    private static final long serialVersionUID = 1L;
+
+    public UnexpectedResponseException(String message) {
+        super(message);
+    }
+
+    UnexpectedResponseException(String message, Exception ex) {
+        super(message, ex);
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org


Mime
View raw message