This is an automated email from the ASF dual-hosted git repository.
jgallimore pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git
The following commit(s) were added to refs/heads/master by this push:
new 4b30c73 Add Arquillian test for WebServiceContext for a
servlet-mapped-no-interface EJB
4b30c73 is described below
commit 4b30c7383e1cf2ecaa5a4a4218206b0987a3ad8c
Author: Jonathan Gallimore <[email protected]>
AuthorDate: Wed Jan 19 14:15:13 2022 +0000
Add Arquillian test for WebServiceContext for a servlet-mapped-no-interface
EJB
---
.../tests/jaxws/WebServiceContextEJBTest.java | 119 +++++++++++++++++++++
1 file changed, 119 insertions(+)
diff --git
a/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxws-tests/src/test/java/org/apache/openejb/arquillian/tests/jaxws/WebServiceContextEJBTest.java
b/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxws-tests/src/test/java/org/apache/openejb/arquillian/tests/jaxws/WebServiceContextEJBTest.java
new file mode 100644
index 0000000..96659f1
--- /dev/null
+++
b/arquillian/arquillian-tomee-tests/arquillian-tomee-jaxws-tests/src/test/java/org/apache/openejb/arquillian/tests/jaxws/WebServiceContextEJBTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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.openejb.arquillian.tests.jaxws;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.descriptor.api.Descriptors;
+import org.jboss.shrinkwrap.descriptor.api.webapp31.WebAppDescriptor;
+import org.junit.Assert;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.annotation.Resource;
+import javax.ejb.Stateless;
+import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.namespace.QName;
+import javax.xml.transform.*;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.ws.Dispatch;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+import java.io.ByteArrayOutputStream;
+import java.io.StringReader;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+
+
+@RunWith(Arquillian.class)
+@Ignore
+public class WebServiceContextEJBTest {
+ @ArquillianResource
+ private URL url;
+
+ @Deployment(testable = false)
+ public static WebArchive createDeployment() {
+ final WebAppDescriptor webAppDescriptor =
Descriptors.create(WebAppDescriptor.class)
+ .createServlet()
+ .servletName("HelloService")
+ .servletClass(HelloService.class.getName())
+ .up()
+ .createServletMapping()
+ .servletName("HelloService")
+ .urlPattern("/ws/Hello")
+ .up();
+
+ return ShrinkWrap.create(WebArchive.class, "ROOT.war")
+ .addClasses(HelloService.class)
+ .addAsWebInfResource(new
StringAsset(webAppDescriptor.exportAsString()), "web.xml");
+ }
+
+ @Test
+ public void invoke() throws Exception {
+ final Service service = Service.create(new URL(url.toExternalForm() +
"/ws/Hello?wsdl"), new
QName("http://jaxws.tests.arquillian.openejb.apache.org/", "Hello"));
+ final QName portQName = new
QName("http://jaxws.tests.arquillian.openejb.apache.org/", "HelloService");
+
+ final Dispatch<Source> dispatch = service.createDispatch(portQName,
Source.class, Service.Mode.PAYLOAD);
+ final String request =
+ " <jax:sayHello
xmlns:jax=\"http://jaxws.tests.arquillian.openejb.apache.org/\">\n" +
+ " <name>tomee</name>\n" +
+ " </jax:sayHello>\n";
+ final Source response = dispatch.invoke(new StreamSource(new
StringReader(request)));
+
+ final TransformerFactory factory = TransformerFactory.newInstance();
+ final Transformer transformer = factory.newTransformer();
+ transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml");
+ final ByteArrayOutputStream os = new ByteArrayOutputStream();
+ final StreamResult streamResult = new StreamResult();
+ streamResult.setOutputStream(os);
+ transformer.transform(response, streamResult);
+
+ final String result = new String(os.toByteArray(),
StandardCharsets.UTF_8);
+ System.out.println(result);
+ Assert.assertTrue(result.contains("<return>Hello, tomee, test header
is set to null</return>"));
+ }
+
+ @WebService(name = "Hello", targetNamespace =
"http://jaxws.tests.arquillian.openejb.apache.org/", serviceName = "Hello",
portName = "HelloService")
+ @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, parameterStyle =
SOAPBinding.ParameterStyle.WRAPPED, use = SOAPBinding.Use.LITERAL)
+ @Stateless
+ public static class HelloService {
+
+ @Resource
+ private WebServiceContext context;
+
+ @WebMethod
+ public String sayHello(final @WebParam(name="name") String name) {
+ final MessageContext messageContext = context.getMessageContext();
+ final HttpServletRequest request = (HttpServletRequest)
messageContext.get(MessageContext.SERVLET_REQUEST);
+
+ final String testHeader = request.getHeader("XX-Test");
+ return "Hello, " + name + ", test header is set to " + testHeader;
+ }
+ }
+}