Package org.apache.servicemix.wsn.client

Source Code of org.apache.servicemix.wsn.client.NotificationBroker

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.servicemix.wsn.client;

import java.util.List;

import javax.jbi.JBIException;
import javax.jbi.component.ComponentContext;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.namespace.QName;

import org.apache.servicemix.client.ServiceMixClient;
import org.apache.servicemix.client.ServiceMixClientFacade;
import org.apache.servicemix.jbi.container.JBIContainer;
import org.apache.servicemix.jbi.resolver.ServiceNameEndpointResolver;
import org.apache.servicemix.wsn.AbstractSubscription;
import org.oasis_open.docs.wsn.b_2.FilterType;
import org.oasis_open.docs.wsn.b_2.GetCurrentMessage;
import org.oasis_open.docs.wsn.b_2.GetCurrentMessageResponse;
import org.oasis_open.docs.wsn.b_2.NotificationMessageHolderType;
import org.oasis_open.docs.wsn.b_2.Notify;
import org.oasis_open.docs.wsn.b_2.QueryExpressionType;
import org.oasis_open.docs.wsn.b_2.Subscribe;
import org.oasis_open.docs.wsn.b_2.SubscribeResponse;
import org.oasis_open.docs.wsn.b_2.TopicExpressionType;
import org.oasis_open.docs.wsn.b_2.UseRaw;
import org.oasis_open.docs.wsn.br_2.RegisterPublisher;
import org.oasis_open.docs.wsn.br_2.RegisterPublisherResponse;
import org.w3._2005._08.addressing.EndpointReferenceType;

public class NotificationBroker extends AbstractWSAClient {

  public static String WSN_URI = "http://servicemix.org/wsnotification";
  public static String WSN_SERVICE = "NotificationBroker";
 
  public static QName NOTIFICATION_BROKER = new QName(WSN_URI, WSN_SERVICE);
 
  public NotificationBroker(ComponentContext context) throws JAXBException {
    ServiceMixClientFacade client = new ServiceMixClientFacade(context);
    client.setMarshaler(new JAXBMarshaler(JAXBContext.newInstance(Subscribe.class, RegisterPublisher.class)));
    setClient(client);
    setResolver(new ServiceNameEndpointResolver(NOTIFICATION_BROKER));
  }
 
  public NotificationBroker(ComponentContext context, String brokerName) throws JAXBException {
        setClient(createJaxbClient(context));
    setEndpoint(createWSA(WSN_URI + "/" + WSN_SERVICE + "/" + brokerName));
    setResolver(resolveWSA(getEndpoint()));
  }
 
  public NotificationBroker(JBIContainer container) throws JBIException, JAXBException {
    setClient(createJaxbClient(container));
    setResolver(new ServiceNameEndpointResolver(NOTIFICATION_BROKER));
  }
 
  public NotificationBroker(JBIContainer container, String brokerName) throws JBIException, JAXBException {
        setClient(createJaxbClient(container));
    setEndpoint(createWSA(WSN_URI + "/" + WSN_SERVICE + "/" + brokerName));
    setResolver(resolveWSA(getEndpoint()));
  }
 
  public NotificationBroker(ServiceMixClient client) {
    setClient(client);
    setResolver(new ServiceNameEndpointResolver(NOTIFICATION_BROKER));
  }

  public NotificationBroker(ServiceMixClient client, String brokerName) {
    setClient(client);
    setEndpoint(createWSA(WSN_URI + "/" + WSN_SERVICE + "/" + brokerName));
    setResolver(resolveWSA(getEndpoint()));
  }

  public void notify(String topic, Object msg) throws JBIException {
    Notify notify = new Notify();
    NotificationMessageHolderType holder = new NotificationMessageHolderType();
    if (topic != null) {
      TopicExpressionType topicExp = new TopicExpressionType();
      topicExp.getContent().add(topic);
      holder.setTopic(topicExp);
    }
    holder.setMessage(new NotificationMessageHolderType.Message());
    holder.getMessage().setAny(msg);
    notify.getNotificationMessage().add(holder);
    send(notify);
  }

  public Subscription subscribe(EndpointReferenceType consumer,
                    String topic) throws JBIException {
    return subscribe(consumer, topic, null, false);
  }

  public Subscription subscribe(EndpointReferenceType consumer,
                    String topic,
                    String xpath) throws JBIException {
    return subscribe(consumer, topic, xpath, false);
  }

  public Subscription subscribe(EndpointReferenceType consumer,
                    String topic,
                    String xpath,
                    boolean raw) throws JBIException {
   
    Subscribe subscribeRequest = new Subscribe();
    subscribeRequest.setConsumerReference(consumer);
    subscribeRequest.setFilter(new FilterType());
    if (topic != null) {
      TopicExpressionType topicExp = new TopicExpressionType();
      topicExp.getContent().add(topic);
      subscribeRequest.getFilter().getAny().add(new JAXBElement<TopicExpressionType>(AbstractSubscription.QNAME_TOPIC_EXPRESSION, TopicExpressionType.class, topicExp));
    }
    if (xpath != null) {
      QueryExpressionType xpathExp = new QueryExpressionType();
      xpathExp.setDialect(AbstractSubscription.XPATH1_URI);
      xpathExp.getContent().add(xpath);
      subscribeRequest.getFilter().getAny().add(new JAXBElement<QueryExpressionType>(AbstractSubscription.QNAME_MESSAGE_CONTENT, QueryExpressionType.class, xpathExp));
    }
    if (raw) {
      subscribeRequest.setSubscriptionPolicy(new Subscribe.SubscriptionPolicy());
      subscribeRequest.getSubscriptionPolicy().getAny().add(new UseRaw());
    }
    SubscribeResponse response = (SubscribeResponse) request(subscribeRequest);
    return new Subscription(response.getSubscriptionReference(), getClient());
  }

  public List<Object> getCurrentMessage(String topic) throws JBIException {
    GetCurrentMessage getCurrentMessageRequest = new GetCurrentMessage();
    if (topic != null) {
      TopicExpressionType topicExp = new TopicExpressionType();
      topicExp.getContent().add(topic);
      getCurrentMessageRequest.setTopic(topicExp);
    }
    GetCurrentMessageResponse response = (GetCurrentMessageResponse) request(getCurrentMessageRequest);
    return response.getAny();
  }

  public Publisher registerPublisher(EndpointReferenceType publisherReference,
                     String topic,
                     boolean demand) throws JBIException {
   
    RegisterPublisher registerPublisherRequest = new RegisterPublisher();
    registerPublisherRequest.setPublisherReference(publisherReference);
    if (topic != null) {
      TopicExpressionType topicExp = new TopicExpressionType();
      topicExp.getContent().add(topic);
      registerPublisherRequest.getTopic().add(topicExp);
    }
    registerPublisherRequest.setDemand(Boolean.valueOf(demand));
    RegisterPublisherResponse response = (RegisterPublisherResponse) request(registerPublisherRequest);
    return new Publisher(response.getPublisherRegistrationReference(), getClient());
  }

}
TOP

Related Classes of org.apache.servicemix.wsn.client.NotificationBroker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.