use of org.apache.cxf.ws.eventing.ExpirationType in project cxf by apache.
the class NotificationTest method basicReceptionOfWrappedEvents.
@Test
public void basicReceptionOfWrappedEvents() throws IOException {
NotificatorService service = createNotificatorService();
Subscribe subscribe = new Subscribe();
ExpirationType exp = new ExpirationType();
exp.setValue(DurationAndDateUtil.convertToXMLString(DurationAndDateUtil.parseDurationOrTimestamp("PT0S")));
subscribe.setExpires(exp);
EndpointReferenceType eventSinkERT = new EndpointReferenceType();
AttributedURIType eventSinkAddr = new AttributedURIType();
String url = TestUtil.generateRandomURLWithHttpTransport(NOTIFICATION_TEST_PORT);
eventSinkAddr.setValue(url);
eventSinkERT.setAddress(eventSinkAddr);
subscribe.setDelivery(new DeliveryType());
subscribe.getDelivery().getContent().add(new ObjectFactory().createNotifyTo(eventSinkERT));
FormatType formatType = new FormatType();
formatType.setName(EventingConstants.DELIVERY_FORMAT_WRAPPED);
subscribe.setFormat(formatType);
eventSourceClient.subscribeOp(subscribe);
eventSourceClient.subscribeOp(subscribe);
eventSourceClient.subscribeOp(subscribe);
Server eventSinkServer = createWrappedEventSink(url);
TestingWrappedEventSinkImpl.RECEIVED_FIRES.set(0);
service.start();
Emitter emitter = new EmitterImpl(service);
emitter.dispatch(new FireEvent("Canada", 8));
for (int i = 0; i < 10; i++) {
if (TestingWrappedEventSinkImpl.RECEIVED_FIRES.get() == 3) {
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
eventSinkServer.stop();
if (TestingWrappedEventSinkImpl.RECEIVED_FIRES.get() != 3) {
Assert.fail("TestingWrappedEventSinkImpl should have received 3 events but received " + TestingWrappedEventSinkImpl.RECEIVED_FIRES.get());
}
}
use of org.apache.cxf.ws.eventing.ExpirationType in project cxf by apache.
the class NotificationTest method withFilterNegative.
/**
* We request only to receive notifications about fires in Russia
* and there will be only a fire in Canada. We should not receive
* this notification.
*/
@Test
public void withFilterNegative() throws IOException {
NotificatorService service = createNotificatorService();
Subscribe subscribe = new Subscribe();
ExpirationType exp = new ExpirationType();
exp.setValue(DurationAndDateUtil.convertToXMLString(DurationAndDateUtil.parseDurationOrTimestamp("PT0S")));
subscribe.setExpires(exp);
EndpointReferenceType eventSinkERT = new EndpointReferenceType();
AttributedURIType eventSinkAddr = new AttributedURIType();
String url = TestUtil.generateRandomURLWithHttpTransport(NOTIFICATION_TEST_PORT);
eventSinkAddr.setValue(url);
eventSinkERT.setAddress(eventSinkAddr);
subscribe.setDelivery(new DeliveryType());
subscribe.getDelivery().getContent().add(new ObjectFactory().createNotifyTo(eventSinkERT));
subscribe.setFilter(new FilterType());
subscribe.getFilter().getContent().add("/*[local-name()='fire']/location[text()='Russia']");
eventSourceClient.subscribeOp(subscribe);
Server eventSinkServer = createEventSink(url);
TestingEventSinkImpl.RECEIVED_FIRES.set(0);
service.start();
Emitter emitter = new EmitterImpl(service);
emitter.dispatch(new FireEvent("Canada", 8));
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
eventSinkServer.stop();
if (TestingEventSinkImpl.RECEIVED_FIRES.get() != 0) {
Assert.fail("TestingEventSinkImpl should have received 0 events but received " + TestingEventSinkImpl.RECEIVED_FIRES.get());
}
}
use of org.apache.cxf.ws.eventing.ExpirationType in project cxf by apache.
the class SubscriptionManagerImpl method renew.
@Override
public ExpirationType renew(UUID uuid, ExpirationType requestedExpiration) {
SubscriptionTicket ticket = getDatabase().findById(uuid);
if (ticket == null) {
throw new UnknownSubscription();
}
LOG.info("[subscription=" + ticket.getUuid() + "] Requested renew expiration: " + requestedExpiration.getValue());
LOG.fine("[subscription=" + ticket.getUuid() + "] Current expiration: " + ticket.getExpires().toXMLFormat());
ExpirationType response = new ExpirationType();
XMLGregorianCalendar grantedExpires;
if (DurationAndDateUtil.isDuration(requestedExpiration.getValue())) {
// duration was requested
javax.xml.datatype.Duration requestedDuration = DurationAndDateUtil.parseDuration(requestedExpiration.getValue());
javax.xml.datatype.Duration grantedDuration = requestedDuration;
LOG.info("[subscription=" + ticket.getUuid() + "] Granted renewal duration: " + grantedDuration.toString());
grantedExpires = getDatabase().findById(uuid).getExpires();
grantedExpires.add(grantedDuration);
response.setValue(grantedDuration.toString());
} else {
// end-date was requested
grantedExpires = DurationAndDateUtil.parseXMLGregorianCalendar(requestedExpiration.getValue());
LOG.info("[subscription=" + ticket.getUuid() + "] Granted expiration: " + grantedExpires.toXMLFormat());
response.setValue(grantedExpires.toXMLFormat());
}
getDatabase().findById(uuid).setExpires(grantedExpires);
return response;
}
use of org.apache.cxf.ws.eventing.ExpirationType in project cxf by apache.
the class NotificationTest method withWSAAction.
@Test
public void withWSAAction() throws Exception {
NotificatorService service = createNotificatorService();
Subscribe subscribe = new Subscribe();
ExpirationType exp = new ExpirationType();
exp.setValue(DurationAndDateUtil.convertToXMLString(DurationAndDateUtil.parseDurationOrTimestamp("PT0S")));
subscribe.setExpires(exp);
EndpointReferenceType eventSinkERT = new EndpointReferenceType();
AttributedURIType eventSinkAddr = new AttributedURIType();
String url = TestUtil.generateRandomURLWithHttpTransport(NOTIFICATION_TEST_PORT);
eventSinkAddr.setValue(url);
eventSinkERT.setAddress(eventSinkAddr);
subscribe.setDelivery(new DeliveryType());
subscribe.getDelivery().getContent().add(new ObjectFactory().createNotifyTo(eventSinkERT));
eventSourceClient.subscribeOp(subscribe);
Server eventSinkServer = createEventSinkWithWSAActionAssertion(url, "http://www.fire.com");
TestingEventSinkImpl.RECEIVED_FIRES.set(0);
service.start();
Emitter emitter = new EmitterImpl(service);
emitter.dispatch(new FireEvent("Canada", 8));
for (int i = 0; i < 10; i++) {
if (TestingEventSinkImpl.RECEIVED_FIRES.get() == 1) {
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
eventSinkServer.stop();
if (TestingEventSinkImpl.RECEIVED_FIRES.get() != 1) {
Assert.fail("TestingEventSinkImpl should have received 1 events but received " + TestingEventSinkImpl.RECEIVED_FIRES.get());
}
}
use of org.apache.cxf.ws.eventing.ExpirationType in project cxf by apache.
the class SubscriptionGrantingTest method testExpirationGrantingWithBestEffort.
/**
* When BestEffort=true, the server doesn't have to grant exactly the date as we requested
* @throws IOException
*/
@Test
public void testExpirationGrantingWithBestEffort() throws IOException {
Subscribe subscribe = new Subscribe();
ExpirationType exp = new ExpirationType();
DeliveryType delivery = new DeliveryType();
XMLGregorianCalendar dateRequest = (XMLGregorianCalendar) DurationAndDateUtil.parseDurationOrTimestamp("2138-06-26T12:23:12.000-01:00");
exp.setValue(DurationAndDateUtil.convertToXMLString(dateRequest));
exp.setBestEffort(true);
subscribe.setExpires(exp);
subscribe.setDelivery(delivery);
subscribe.getDelivery().getContent().add(createDummyNotifyTo());
SubscribeResponse resp = eventSourceClient.subscribeOp(subscribe);
Assert.assertTrue("Specification requires that EventSource return a " + "xs:dateTime expirationType if a xs:dateTime was requested by client", DurationAndDateUtil.isXMLGregorianCalendar(resp.getGrantedExpires().getValue()));
}
Aggregations