use of org.oasis_open.docs.wsn.b_2.TopicExpressionType in project cxf by apache.
the class NotificationBroker method notify.
public void notify(Referencable publisher, String topic, Object msg) {
getBroker();
if (this.context != null) {
try {
DOMResult result = new DOMResult();
context.createMarshaller().marshal(msg, result);
msg = result.getNode();
if (msg instanceof Document) {
msg = ((Document) msg).getDocumentElement();
}
} catch (JAXBException e) {
// ignore, we'll try and let the runtime handle it as is
}
}
Notify notify = new Notify();
NotificationMessageHolderType holder = new NotificationMessageHolderType();
if (publisher != null) {
holder.setProducerReference(publisher.getEpr());
}
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);
getBroker().notify(notify);
}
use of org.oasis_open.docs.wsn.b_2.TopicExpressionType in project cxf by apache.
the class NotificationBroker method getCurrentMessage.
public List<Object> getCurrentMessage(String topic) throws // CHECKSTYLE:OFF - WS-Notification spec throws a lot of faults
TopicNotSupportedFault, TopicExpressionDialectUnknownFault, MultipleTopicsSpecifiedFault, InvalidTopicExpressionFault, ResourceUnknownFault, NoCurrentMessageOnTopicFault {
// CHECKSTYLE:ON
GetCurrentMessage getCurrentMessageRequest = new GetCurrentMessage();
if (topic != null) {
TopicExpressionType topicExp = new TopicExpressionType();
topicExp.getContent().add(topic);
getCurrentMessageRequest.setTopic(topicExp);
}
GetCurrentMessageResponse response = getBroker().getCurrentMessage(getCurrentMessageRequest);
return response.getAny();
}
use of org.oasis_open.docs.wsn.b_2.TopicExpressionType in project cxf by apache.
the class AbstractSubscription method validateSubscription.
protected void validateSubscription(Subscribe subscribeRequest) throws // CHECKSTYLE:OFF - WS-Notification spec throws a lot of faults
InvalidFilterFault, InvalidMessageContentExpressionFault, InvalidProducerPropertiesExpressionFault, InvalidTopicExpressionFault, SubscribeCreationFailedFault, TopicExpressionDialectUnknownFault, TopicNotSupportedFault, UnacceptableInitialTerminationTimeFault, UnrecognizedPolicyRequestFault, UnsupportedPolicyRequestFault {
// CHECKSTYLE:ON
// Check consumer reference
consumerReference = subscribeRequest.getConsumerReference();
// Check terminationTime
if (subscribeRequest.getInitialTerminationTime() != null && !subscribeRequest.getInitialTerminationTime().isNil() && subscribeRequest.getInitialTerminationTime().getValue() != null) {
String strTerminationTime = subscribeRequest.getInitialTerminationTime().getValue();
terminationTime = validateInitialTerminationTime(strTerminationTime.trim());
}
// Check filter
if (subscribeRequest.getFilter() != null) {
for (Object f : subscribeRequest.getFilter().getAny()) {
JAXBElement<?> e = null;
if (f instanceof JAXBElement) {
e = (JAXBElement<?>) f;
f = e.getValue();
}
if (f instanceof TopicExpressionType) {
if (!e.getName().equals(QNAME_TOPIC_EXPRESSION)) {
InvalidTopicExpressionFaultType fault = new InvalidTopicExpressionFaultType();
throw new InvalidTopicExpressionFault("Unrecognized TopicExpression: " + e, fault);
}
topic = (TopicExpressionType) f;
} else if (f instanceof QueryExpressionType) {
if (e != null && e.getName().equals(QNAME_PRODUCER_PROPERTIES)) {
InvalidProducerPropertiesExpressionFaultType fault = new InvalidProducerPropertiesExpressionFaultType();
throw new InvalidProducerPropertiesExpressionFault("ProducerProperties are not supported", fault);
} else if (e != null && e.getName().equals(QNAME_MESSAGE_CONTENT)) {
if (contentFilter != null) {
InvalidMessageContentExpressionFaultType fault = new InvalidMessageContentExpressionFaultType();
throw new InvalidMessageContentExpressionFault("Only one MessageContent filter can be specified", fault);
}
contentFilter = (QueryExpressionType) f;
// Defaults to XPath 1.0
if (contentFilter.getDialect() == null) {
contentFilter.setDialect(XPATH1_URI);
}
} else {
InvalidFilterFaultType fault = new InvalidFilterFaultType();
throw new InvalidFilterFault("Unrecognized filter: " + (e != null ? e.getName() : f), fault);
}
} else {
InvalidFilterFaultType fault = new InvalidFilterFaultType();
throw new InvalidFilterFault("Unrecognized filter: " + (e != null ? e.getName() : f), fault);
}
}
}
// Check policy
if (subscribeRequest.getSubscriptionPolicy() != null) {
for (Object p : subscribeRequest.getSubscriptionPolicy().getAny()) {
JAXBElement<?> e = null;
if (p instanceof JAXBElement) {
e = (JAXBElement<?>) p;
p = e.getValue();
}
if (p instanceof UseRaw) {
useRaw = true;
} else {
UnrecognizedPolicyRequestFaultType fault = new UnrecognizedPolicyRequestFaultType();
throw new UnrecognizedPolicyRequestFault("Unrecognized policy: " + p, fault);
}
}
}
// Check all parameters
if (consumerReference == null) {
SubscribeCreationFailedFaultType fault = new SubscribeCreationFailedFaultType();
throw new SubscribeCreationFailedFault("Invalid ConsumerReference: null", fault);
}
// TODO check we can resolve endpoint
if (topic == null) {
InvalidFilterFaultType fault = new InvalidFilterFaultType();
throw new InvalidFilterFault("Must specify a topic to subscribe on", fault);
}
if (contentFilter != null && !contentFilter.getDialect().equals(XPATH1_URI)) {
InvalidMessageContentExpressionFaultType fault = new InvalidMessageContentExpressionFaultType();
throw new InvalidMessageContentExpressionFault("Unsupported MessageContent dialect: '" + contentFilter.getDialect() + "'", fault);
}
}
use of org.oasis_open.docs.wsn.b_2.TopicExpressionType in project cxf by apache.
the class JmsPublisher method start.
@Override
protected void start() throws PublisherRegistrationFailedFault {
if (demand) {
try {
producers = new HashMap<>();
advisories = new ArrayList<>();
for (TopicExpressionType topic : this.topic) {
ConsumerEventSource advisory = new ConsumerEventSource(connection, topicConverter.toActiveMQTopic(topic));
advisory.setConsumerListener(this);
advisory.start();
advisories.add(advisory);
}
} catch (Exception e) {
PublisherRegistrationFailedFaultType fault = new PublisherRegistrationFailedFaultType();
throw new PublisherRegistrationFailedFault("Error starting demand-based publisher", fault, e);
}
}
}
use of org.oasis_open.docs.wsn.b_2.TopicExpressionType in project cxf by apache.
the class NotificationBroker method subscribe.
public Subscription subscribe(Referencable consumer, String topic, String xpath, boolean raw, String initialTerminationTime) throws // CHECKSTYLE:OFF - WS-Notification spec throws a lot of faults
TopicNotSupportedFault, InvalidFilterFault, TopicExpressionDialectUnknownFault, UnacceptableInitialTerminationTimeFault, SubscribeCreationFailedFault, InvalidMessageContentExpressionFault, InvalidTopicExpressionFault, UnrecognizedPolicyRequestFault, UnsupportedPolicyRequestFault, ResourceUnknownFault, NotifyMessageNotSupportedFault, InvalidProducerPropertiesExpressionFault {
// CHECKSTYLE:ON
Subscribe subscribeRequest = new Subscribe();
if (initialTerminationTime != null) {
subscribeRequest.setInitialTerminationTime(new JAXBElement<String>(QNAME_INITIAL_TERMINATION_TIME, String.class, initialTerminationTime));
}
subscribeRequest.setConsumerReference(consumer.getEpr());
subscribeRequest.setFilter(new FilterType());
if (topic != null) {
TopicExpressionType topicExp = new TopicExpressionType();
topicExp.getContent().add(topic);
subscribeRequest.getFilter().getAny().add(new JAXBElement<TopicExpressionType>(QNAME_TOPIC_EXPRESSION, TopicExpressionType.class, topicExp));
}
if (xpath != null) {
QueryExpressionType xpathExp = new QueryExpressionType();
xpathExp.setDialect(XPATH1_URI);
xpathExp.getContent().add(xpath);
subscribeRequest.getFilter().getAny().add(new JAXBElement<QueryExpressionType>(QNAME_MESSAGE_CONTENT, QueryExpressionType.class, xpathExp));
}
if (raw) {
subscribeRequest.setSubscriptionPolicy(new Subscribe.SubscriptionPolicy());
subscribeRequest.getSubscriptionPolicy().getAny().add(new UseRaw());
}
SubscribeResponse response = getBroker().subscribe(subscribeRequest);
return new Subscription(response.getSubscriptionReference());
}
Aggregations