Skip to content

Commit

Permalink
[RESTEASY-1680]:Enable sse send a xml format data event
Browse files Browse the repository at this point in the history
  • Loading branch information
jimma authored and asoldano committed Oct 17, 2017
1 parent 06b20a6 commit 838958e
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ public Object invoke(Object o, Method method, Object[] objects) throws Throwable
{
try
{

Object delegate = ResteasyProviderFactory.getContextData(type);
if (delegate == null)
{
Expand All @@ -66,6 +67,11 @@ public Object invoke(Object o, Method method, Object[] objects) throws Throwable
{
return null;
}

if ("getContextResolver".equals(name))
{
return method.invoke(factory, objects);
}
throw new LoggableFailure(Messages.MESSAGES.unableToFindContextualData(type.getName()));
}
return method.invoke(delegate, objects);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import javax.ws.rs.sse.Sse;
import javax.ws.rs.sse.SseBroadcaster;
import javax.ws.rs.sse.SseEventSink;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;

import org.jboss.resteasy.plugins.providers.sse.SseConstants;

Expand Down Expand Up @@ -227,4 +229,13 @@ public void sendMessage(@Context SseEventSink sink) {
}
}
}
@GET
@Path("/xmlevent")
@Produces(MediaType.SERVER_SENT_EVENTS)
public void sendXmlType(@Context SseEventSink sink) {
try (SseEventSink eventSink = sink) {
JAXBElement<String> element = new JAXBElement<String>(new QName("name"), String.class, "xmldata");
eventSink.send(sse.newEventBuilder().data(element).mediaType(MediaType.APPLICATION_XML_TYPE).build());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.sse.InboundSseEvent;
import javax.ws.rs.sse.SseEventSource;
import javax.xml.bind.JAXBElement;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
Expand All @@ -33,6 +34,8 @@
import org.junit.Test;
import org.junit.runner.RunWith;



@RunWith(Arquillian.class)
@RunAsClient
public class SseTest {
Expand Down Expand Up @@ -368,6 +371,37 @@ public void testServiceUnavialbeRetryAfter() throws Exception
}
Assert.assertTrue("ServiceAvailable message is expected", results.get(0).equals("ServiceAvailable"));
}
@Test
@InSequence(10)
public void testXmlEvent() throws Exception
{
final CountDownLatch latch = new CountDownLatch(1);
final AtomicInteger errors = new AtomicInteger(0);
final List<InboundSseEvent> results = new ArrayList<InboundSseEvent>();
Client client = ClientBuilder.newBuilder().build();
WebTarget target = client.target(generateURL("/service/server-sent-events/xmlevent"));
SseEventSource msgEventSource = SseEventSource.target(target).build();
try (SseEventSource eventSource = msgEventSource)
{
Assert.assertEquals(SseEventSourceImpl.class, eventSource.getClass());
eventSource.register(event -> {
results.add(event);
latch.countDown();
}, ex -> {
errors.incrementAndGet();
ex.printStackTrace();
throw new RuntimeException(ex);
});
eventSource.open();

boolean waitResult = latch.await(30, TimeUnit.SECONDS);
Assert.assertEquals(0, errors.get());
Assert.assertTrue("Waiting for event to be delivered has timed out.", waitResult);
}
JAXBElement<String> jaxbElement=results.get(0).readData(new javax.ws.rs.core.GenericType<JAXBElement<String>>(){} , MediaType.APPLICATION_XML_TYPE);
Assert.assertEquals("xmldata is expceted", jaxbElement.getValue(), "xmldata");
}

// @Test
// //This will open a browser and test with html sse client
// public void testHtmlSse() throws Exception
Expand Down

0 comments on commit 838958e

Please sign in to comment.