Search code examples
javajax-wsejb-3.0websphere-7

EJB @Stateless and @WebService on Websphere 7


I am looking all over the place to try and figure out how to turn a stateless session bean into a JAX-WS webservice (I am using WAS 7, Websphere Integration Developer, EJB 3). Not Jax-RPC. I am officially sick and tired of messing around with the wizard that comes with WID. Fore some reason it simply won't let me do that... I have tried creating a JAX-WS webservice from a Java bean, In other words, I created a Java class and ran the wizard on that thing, and it created a whole new Project...

Is there a tutorial out there somewhere that will just give me what I need to know to create this Webservice without having to use the wizard?


Solution

  • From the The Java EE 5 Tutorial try A Web Service Example: helloservice - The Java EE 5 Tutorial.

    Others:


    Example

    I wrote a small sample application.

    Structure of Projects

    `-- HelloEAR
    |   |-- .project
    |   `-- .settings
    |       |-- org.eclipse.wst.common.component
    |       |-- org.eclipse.wst.common.project.facet.core.xml
    `-- HelloEJB
    |   `-- .apt_generated
    |   |   `-- org
    |   |       `-- paulvargas
    |   |           `-- ejb
    |   |               `-- jaxws
    |   |                   |-- SayHello.java
    |   |                   |-- SayHelloResponse.java
    |   |-- .classpath
    |   |-- .factorypath
    |   |-- .project
    |   `-- .settings
    |   |   |-- org.eclipse.jdt.apt.core.prefs
    |   |   |-- org.eclipse.jdt.core.prefs
    |   |   |-- org.eclipse.wst.common.component
    |   |   |-- org.eclipse.wst.common.project.facet.core.xml
    |   `-- ejbModule
    |   |   `-- META-INF
    |   |   |   |-- ibm-webservices-bnd.xmi
    |   |   `-- org
    |   |   |   `-- paulvargas
    |   |   |       `-- ejb
    |   |   |           |-- HelloBean.class
    |   |   |           |-- HelloBean.java
    |   |   |           |-- HelloLocal.class
    |   |   |           |-- HelloLocal.java
    |   |   |           |-- HelloRemote.class
    |   |   |           |-- HelloRemote.java
    |   |   |           `-- jaxws
    |   |   |               |-- SayHello.class
    |   |   |               |-- SayHelloResponse.class
    `-- HelloWeb
    |   `-- .apt_generated
    |   |-- .classpath
    |   |-- .factorypath
    |   |-- .project
    |   `-- .settings
    |   |   |-- .jsdtscope
    |   |   |-- org.eclipse.jdt.apt.core.prefs
    |   |   |-- org.eclipse.jdt.core.prefs
    |   |   |-- org.eclipse.wst.common.component
    |   |   |-- org.eclipse.wst.common.project.facet.core.xml
    |   |   |-- org.eclipse.wst.jsdt.ui.superType.container
    |   |   |-- org.eclipse.wst.jsdt.ui.superType.name
    |   `-- src
    |   `-- WebContent
    |   |   `-- WEB-INF
    |   |       `-- classes
    |   |       `-- lib
    |   |       |-- web.xml
    

    enter image description here

    HelloBean.java

    package org.paulvargas.ejb;
    
    import javax.ejb.Stateless;
    import javax.jws.WebService;
    
    @Stateless
    @WebService
    public class HelloBean implements HelloRemote, HelloLocal {
        public String sayHello(String name) {
            return "Hello, " + name + ".";
        }
    }
    

    HelloRemote.java

    package org.paulvargas.ejb;
    
    import javax.ejb.Remote;
    
    @Remote
    public interface HelloRemote {
        String sayHello(String name);
    }
    

    HelloLocal.java

    package org.paulvargas.ejb;
    
    import javax.ejb.Local;
    
    @Local
    public interface HelloLocal {
        String sayHello(String name);
    }
    

    ibm-webservices-bnd.xmi

    <?xml version="1.0" encoding="UTF-8"?>
    <com.ibm.etools.webservice.wsbnd:WSBinding
        xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
        xmlns:com.ibm.etools.webservice.wsbnd="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsbnd.xmi">
        <routerModules transport="http" name="HelloWeb.war" />
    </com.ibm.etools.webservice.wsbnd:WSBinding>
    

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <display-name>HelloWeb</display-name>
        <servlet>
            <servlet-name>org.paulvargas.ejb.HelloBean</servlet-name>
            <servlet-class>com.ibm.ws.websvcs.transport.http.WASAxis2Servlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>org.paulvargas.ejb.HelloBean</servlet-name>
            <url-pattern>/HelloBeanService</url-pattern>
        </servlet-mapping>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>default.html</welcome-file>
            <welcome-file>default.htm</welcome-file>
            <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    

    Files SayHello.java and SayHelloResponse.java are generated automatically by the IDE. You can see the deployed WSDL file in http://localhost:9080/HelloWeb/HelloBeanService/HelloBeanService.wsdl