http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/efed31f4/src/main/jbake/content/examples/webservice-attachments.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/webservice-attachments.adoc b/src/main/jbake/content/examples/webservice-attachments.adoc deleted file mode 100755 index 384f3fd..0000000 --- a/src/main/jbake/content/examples/webservice-attachments.adoc +++ /dev/null @@ -1,234 +0,0 @@ -= Webservice Attachments -:jbake-date: 2016-09-06 -:jbake-type: page -:jbake-tomeepdf: -:jbake-status: published - -Example webservice-attachments can be browsed at https://github.com/apache/tomee/tree/master/examples/webservice-attachments - - -*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* - -== AttachmentImpl - - -[source,java] ----- -package org.superbiz.attachment; - -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.ejb.Stateless; -import javax.jws.WebService; -import javax.xml.ws.BindingType; -import javax.xml.ws.soap.SOAPBinding; -import java.io.IOException; -import java.io.InputStream; - -/** - * This is an EJB 3 style pojo stateless session bean - * Every stateless session bean implementation must be annotated - * using the annotation @Stateless - * This EJB has a single interface: {@link AttachmentWs} a webservice interface. - */ -@Stateless -@WebService( - portName = "AttachmentPort", - serviceName = "AttachmentWsService", - targetNamespace = "http://superbiz.org/wsdl", - endpointInterface = "org.superbiz.attachment.AttachmentWs") -@BindingType(value = SOAPBinding.SOAP12HTTP_MTOM_BINDING) -public class AttachmentImpl implements AttachmentWs { - - public String stringFromBytes(byte[] data) { - return new String(data); - } - - public String stringFromDataSource(DataSource source) { - - try { - InputStream inStr = source.getInputStream(); - int size = inStr.available(); - byte[] data = new byte[size]; - inStr.read(data); - inStr.close(); - return new String(data); - } catch (IOException e) { - e.printStackTrace(); - } - return ""; - } - - public String stringFromDataHandler(DataHandler handler) { - - try { - return (String) handler.getContent(); - } catch (IOException e) { - e.printStackTrace(); - } - return ""; - } -} ----- - - -== AttachmentWs - - -[source,java] ----- -package org.superbiz.attachment; - -import javax.activation.DataHandler; -import javax.jws.WebService; - -/** - * This is an EJB 3 webservice interface to send attachments throughout SAOP. - */ -@WebService(targetNamespace = "http://superbiz.org/wsdl") -public interface AttachmentWs { - - public String stringFromBytes(byte[] data); - - // Not working at the moment with SUN saaj provider and CXF - //public String stringFromDataSource(DataSource source); - - public String stringFromDataHandler(DataHandler handler); -} ----- - - -== ejb-jar.xml - - -[source,xml] ----- -<ejb-jar/> ----- - - -== AttachmentTest - - -[source,java] ----- -package org.superbiz.attachment; - -import junit.framework.TestCase; - -import javax.activation.DataHandler; -import javax.activation.DataSource; -import javax.mail.util.ByteArrayDataSource; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.xml.namespace.QName; -import javax.xml.ws.BindingProvider; -import javax.xml.ws.Service; -import javax.xml.ws.soap.SOAPBinding; -import java.net.URL; -import java.util.Properties; - -public class AttachmentTest extends TestCase { - - //START SNIPPET: setup - private InitialContext initialContext; - - protected void setUp() throws Exception { - - Properties properties = new Properties(); - properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory"); - properties.setProperty("openejb.embedded.remotable", "true"); - - initialContext = new InitialContext(properties); - } - //END SNIPPET: setup - - /** - * Create a webservice client using wsdl url - * - * @throws Exception - */ - //START SNIPPET: webservice - public void testAttachmentViaWsInterface() throws Exception { - Service service = Service.create( - new URL("http://127.0.0.1:4204/AttachmentImpl?wsdl"), - new QName("http://superbiz.org/wsdl", "AttachmentWsService")); - assertNotNull(service); - - AttachmentWs ws = service.getPort(AttachmentWs.class); - - // retrieve the SOAPBinding - SOAPBinding binding = (SOAPBinding) ((BindingProvider) ws).getBinding(); - binding.setMTOMEnabled(true); - - String request = "[email protected]"; - - // Byte array - String response = ws.stringFromBytes(request.getBytes()); - assertEquals(request, response); - - // Data Source - DataSource source = new ByteArrayDataSource(request.getBytes(), "text/plain; charset=UTF-8"); - - // not yet supported ! -// response = ws.stringFromDataSource(source); -// assertEquals(request, response); - - // Data Handler - response = ws.stringFromDataHandler(new DataHandler(source)); - assertEquals(request, response); - } - //END SNIPPET: webservice -} ----- - - -= Running - - - -[source] ----- -------------------------------------------------------- - T E S T S -------------------------------------------------------- -Running org.superbiz.attachment.AttachmentTest -Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 -http://tomee.apache.org/ -INFO - openejb.home = /Users/dblevins/examples/webservice-attachments -INFO - openejb.base = /Users/dblevins/examples/webservice-attachments -INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) -INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) -INFO - Found EjbModule in classpath: /Users/dblevins/examples/webservice-attachments/target/classes -INFO - Beginning load: /Users/dblevins/examples/webservice-attachments/target/classes -INFO - Configuring enterprise application: /Users/dblevins/examples/webservice-attachments/classpath.ear -INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container) -INFO - Auto-creating a container for bean AttachmentImpl: Container(type=STATELESS, id=Default Stateless Container) -INFO - Enterprise application "/Users/dblevins/examples/webservice-attachments/classpath.ear" loaded. -INFO - Assembling app: /Users/dblevins/examples/webservice-attachments/classpath.ear -INFO - Created Ejb(deployment-id=AttachmentImpl, ejb-name=AttachmentImpl, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=AttachmentImpl, ejb-name=AttachmentImpl, container=Default Stateless Container) -INFO - Deployed Application(path=/Users/dblevins/examples/webservice-attachments/classpath.ear) -INFO - Initializing network services -INFO - Creating ServerService(id=httpejbd) -INFO - Creating ServerService(id=cxf) -INFO - Creating ServerService(id=admin) -INFO - Creating ServerService(id=ejbd) -INFO - Creating ServerService(id=ejbds) -INFO - Initializing network services - ** Starting Services ** - NAME IP PORT - httpejbd 127.0.0.1 4204 - admin thread 127.0.0.1 4200 - ejbd 127.0.0.1 4201 - ejbd 127.0.0.1 4203 -------- -Ready! -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.034 sec - -Results : - -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 ----- - -
http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/efed31f4/src/main/jbake/content/examples/webservice-handlerchain.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/webservice-handlerchain.adoc b/src/main/jbake/content/examples/webservice-handlerchain.adoc deleted file mode 100755 index 67ac69a..0000000 --- a/src/main/jbake/content/examples/webservice-handlerchain.adoc +++ /dev/null @@ -1,409 +0,0 @@ -= @WebService handlers with @HandlerChain -:jbake-date: 2016-09-06 -:jbake-type: page -:jbake-tomeepdf: -:jbake-status: published - -Example webservice-handlerchain can be browsed at https://github.com/apache/tomee/tree/master/examples/webservice-handlerchain - - -In this example we see a basic JAX-WS `@WebService` component use a handler chain to alter incoming and outgoing SOAP messages. SOAP Handlers are similar to Servlet Filters or EJB/CDI Interceptors. - -At high level, the steps involved are: - - 1. Create handler(s) implementing `javax.xml.ws.handler.soap.SOAPHandler` - 1. Declare and order them in an xml file via `<handler-chain>` - 1. Associate the xml file with an `@WebService` component via `@HandlerChain` - -== The @HandlerChain - -First we'll start with our plain `@WebService` bean, called `Calculator`, which is annotated with `@HandlerChain` - - -[source,java] ----- -@Singleton -@WebService( - portName = "CalculatorPort", - serviceName = "CalculatorService", - targetNamespace = "http://superbiz.org/wsdl", - endpointInterface = "org.superbiz.calculator.wsh.CalculatorWs") -@HandlerChain(file = "handlers.xml") -public class Calculator implements CalculatorWs { - - public int sum(int add1, int add2) { - return add1 + add2; - } - - public int multiply(int mul1, int mul2) { - return mul1 * mul2; - } -} ----- - - -Here we see `@HandlerChain` pointing to a file called `handlers.xml`. This file could be called anything, but it must be in the same jar and java package as our `Calculator` component. - -== The <handler-chains> file - -Our `Calculator` service is in the package `org.superbiz.calculator.wsh`, which means our handler chain xml file must be at `org/superbiz/calculator/wsh/handlers.xml` in our application's classpath or the file will not be found and no handlers will be used. - -In maven we achieve this by putting our handlers.xml in `src/main/resources` like so: - - - `src/main/resources/org/superbiz/calculator/wsh/handlers.xml` - -With this file we declare and **order** our handler chain. - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"> - <handler-chain> - <handler> - <handler-name>org.superbiz.calculator.wsh.Inflate</handler-name> - <handler-class>org.superbiz.calculator.wsh.Inflate</handler-class> - </handler> - <handler> - <handler-name>org.superbiz.calculator.wsh.Increment</handler-name> - <handler-class>org.superbiz.calculator.wsh.Increment</handler-class> - </handler> - </handler-chain> -</handler-chains> ----- - - -The order as you might suspect is: - - - `Inflate` - - `Increment` - -== The SOAPHandler implementation - -Our `Inflate` handler has the job of monitoring *responses* to the `sum` and `multiply` operations and making them 1000 times better. Manipulation of the message is done by walking the `SOAPBody` and editing the nodes. The `handleMessage` method is invoked for both requests and responses, so it is important to check the `SOAPBody` before attempting to naviage the nodes. - - -[source,java] ----- -import org.w3c.dom.Node; -import javax.xml.namespace.QName; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPException; -import javax.xml.soap.SOAPMessage; -import javax.xml.ws.handler.MessageContext; -import javax.xml.ws.handler.soap.SOAPHandler; -import javax.xml.ws.handler.soap.SOAPMessageContext; -import java.util.Collections; -import java.util.Set; - -public class Inflate implements SOAPHandler<SOAPMessageContext> { - - public boolean handleMessage(SOAPMessageContext mc) { - try { - final SOAPMessage message = mc.getMessage(); - final SOAPBody body = message.getSOAPBody(); - final String localName = body.getFirstChild().getLocalName(); - - if ("sumResponse".equals(localName) || "multiplyResponse".equals(localName)) { - final Node responseNode = body.getFirstChild(); - final Node returnNode = responseNode.getFirstChild(); - final Node intNode = returnNode.getFirstChild(); - - final int value = new Integer(intNode.getNodeValue()); - intNode.setNodeValue(Integer.toString(value * 1000)); - } - - return true; - } catch (SOAPException e) { - return false; - } - } - - public Set<QName> getHeaders() { - return Collections.emptySet(); - } - - public void close(MessageContext mc) { - } - - public boolean handleFault(SOAPMessageContext mc) { - return true; - } -} ----- - - -The `Increment` handler is identical in code and therefore not shown. Instead of multiplying by 1000, it simply adds 1. - -== The TestCase - -We use the JAX-WS API to create a Java client for our `Calculator` web service and use it to invoke both the `sum` and `multiply` operations. Note the clever use of math to assert both the existence and order of our handlers. If `Inflate` and `Increment` were reversed, the responses would be 11000 and 13000 respectively. - - -[source,java] ----- -public class CalculatorTest { - - @BeforeClass - public static void setUp() throws Exception { - Properties properties = new Properties(); - properties.setProperty("openejb.embedded.remotable", "true"); - EJBContainer.createEJBContainer(properties); - } - - @Test - public void testCalculatorViaWsInterface() throws Exception { - final Service calculatorService = Service.create( - new URL("http://127.0.0.1:4204/Calculator?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorService")); - - assertNotNull(calculatorService); - - final CalculatorWs calculator = calculatorService.getPort(CalculatorWs.class); - - // we expect our answers to come back 1000 times better, plus one! - assertEquals(10001, calculator.sum(4, 6)); - assertEquals(12001, calculator.multiply(3, 4)); - } -} ----- - - -== Running the example - -Simply run `mvn clean install` and you should see output similar to the following: - - -[source] ----- -------------------------------------------------------- - T E S T S -------------------------------------------------------- -Running org.superbiz.calculator.wsh.CalculatorTest -INFO - openejb.home = /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers -INFO - openejb.base = /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers -INFO - Using 'javax.ejb.embeddable.EJBContainer=true' -INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed. -INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) -INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) -INFO - Creating TransactionManager(id=Default Transaction Manager) -INFO - Creating SecurityService(id=Default Security Service) -INFO - Beginning load: /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers/target/test-classes -INFO - Beginning load: /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers/target/classes -INFO - Configuring enterprise application: /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers -INFO - Auto-deploying ejb Calculator: EjbDeployment(deployment-id=Calculator) -INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container) -INFO - Auto-creating a container for bean Calculator: Container(type=SINGLETON, id=Default Singleton Container) -INFO - Creating Container(id=Default Singleton Container) -INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) -INFO - Auto-creating a container for bean org.superbiz.calculator.wsh.CalculatorTest: Container(type=MANAGED, id=Default Managed Container) -INFO - Creating Container(id=Default Managed Container) -INFO - Enterprise application "/Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers" loaded. -INFO - Assembling app: /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers -INFO - Created Ejb(deployment-id=Calculator, ejb-name=Calculator, container=Default Singleton Container) -INFO - Started Ejb(deployment-id=Calculator, ejb-name=Calculator, container=Default Singleton Container) -INFO - Deployed Application(path=/Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers) -INFO - Initializing network services -INFO - Creating ServerService(id=httpejbd) -INFO - Creating ServerService(id=cxf) -INFO - Creating ServerService(id=admin) -INFO - Creating ServerService(id=ejbd) -INFO - Creating ServerService(id=ejbds) -INFO - Initializing network services -INFO - ** Starting Services ** -INFO - NAME IP PORT -INFO - httpejbd 127.0.0.1 4204 -INFO - Creating Service {http://superbiz.org/wsdl}CalculatorService from class org.superbiz.calculator.wsh.CalculatorWs -INFO - Setting the server's publish address to be http://nopath:80 -INFO - Webservice(wsdl=http://127.0.0.1:4204/Calculator, qname={http://superbiz.org/wsdl}CalculatorService) --> Ejb(id=Calculator) -INFO - admin thread 127.0.0.1 4200 -INFO - ejbd 127.0.0.1 4201 -INFO - ejbd 127.0.0.1 4203 -INFO - ------- -INFO - Ready! -INFO - Creating Service {http://superbiz.org/wsdl}CalculatorService from WSDL: http://127.0.0.1:4204/Calculator?wsdl -INFO - Creating Service {http://superbiz.org/wsdl}CalculatorService from WSDL: http://127.0.0.1:4204/Calculator?wsdl -INFO - Default SAAJ universe not set -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.783 sec - -Results : - -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 ----- - - -== Inspecting the messages - -The above would generate the following messages. - -=== Calculator wsdl - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" - name="CalculatorService" targetNamespace="http://superbiz.org/wsdl" - xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" - xmlns:tns="http://superbiz.org/wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <wsdl:types> - <xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" - targetNamespace="http://superbiz.org/wsdl" xmlns:tns="http://superbiz.org/wsdl" - xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <xsd:element name="multiply" type="tns:multiply"/> - <xsd:complexType name="multiply"> - <xsd:sequence> - <xsd:element name="arg0" type="xsd:int"/> - <xsd:element name="arg1" type="xsd:int"/> - </xsd:sequence> - </xsd:complexType> - <xsd:element name="multiplyResponse" type="tns:multiplyResponse"/> - <xsd:complexType name="multiplyResponse"> - <xsd:sequence> - <xsd:element name="return" type="xsd:int"/> - </xsd:sequence> - </xsd:complexType> - <xsd:element name="sum" type="tns:sum"/> - <xsd:complexType name="sum"> - <xsd:sequence> - <xsd:element name="arg0" type="xsd:int"/> - <xsd:element name="arg1" type="xsd:int"/> - </xsd:sequence> - </xsd:complexType> - <xsd:element name="sumResponse" type="tns:sumResponse"/> - <xsd:complexType name="sumResponse"> - <xsd:sequence> - <xsd:element name="return" type="xsd:int"/> - </xsd:sequence> - </xsd:complexType> - </xsd:schema> - </wsdl:types> - <wsdl:message name="multiplyResponse"> - <wsdl:part element="tns:multiplyResponse" name="parameters"> - </wsdl:part> - </wsdl:message> - <wsdl:message name="sumResponse"> - <wsdl:part element="tns:sumResponse" name="parameters"> - </wsdl:part> - </wsdl:message> - <wsdl:message name="sum"> - <wsdl:part element="tns:sum" name="parameters"> - </wsdl:part> - </wsdl:message> - <wsdl:message name="multiply"> - <wsdl:part element="tns:multiply" name="parameters"> - </wsdl:part> - </wsdl:message> - <wsdl:portType name="CalculatorWs"> - <wsdl:operation name="multiply"> - <wsdl:input message="tns:multiply" name="multiply"> - </wsdl:input> - <wsdl:output message="tns:multiplyResponse" name="multiplyResponse"> - </wsdl:output> - </wsdl:operation> - <wsdl:operation name="sum"> - <wsdl:input message="tns:sum" name="sum"> - </wsdl:input> - <wsdl:output message="tns:sumResponse" name="sumResponse"> - </wsdl:output> - </wsdl:operation> - </wsdl:portType> - <wsdl:binding name="CalculatorServiceSoapBinding" type="tns:CalculatorWs"> - <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> - <wsdl:operation name="multiply"> - <soap:operation soapAction="" style="document"/> - <wsdl:input name="multiply"> - <soap:body use="literal"/> - </wsdl:input> - <wsdl:output name="multiplyResponse"> - <soap:body use="literal"/> - </wsdl:output> - </wsdl:operation> - <wsdl:operation name="sum"> - <soap:operation soapAction="" style="document"/> - <wsdl:input name="sum"> - <soap:body use="literal"/> - </wsdl:input> - <wsdl:output name="sumResponse"> - <soap:body use="literal"/> - </wsdl:output> - </wsdl:operation> - </wsdl:binding> - <wsdl:service name="CalculatorService"> - <wsdl:port binding="tns:CalculatorServiceSoapBinding" name="CalculatorPort"> - <soap:address location="http://127.0.0.1:4204/Calculator?wsdl"/> - </wsdl:port> - </wsdl:service> -</wsdl:definitions> ----- - - -=== SOAP sum and sumResponse - -Request: - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> - <soap:Body> - <ns1:sum xmlns:ns1="http://superbiz.org/wsdl"> - <arg0>4</arg0> - <arg1>6</arg1> - </ns1:sum> - </soap:Body> -</soap:Envelope> ----- - - -Response: - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> - <soap:Body> - <ns1:sumResponse xmlns:ns1="http://superbiz.org/wsdl"> - <return>10001</return> - </ns1:sumResponse> - </soap:Body> -</soap:Envelope> ----- - - -=== SOAP multiply and multiplyResponse - -Request: - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> - <soap:Body> - <ns1:multiply xmlns:ns1="http://superbiz.org/wsdl"> - <arg0>3</arg0> - <arg1>4</arg1> - </ns1:multiply> - </soap:Body> -</soap:Envelope> ----- - - -Response: - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> - <soap:Body> - <ns1:multiplyResponse xmlns:ns1="http://superbiz.org/wsdl"> - <return>12001</return> - </ns1:multiplyResponse> - </soap:Body> -</soap:Envelope> ----- - http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/efed31f4/src/main/jbake/content/examples/webservice-holder.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/webservice-holder.adoc b/src/main/jbake/content/examples/webservice-holder.adoc deleted file mode 100755 index bb4a5f4..0000000 --- a/src/main/jbake/content/examples/webservice-holder.adoc +++ /dev/null @@ -1,201 +0,0 @@ -= @WebService OUT params via javax.xml.ws.Holder -:jbake-date: 2016-09-06 -:jbake-type: page -:jbake-tomeepdf: -:jbake-status: published - -Example webservice-holder can be browsed at https://github.com/apache/tomee/tree/master/examples/webservice-holder - - -With SOAP it is possible to return multiple values in a single request. This is impossible in Java as a method can only return one object. - -JAX-WS solves this problem with the concept of Holders. A `javax.xml.ws.Holder` is a simple wrapper object that can be passed into the `@WebService` method as a parameter. The application sets the value of the holder during the request and the server will send the value back as an OUT parameter. - -== Using @WebParam and javax.xml.ws.Holder - -The `@WebParam` annotation allows us to declare the `sum` and `multiply` Holders as `WebParam.Mode.OUT` parameters. As mentioned, these holders are simply empty buckets the application can fill in with data to have sent to the client. The server will pass them in uninitialized. - - -[source,java] ----- -@Stateless -@WebService( - portName = "CalculatorPort", - serviceName = "CalculatorService", - targetNamespace = "http://superbiz.org/wsdl", - endpointInterface = "org.superbiz.ws.out.CalculatorWs") -public class Calculator implements CalculatorWs { - - public void sumAndMultiply(int a, int b, - @WebParam(name = "sum", mode = WebParam.Mode.OUT) Holder<Integer> sum, - @WebParam(name = "multiply", mode = WebParam.Mode.OUT) Holder<Integer> multiply) { - sum.value = a + b; - multiply.value = a * b; - } -} ----- - - -If the Holders were specified as `WebParam.Mode.INOUT` params, then the client could use them to send data and the application as well. The `Holder` instances would then be initialized with the data from the client request. The application could check the data before eventually overriting it with the response values. - -== The WSDL - -The above JAX-WS `@WebService` component results in the folliwing WSDL that will be created automatically. Note the `sumAndMultiplyResponse` complext type returns two elements. These match the `@WebParam` declarations and our two `Holder<Integer>` params. - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" - name="CalculatorService" - targetNamespace="http://superbiz.org/wsdl" - xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" - xmlns:tns="http://superbiz.org/wsdl" - xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <wsdl:types> - <xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" - targetNamespace="http://superbiz.org/wsdl" - xmlns:tns="http://superbiz.org/wsdl" - xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <xsd:element name="sumAndMultiply" type="tns:sumAndMultiply"/> - <xsd:complexType name="sumAndMultiply"> - <xsd:sequence> - <xsd:element name="arg0" type="xsd:int"/> - <xsd:element name="arg1" type="xsd:int"/> - </xsd:sequence> - </xsd:complexType> - <xsd:element name="sumAndMultiplyResponse" type="tns:sumAndMultiplyResponse"/> - <xsd:complexType name="sumAndMultiplyResponse"> - <xsd:sequence> - <xsd:element minOccurs="0" name="sum" type="xsd:int"/> - <xsd:element minOccurs="0" name="multiply" type="xsd:int"/> - </xsd:sequence> - </xsd:complexType> - </xsd:schema> - </wsdl:types> - <wsdl:message name="sumAndMultiplyResponse"> - <wsdl:part element="tns:sumAndMultiplyResponse" name="parameters"/> - </wsdl:message> - <wsdl:message name="sumAndMultiply"> - <wsdl:part element="tns:sumAndMultiply" name="parameters"/> - </wsdl:message> - <wsdl:portType name="CalculatorWs"> - <wsdl:operation name="sumAndMultiply"> - <wsdl:input message="tns:sumAndMultiply" name="sumAndMultiply"/> - <wsdl:output message="tns:sumAndMultiplyResponse" name="sumAndMultiplyResponse"/> - </wsdl:operation> - </wsdl:portType> - <wsdl:binding name="CalculatorServiceSoapBinding" type="tns:CalculatorWs"> - <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> - <wsdl:operation name="sumAndMultiply"> - <soap:operation soapAction="" style="document"/> - <wsdl:input name="sumAndMultiply"> - <soap:body use="literal"/> - </wsdl:input> - <wsdl:output name="sumAndMultiplyResponse"> - <soap:body use="literal"/> - </wsdl:output> - </wsdl:operation> - </wsdl:binding> - <wsdl:service name="CalculatorService"> - <wsdl:port binding="tns:CalculatorServiceSoapBinding" name="CalculatorPort"> - <soap:address location="http://127.0.0.1:4204/Calculator?wsdl"/> - </wsdl:port> - </wsdl:service> -</wsdl:definitions> ----- - - -== Testing the OUT params - -Here we see a JAX-WS client executing the `sumAndMultiply` operation. Two empty `Holder` instances are created and passed in as parameters. The data from the `sumAndMultiplyResponse` is placed in the `Holder` instances and is then available to the client after the operation completes. - -The holders themselves are not actually sent in the request unless they are configured as INOUT params via WebParam.Mode.INOUT on `@WebParam` - - -[source,java] ----- -import org.junit.BeforeClass; -import org.junit.Test; - -import javax.ejb.embeddable.EJBContainer; -import javax.xml.namespace.QName; -import javax.xml.ws.Holder; -import javax.xml.ws.Service; -import java.net.URL; -import java.util.Properties; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -public class CalculatorTest { - - @BeforeClass - public static void setUp() throws Exception { - Properties properties = new Properties(); - properties.setProperty("openejb.embedded.remotable", "true"); - //properties.setProperty("httpejbd.print", "true"); - //properties.setProperty("httpejbd.indent.xml", "true"); - EJBContainer.createEJBContainer(properties); - } - - @Test - public void outParams() throws Exception { - final Service calculatorService = Service.create( - new URL("http://127.0.0.1:4204/Calculator?wsdl"), - new QName("http://superbiz.org/wsdl", "CalculatorService")); - - assertNotNull(calculatorService); - - final CalculatorWs calculator = calculatorService.getPort(CalculatorWs.class); - - final Holder<Integer> sum = new Holder<Integer>(); - final Holder<Integer> multiply = new Holder<Integer>(); - - calculator.sumAndMultiply(4, 6, sum, multiply); - - assertEquals(10, (int) sum.value); - assertEquals(24, (int) multiply.value); - } -} ----- - - - -== Inspecting the messages - -The above execution results in the following SOAP message. - -=== SOAP sumAndMultiply <small>client request</small> - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> - <soap:Body> - <ns1:sumAndMultiply xmlns:ns1="http://superbiz.org/wsdl"> - <arg0>4</arg0> - <arg1>6</arg1> - </ns1:sumAndMultiply> - </soap:Body> -</soap:Envelope> ----- - - -=== SOAP sumAndMultiplyResponse <small>server response</small> - - -[source,xml] ----- -<?xml version="1.0" encoding="UTF-8"?> -<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> - <soap:Body> - <ns1:sumAndMultiplyResponse xmlns:ns1="http://superbiz.org/wsdl"> - <sum>10</sum> - <multiply>24</multiply> - </ns1:sumAndMultiplyResponse> - </soap:Body> -</soap:Envelope> ----- - http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/efed31f4/src/main/jbake/content/examples/webservice-inheritance.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/webservice-inheritance.adoc b/src/main/jbake/content/examples/webservice-inheritance.adoc deleted file mode 100755 index cc8c4cb..0000000 --- a/src/main/jbake/content/examples/webservice-inheritance.adoc +++ /dev/null @@ -1,476 +0,0 @@ -= Webservice Inheritance -:jbake-date: 2016-09-06 -:jbake-type: page -:jbake-tomeepdf: -:jbake-status: published - -Example webservice-inheritance can be browsed at https://github.com/apache/tomee/tree/master/examples/webservice-inheritance - - -*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* - -== Item - - -[source,java] ----- -package org.superbiz.inheritance; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Inheritance; -import javax.persistence.InheritanceType; -import java.io.Serializable; - -@Entity -@Inheritance(strategy = InheritanceType.JOINED) -public class Item implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - private String brand; - private String itemName; - private double price; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getBrand() { - return brand; - } - - public void setBrand(String brand) { - this.brand = brand; - } - - public String getItemName() { - return itemName; - } - - public void setItemName(String itemName) { - this.itemName = itemName; - } - - public double getPrice() { - return price; - } - - public void setPrice(double price) { - this.price = price; - } -} ----- - - -== Tower - - -[source,java] ----- -package org.superbiz.inheritance; - -import javax.persistence.Entity; - -@Entity -public class Tower extends Item { - private Fit fit; - private String tubing; - - public static enum Fit { - Custom, Exact, Universal - } - - public Fit getFit() { - return fit; - } - - public void setFit(Fit fit) { - this.fit = fit; - } - - public String getTubing() { - return tubing; - } - - public void setTubing(String tubing) { - this.tubing = tubing; - } - - ; -} ----- - - -== Wakeboard - - -[source,java] ----- -package org.superbiz.inheritance; - -import javax.persistence.Entity; - -@Entity -public class Wakeboard extends Wearable { -} ----- - - -== WakeboardBinding - - -[source,java] ----- -package org.superbiz.inheritance; - -import javax.persistence.Entity; - -@Entity -public class WakeboardBinding extends Wearable { -} ----- - - -== WakeRiderImpl - - -[source,java] ----- -package org.superbiz.inheritance; - -import javax.ejb.Stateless; -import javax.jws.WebService; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.PersistenceContextType; -import javax.persistence.Query; -import java.util.List; - -/** - * This is an EJB 3 style pojo stateless session bean Every stateless session - * bean implementation must be annotated using the annotation @Stateless This - * EJB has a single interface: {@link WakeRiderWs} a webservice interface. - */ -@Stateless -@WebService( - portName = "InheritancePort", - serviceName = "InheritanceWsService", - targetNamespace = "http://superbiz.org/wsdl", - endpointInterface = "org.superbiz.inheritance.WakeRiderWs") -public class WakeRiderImpl implements WakeRiderWs { - - @PersistenceContext(unitName = "wakeboard-unit", type = PersistenceContextType.TRANSACTION) - private EntityManager entityManager; - - public void addItem(Item item) throws Exception { - entityManager.persist(item); - } - - public void deleteMovie(Item item) throws Exception { - entityManager.remove(item); - } - - public List<Item> getItems() throws Exception { - Query query = entityManager.createQuery("SELECT i FROM Item i"); - List<Item> items = query.getResultList(); - return items; - } -} ----- - - -== WakeRiderWs - - -[source,java] ----- -package org.superbiz.inheritance; - -import javax.jws.WebService; -import javax.xml.bind.annotation.XmlSeeAlso; -import java.util.List; - -/** - * This is an EJB 3 webservice interface that uses inheritance. - */ -@WebService(targetNamespace = "http://superbiz.org/wsdl") -@XmlSeeAlso({Wakeboard.class, WakeboardBinding.class, Tower.class}) -public interface WakeRiderWs { - public void addItem(Item item) throws Exception; - - public void deleteMovie(Item item) throws Exception; - - public List<Item> getItems() throws Exception; -} ----- - - -== Wearable - - -[source,java] ----- -package org.superbiz.inheritance; - -import javax.persistence.MappedSuperclass; - -@MappedSuperclass -public abstract class Wearable extends Item { - protected String size; - - public String getSize() { - return size; - } - - public void setSize(String size) { - this.size = size; - } -} ----- - - -== ejb-jar.xml - - -[source,xml] ----- -<ejb-jar/> ----- - - - -== persistence.xml - - -[source,xml] ----- -<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> - - <persistence-unit name="wakeboard-unit"> - - <jta-data-source>wakeBoardDatabase</jta-data-source> - <non-jta-data-source>wakeBoardDatabaseUnmanaged</non-jta-data-source> - - <class>org.superbiz.inheritance.Item</class> - <class>org.superbiz.inheritance.Tower</class> - <class>org.superbiz.inheritance.Wakeboard</class> - <class>org.superbiz.inheritance.WakeboardBinding</class> - <class>org.superbiz.inheritance.Wearable</class> - - <properties> - <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> - </properties> - - </persistence-unit> -</persistence> ----- - - -== InheritanceTest - - -[source,java] ----- -package org.superbiz.inheritance; - -import junit.framework.TestCase; -import org.superbiz.inheritance.Tower.Fit; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.xml.namespace.QName; -import javax.xml.ws.Service; -import java.net.URL; -import java.util.List; -import java.util.Properties; - -public class InheritanceTest extends TestCase { - - //START SNIPPET: setup - private InitialContext initialContext; - - protected void setUp() throws Exception { - - Properties p = new Properties(); - p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory"); - p.put("wakeBoardDatabase", "new://Resource?type=DataSource"); - p.put("wakeBoardDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); - p.put("wakeBoardDatabase.JdbcUrl", "jdbc:hsqldb:mem:wakeBoarddb"); - - p.put("wakeBoardDatabaseUnmanaged", "new://Resource?type=DataSource"); - p.put("wakeBoardDatabaseUnmanaged.JdbcDriver", "org.hsqldb.jdbcDriver"); - p.put("wakeBoardDatabaseUnmanaged.JdbcUrl", "jdbc:hsqldb:mem:wakeBoarddb"); - p.put("wakeBoardDatabaseUnmanaged.JtaManaged", "false"); - - p.put("openejb.embedded.remotable", "true"); - - initialContext = new InitialContext(p); - } - //END SNIPPET: setup - - /** - * Create a webservice client using wsdl url - * - * @throws Exception - */ - //START SNIPPET: webservice - public void testInheritanceViaWsInterface() throws Exception { - Service service = Service.create( - new URL("http://127.0.0.1:4204/WakeRiderImpl?wsdl"), - new QName("http://superbiz.org/wsdl", "InheritanceWsService")); - assertNotNull(service); - - WakeRiderWs ws = service.getPort(WakeRiderWs.class); - - Tower tower = createTower(); - Item item = createItem(); - Wakeboard wakeBoard = createWakeBoard(); - WakeboardBinding wakeBoardbinding = createWakeboardBinding(); - - ws.addItem(tower); - ws.addItem(item); - ws.addItem(wakeBoard); - ws.addItem(wakeBoardbinding); - - - List<Item> returnedItems = ws.getItems(); - - assertEquals("testInheritanceViaWsInterface, nb Items", 4, returnedItems.size()); - - //check tower - assertEquals("testInheritanceViaWsInterface, first Item", returnedItems.get(0).getClass(), Tower.class); - tower = (Tower) returnedItems.get(0); - assertEquals("testInheritanceViaWsInterface, first Item", tower.getBrand(), "Tower brand"); - assertEquals("testInheritanceViaWsInterface, first Item", tower.getFit().ordinal(), Fit.Custom.ordinal()); - assertEquals("testInheritanceViaWsInterface, first Item", tower.getItemName(), "Tower item name"); - assertEquals("testInheritanceViaWsInterface, first Item", tower.getPrice(), 1.0d); - assertEquals("testInheritanceViaWsInterface, first Item", tower.getTubing(), "Tower tubing"); - - //check item - assertEquals("testInheritanceViaWsInterface, second Item", returnedItems.get(1).getClass(), Item.class); - item = (Item) returnedItems.get(1); - assertEquals("testInheritanceViaWsInterface, second Item", item.getBrand(), "Item brand"); - assertEquals("testInheritanceViaWsInterface, second Item", item.getItemName(), "Item name"); - assertEquals("testInheritanceViaWsInterface, second Item", item.getPrice(), 2.0d); - - //check wakeboard - assertEquals("testInheritanceViaWsInterface, third Item", returnedItems.get(2).getClass(), Wakeboard.class); - wakeBoard = (Wakeboard) returnedItems.get(2); - assertEquals("testInheritanceViaWsInterface, third Item", wakeBoard.getBrand(), "Wakeboard brand"); - assertEquals("testInheritanceViaWsInterface, third Item", wakeBoard.getItemName(), "Wakeboard item name"); - assertEquals("testInheritanceViaWsInterface, third Item", wakeBoard.getPrice(), 3.0d); - assertEquals("testInheritanceViaWsInterface, third Item", wakeBoard.getSize(), "WakeBoard size"); - - //check wakeboardbinding - assertEquals("testInheritanceViaWsInterface, fourth Item", returnedItems.get(3).getClass(), WakeboardBinding.class); - wakeBoardbinding = (WakeboardBinding) returnedItems.get(3); - assertEquals("testInheritanceViaWsInterface, fourth Item", wakeBoardbinding.getBrand(), "Wakeboardbinding brand"); - assertEquals("testInheritanceViaWsInterface, fourth Item", wakeBoardbinding.getItemName(), "Wakeboardbinding item name"); - assertEquals("testInheritanceViaWsInterface, fourth Item", wakeBoardbinding.getPrice(), 4.0d); - assertEquals("testInheritanceViaWsInterface, fourth Item", wakeBoardbinding.getSize(), "WakeBoardbinding size"); - } - //END SNIPPET: webservice - - private Tower createTower() { - Tower tower = new Tower(); - tower.setBrand("Tower brand"); - tower.setFit(Fit.Custom); - tower.setItemName("Tower item name"); - tower.setPrice(1.0f); - tower.setTubing("Tower tubing"); - return tower; - } - - private Item createItem() { - Item item = new Item(); - item.setBrand("Item brand"); - item.setItemName("Item name"); - item.setPrice(2.0f); - return item; - } - - private Wakeboard createWakeBoard() { - Wakeboard wakeBoard = new Wakeboard(); - wakeBoard.setBrand("Wakeboard brand"); - wakeBoard.setItemName("Wakeboard item name"); - wakeBoard.setPrice(3.0f); - wakeBoard.setSize("WakeBoard size"); - return wakeBoard; - } - - private WakeboardBinding createWakeboardBinding() { - WakeboardBinding wakeBoardBinding = new WakeboardBinding(); - wakeBoardBinding.setBrand("Wakeboardbinding brand"); - wakeBoardBinding.setItemName("Wakeboardbinding item name"); - wakeBoardBinding.setPrice(4.0f); - wakeBoardBinding.setSize("WakeBoardbinding size"); - return wakeBoardBinding; - } -} ----- - - -= Running - - - -[source] ----- -------------------------------------------------------- - T E S T S -------------------------------------------------------- -Running org.superbiz.inheritance.InheritanceTest -Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 -http://tomee.apache.org/ -INFO - openejb.home = /Users/dblevins/examples/webservice-inheritance -INFO - openejb.base = /Users/dblevins/examples/webservice-inheritance -INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) -INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) -INFO - Configuring Service(id=wakeBoardDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database) -INFO - Configuring Service(id=wakeBoardDatabase, type=Resource, provider-id=Default JDBC Database) -INFO - Found EjbModule in classpath: /Users/dblevins/examples/webservice-inheritance/target/classes -INFO - Beginning load: /Users/dblevins/examples/webservice-inheritance/target/classes -INFO - Configuring enterprise application: /Users/dblevins/examples/webservice-inheritance/classpath.ear -INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container) -INFO - Auto-creating a container for bean WakeRiderImpl: Container(type=STATELESS, id=Default Stateless Container) -INFO - Configuring PersistenceUnit(name=wakeboard-unit) -INFO - Enterprise application "/Users/dblevins/examples/webservice-inheritance/classpath.ear" loaded. -INFO - Assembling app: /Users/dblevins/examples/webservice-inheritance/classpath.ear -INFO - PersistenceUnit(name=wakeboard-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 396ms -INFO - Created Ejb(deployment-id=WakeRiderImpl, ejb-name=WakeRiderImpl, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=WakeRiderImpl, ejb-name=WakeRiderImpl, container=Default Stateless Container) -INFO - Deployed Application(path=/Users/dblevins/examples/webservice-inheritance/classpath.ear) -INFO - Initializing network services -INFO - Creating ServerService(id=httpejbd) -INFO - Creating ServerService(id=cxf) -INFO - Creating ServerService(id=admin) -INFO - Creating ServerService(id=ejbd) -INFO - Creating ServerService(id=ejbds) -INFO - Initializing network services - ** Starting Services ** - NAME IP PORT - httpejbd 127.0.0.1 4204 - admin thread 127.0.0.1 4200 - ejbd 127.0.0.1 4201 - ejbd 127.0.0.1 4203 -------- -Ready! -WARN - Found no persistent property in "org.superbiz.inheritance.WakeboardBinding" -WARN - Found no persistent property in "org.superbiz.inheritance.Wakeboard" -WARN - Found no persistent property in "org.superbiz.inheritance.WakeboardBinding" -WARN - Found no persistent property in "org.superbiz.inheritance.Wakeboard" -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.442 sec - -Results : - -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 ----- - - http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/efed31f4/src/main/jbake/content/examples/webservice-security.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/webservice-security.adoc b/src/main/jbake/content/examples/webservice-security.adoc deleted file mode 100755 index 05588e3..0000000 --- a/src/main/jbake/content/examples/webservice-security.adoc +++ /dev/null @@ -1,233 +0,0 @@ -= Webservice Security -:jbake-date: 2016-09-06 -:jbake-type: page -:jbake-tomeepdf: -:jbake-status: published - -Example webservice-security can be browsed at https://github.com/apache/tomee/tree/master/examples/webservice-security - - -*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* - -== CalculatorImpl - - -[source,java] ----- -package org.superbiz.calculator; - -import javax.annotation.security.DeclareRoles; -import javax.annotation.security.RolesAllowed; -import javax.ejb.Stateless; -import javax.jws.WebService; - -/** - * This is an EJB 3 style pojo stateless session bean - * Every stateless session bean implementation must be annotated - * using the annotation @Stateless - * This EJB has a single interface: CalculatorWs a webservice interface. - */ -//START SNIPPET: code -@DeclareRoles(value = {"Administrator"}) -@Stateless -@WebService( - portName = "CalculatorPort", - serviceName = "CalculatorWsService", - targetNamespace = "http://superbiz.org/wsdl", - endpointInterface = "org.superbiz.calculator.CalculatorWs") -public class CalculatorImpl implements CalculatorWs, CalculatorRemote { - - @RolesAllowed(value = {"Administrator"}) - public int sum(int add1, int add2) { - return add1 + add2; - } - - @RolesAllowed(value = {"Administrator"}) - public int multiply(int mul1, int mul2) { - return mul1 * mul2; - } -} ----- - - -== CalculatorRemote - - -[source,java] ----- -package org.superbiz.calculator; - -import javax.ejb.Remote; - -@Remote -public interface CalculatorRemote { - - public int sum(int add1, int add2); - - public int multiply(int mul1, int mul2); -} ----- - - -== CalculatorWs - - -[source,java] ----- -package org.superbiz.calculator; - -import javax.jws.WebService; - -//END SNIPPET: code - -/** - * This is an EJB 3 webservice interface - * A webservice interface must be annotated with the @Local - * annotation. - */ -//START SNIPPET: code -@WebService(targetNamespace = "http://superbiz.org/wsdl") -public interface CalculatorWs { - - public int sum(int add1, int add2); - - public int multiply(int mul1, int mul2); -} ----- - - -== ejb-jar.xml - - -[source,xml] ----- -<ejb-jar/> ----- - - -== openejb-jar.xml - - -[source,xml] ----- -<openejb-jar xmlns="http://tomee.apache.org/xml/ns/openejb-jar-2.2"> - <enterprise-beans> - <session> - <ejb-name>CalculatorImpl</ejb-name> - <web-service-security> - <security-realm-name/> - <transport-guarantee>NONE</transport-guarantee> - <auth-method>BASIC</auth-method> - </web-service-security> - </session> - </enterprise-beans> -</openejb-jar> ----- - - -== CalculatorTest - - -[source,java] ----- -package org.superbiz.calculator; - -import junit.framework.TestCase; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.xml.namespace.QName; -import javax.xml.ws.BindingProvider; -import javax.xml.ws.Service; -import java.net.URL; -import java.util.Properties; - -public class CalculatorTest extends TestCase { - - //START SNIPPET: setup - private InitialContext initialContext; - - protected void setUp() throws Exception { - Properties properties = new Properties(); - properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory"); - properties.setProperty("openejb.embedded.remotable", "true"); - - initialContext = new InitialContext(properties); - } - //END SNIPPET: setup - - /** - * Create a webservice client using wsdl url - * - * @throws Exception - */ - //START SNIPPET: webservice - public void testCalculatorViaWsInterface() throws Exception { - URL url = new URL("http://127.0.0.1:4204/CalculatorImpl?wsdl"); - QName calcServiceQName = new QName("http://superbiz.org/wsdl", "CalculatorWsService"); - Service calcService = Service.create(url, calcServiceQName); - assertNotNull(calcService); - - CalculatorWs calc = calcService.getPort(CalculatorWs.class); - ((BindingProvider) calc).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "jane"); - ((BindingProvider) calc).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "waterfall"); - assertEquals(10, calc.sum(4, 6)); - assertEquals(12, calc.multiply(3, 4)); - } - //END SNIPPET: webservice -} ----- - - -= Running - - - -[source] ----- -------------------------------------------------------- - T E S T S -------------------------------------------------------- -Running org.superbiz.calculator.CalculatorTest -Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 -http://tomee.apache.org/ -INFO - openejb.home = /Users/dblevins/examples/webservice-security -INFO - openejb.base = /Users/dblevins/examples/webservice-security -INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) -INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) -INFO - Found EjbModule in classpath: /Users/dblevins/examples/webservice-security/target/classes -INFO - Beginning load: /Users/dblevins/examples/webservice-security/target/classes -INFO - Configuring enterprise application: /Users/dblevins/examples/webservice-security/classpath.ear -INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container) -INFO - Auto-creating a container for bean CalculatorImpl: Container(type=STATELESS, id=Default Stateless Container) -INFO - Enterprise application "/Users/dblevins/examples/webservice-security/classpath.ear" loaded. -INFO - Assembling app: /Users/dblevins/examples/webservice-security/classpath.ear -INFO - Jndi(name=CalculatorImplRemote) --> Ejb(deployment-id=CalculatorImpl) -INFO - Jndi(name=global/classpath.ear/webservice-security/CalculatorImpl!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImpl) -INFO - Jndi(name=global/classpath.ear/webservice-security/CalculatorImpl) --> Ejb(deployment-id=CalculatorImpl) -INFO - Created Ejb(deployment-id=CalculatorImpl, ejb-name=CalculatorImpl, container=Default Stateless Container) -INFO - Started Ejb(deployment-id=CalculatorImpl, ejb-name=CalculatorImpl, container=Default Stateless Container) -INFO - Deployed Application(path=/Users/dblevins/examples/webservice-security/classpath.ear) -INFO - Initializing network services -INFO - Creating ServerService(id=httpejbd) -INFO - Creating ServerService(id=cxf) -INFO - Creating ServerService(id=admin) -INFO - Creating ServerService(id=ejbd) -INFO - Creating ServerService(id=ejbds) -INFO - Initializing network services - ** Starting Services ** - NAME IP PORT - httpejbd 127.0.0.1 4204 - admin thread 127.0.0.1 4200 - ejbd 127.0.0.1 4201 - ejbd 127.0.0.1 4203 -------- -Ready! -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.481 sec - -Results : - -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 ----- - -
