1 17 package org.apache.servicemix.wsn; 18 19 import java.util.Iterator ; 20 import java.util.Map ; 21 import java.util.concurrent.ConcurrentHashMap ; 22 23 import javax.jws.WebMethod; 24 import javax.jws.WebParam; 25 import javax.jws.WebResult; 26 import javax.jws.WebService; 27 28 import org.apache.activemq.util.IdGenerator; 29 import org.apache.commons.logging.Log; 30 import org.apache.commons.logging.LogFactory; 31 import org.apache.servicemix.jbi.util.DOMUtil; 32 import org.apache.servicemix.wsn.jaxws.CreatePullPoint; 33 import org.apache.servicemix.wsn.jaxws.UnableToCreatePullPointFault; 34 import org.apache.servicemix.wsn.jaxws.UnableToDestroyPullPointFault; 35 import org.oasis_open.docs.wsn.b_2.CreatePullPointResponse; 36 import org.oasis_open.docs.wsn.b_2.UnableToCreatePullPointFaultType; 37 import org.w3c.dom.Element ; 38 39 @WebService(endpointInterface = "org.apache.servicemix.wsn.jaxws.CreatePullPoint") 40 public abstract class AbstractCreatePullPoint extends AbstractEndpoint implements CreatePullPoint { 41 42 private static Log log = LogFactory.getLog(AbstractCreatePullPoint.class); 43 44 private IdGenerator idGenerator; 45 46 private Map <String , AbstractPullPoint> pullPoints; 47 48 public AbstractCreatePullPoint(String name) { 49 super(name); 50 idGenerator = new IdGenerator(); 51 pullPoints = new ConcurrentHashMap <String , AbstractPullPoint>(); 52 } 53 54 public void init() throws Exception { 55 register(); 56 } 57 58 @Override 59 protected String createAddress() { 60 return "http://servicemix.org/wsnotification/CreatePullPoint/" + getName(); 61 } 62 63 @WebMethod(operationName = "CreatePullPoint") 64 @WebResult(name = "CreatePullPointResponse", targetNamespace = "http://docs.oasis-open.org/wsn/b-2", partName = "CreatePullPointResponse") 65 public CreatePullPointResponse createPullPoint( 66 @WebParam(name = "CreatePullPoint", targetNamespace = "http://docs.oasis-open.org/wsn/b-2", partName = "CreatePullPointRequest") 67 org.oasis_open.docs.wsn.b_2.CreatePullPoint createPullPointRequest) 68 throws UnableToCreatePullPointFault { 69 70 log.debug("CreatePullEndpoint"); 71 return handleCreatePullPoint(createPullPointRequest, null); 72 } 73 74 public CreatePullPointResponse handleCreatePullPoint(org.oasis_open.docs.wsn.b_2.CreatePullPoint createPullPointRequest, EndpointManager manager) 75 throws UnableToCreatePullPointFault { 76 AbstractPullPoint pullPoint = null; 77 boolean success = false; 78 try { 79 pullPoint = createPullPoint(idGenerator.generateSanitizedId()); 80 for (Iterator it = createPullPointRequest.getAny().iterator(); it.hasNext();) { 81 Element el = (Element ) it.next(); 82 if ("address".equals(el.getLocalName()) 83 && "http://servicemix.apache.org/wsn2005/1.0".equals(el.getNamespaceURI())) { 84 String address = DOMUtil.getElementText(el).trim(); 85 pullPoint.setAddress(address); 86 } 87 } 88 pullPoint.setCreatePullPoint(this); 89 pullPoints.put(pullPoint.getAddress(), pullPoint); 90 pullPoint.create(createPullPointRequest); 91 if (manager != null) { 92 pullPoint.setManager(manager); 93 } 94 pullPoint.register(); 95 CreatePullPointResponse response = new CreatePullPointResponse(); 96 response.setPullPoint(createEndpointReference(pullPoint.getAddress())); 97 success = true; 98 return response; 99 } catch (EndpointRegistrationException e) { 100 UnableToCreatePullPointFaultType fault = new UnableToCreatePullPointFaultType(); 101 throw new UnableToCreatePullPointFault("Unable to register new endpoint", fault, e); 102 } finally { 103 if (!success && pullPoint != null) { 104 pullPoints.remove(pullPoint.getAddress()); 105 try { 106 pullPoint.destroy(); 107 } catch (UnableToDestroyPullPointFault e) { 108 log.info("Error destroying pullPoint", e); 109 } 110 } 111 } 112 } 113 114 public void destroyPullPoint(String address) throws UnableToDestroyPullPointFault { 115 AbstractPullPoint pullPoint = pullPoints.remove(address); 116 if (pullPoint != null) { 117 pullPoint.destroy(); 118 } 119 } 120 121 protected abstract AbstractPullPoint createPullPoint(String name); 122 123 } 124 | Popular Tags |