package org.wildfly.swarm.webservices; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.stream.Collectors; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset; import org.jboss.shrinkwrap.api.asset.StringAsset; import org.junit.Test; import org.junit.runner.RunWith; import org.wildfly.swarm.Swarm; import org.wildfly.swarm.arquillian.CreateSwarm; import org.wildfly.swarm.config.naming.Binding; import org.wildfly.swarm.naming.NamingFraction; import org.wildfly.swarm.undertow.WARArchive; import static org.fest.assertions.Assertions.assertThat; /** * @author Ken Finnigan */ @RunWith(Arquillian.class) public class SWARM582Test { private static final String MESSAGE = "Mickey Mouse"; @Deployment(testable = false) public static Archive deployment() { WARArchive deployment = ShrinkWrap.create(WARArchive.class, "wstest.war") .addClass(EchoClientServlet.class) .addClass(EchoClientWithHandlerServlet.class) .addClass(EchoService.class) .addClass(EchoServiceImpl.class) .addClass(EchoServiceClient.class) .addClass(EchoServiceClientWithHandler.class) .addAsWebInfResource(new ClassLoaderAsset("handler-chain.xml"), "classes/org/wildfly/swarm/webservices/handler-chain.xml") .addClass(MySOAPHandler.class); return deployment; } @CreateSwarm public static Swarm create() throws Exception { return new Swarm() .fraction(new NamingFraction() .binding(new Binding("java:global/ws/echo") .bindingType(Binding.BindingType.SIMPLE) .type(URL.class.getCanonicalName()) .value("http://localhost:8080/ws/echo?wsdl"))); } @Test @RunAsClient public void testServletAsWebServiceClient() throws Exception { URL url = new URL("http://localhost:8080/client?message=" + URLEncoder.encode(MESSAGE, StandardCharsets.UTF_8.name())); final String response = readResponse(url); assertThat(response).isEqualTo("ECHO:" + MESSAGE); } @Test @RunAsClient public void testServletAsWebServiceClientWithHandler() throws Exception { URL url = new URL("http://localhost:8080/clientWithHandler?message=" + URLEncoder.encode(MESSAGE, StandardCharsets.UTF_8.name())); final String response = readResponse(url); assertThat(response).isEqualTo("ECHO:" + MESSAGE); } private String readResponse(URL url) throws IOException { final InputStream stream = url.openStream(); try (final BufferedReader reader = new BufferedReader(new InputStreamReader(stream))) { return reader.lines().collect(Collectors.joining("\n")); } } }