EJB 2.1 Service Endpiont: Custom Types
ameisinger May 30, 2005 7:56 AMHi,
I am using JBoss 4.0.2, Eclipse 3.0.2 with JBossIDE 1.4.1e30 and xDoclet 1.2.3. I wrote a ejb 2.1 service endpoint with standard data types - it works fine. Now I want to add a custom object (Person). Which steps must be done?
My file-structure is as follows:
/Tutorial /src /tutorial.ejb (package) HelloBean.java /tutorial.interfaces (package) TutorialHelloEndpoint.java /META-INF /wsdl service.wsdl ejb-jar.xml jboss.xml mapping.xml webservices.xml /JRE System Library [J2SDK 1.4.2_05] ... /J2EE 1.4 Libraries (JBoss-IDE) ... /Web Services 1.0 Libraries (JBoss-IDE) ... /build tutorial.jar /resources template.wsdl wsdl-build.xdt generate-wsdl-script.xml packaging-build.wsdl wsdl-build.xml xdoclet.properties xdoclet-build.xml
I'll give you an overview of my code:
HelloBean.java
/*
* Created on 25.05.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package tutorial.ejb;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* @ejb.bean name="Hello"
* display-name="Name for Hello"
* description="Description for Hello"
* jndi-name="ejb/Hello"
* type="Stateless"
* view-type="service-endpoint"
*
* @ejb.interface
* service-endpoint-class="tutorial.interfaces.TutorialHelloEndpoint"
*
* @wsee.port-component
* name="TutorialHelloEndpointPort"
*/
public class HelloBean implements SessionBean {
public HelloBean() {}
public void setSessionContext(SessionContext ctx) throws EJBException, RemoteException {}
public void ejbRemove() throws EJBException, RemoteException {}
public void ejbActivate() throws EJBException, RemoteException {}
public void ejbPassivate() throws EJBException, RemoteException {}
public void ejbCreate() throws CreateException {}
/**
* Business method
* @ejb.interface-method view-type = "service-endpoint"
*/
public String sayHello(String name) {
return "Hello " + name + "!";
}
}
TutorialHelloEndpoint
/*
* Generated by XDoclet - Do not edit!
*/
package tutorial.interfaces;
/**
* Service endpoint interface for Hello.
*/
public interface TutorialHelloEndpoint
extends java.rmi.Remote
{
/**
* Business method
*/
public java.lang.String sayHello( java.lang.String name )
throws java.rmi.RemoteException;
}
mapping.xml
<?xml version="1.0" encoding="UTF-8"?> <java-wsdl-mapping xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/j2ee_jaxrpc_mapping_1_1.xsd" version="1.1"> <package-mapping> <package-type>tutorial.ejb</package-type> <namespaceURI>http://Hello</namespaceURI> </package-mapping> </java-wsdl-mapping>
webservices.xml
<?xml version="1.0" encoding="UTF-8"?> <webservices xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/j2ee_web_services_1_1.xsd" version="1.1"> <webservice-description> <icon> </icon> <webservice-description-name>Tutorial</webservice-description-name> <wsdl-file>META-INF/wsdl/service.wsdl</wsdl-file> <jaxrpc-mapping-file>META-INF/mapping.xml</jaxrpc-mapping-file> <port-component> <icon> </icon> <port-component-name>TutorialHelloEndpointPort</port-component-name> <wsdl-port>TutorialHelloEndpointPort</wsdl-port> <service-endpoint-interface>tutorial.interfaces.TutorialHelloEndpoint</service-endpoint-interface> <service-impl-bean> <ejb-link>Hello</ejb-link> </service-impl-bean> </port-component> </webservice-description> </webservices>
jboss.xml
... <session> <ejb-name>Hello</ejb-name> <method-attributes> </method-attributes> </session> ...
ejb-jar.xml
... <description><![CDATA[No Description.]]></description> <display-name>Generated by XDoclet</display-name> <enterprise-beans> <!-- Session Beans --> <session > <description><![CDATA[Description for Hello]]></description> <display-name>Name for Hello</display-name> <ejb-name>Hello</ejb-name> <service-endpoint>tutorial.interfaces.TutorialHelloEndpoint</service-endpoint> <ejb-class>tutorial.ejb.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> ...
wsdl-build.xml (ant-script)
... <target name="init"> <mkdir dir="src/META-INF/wsdl" /> <delete file="src/META-INF/wsdl/service.wsdl" /> <copy file="resources/template.wsdl" tofile="src/META-INF/wsdl/service.wsdl" /> </target> <target name="generateall" depends="init,generateTutorialHelloEndpoint"> </target> <target name="generateTutorialHelloEndpoint"> <echo message="Generate WSDL for TutorialHelloEndpoint" /> <java classname="org.apache.axis.wsdl.Java2WSDL" classpathref="build.classpath" fork="yes"> <arg value="-Isrc/META-INF/wsdl/service.wsdl" /> <arg value="-osrc/META-INF/wsdl/service.wsdl" /> <arg value="-lhttp://this.value.is.replaced.by.jboss" /> <arg value="-STutorialHelloEndpointService" /> <arg value="-sTutorialHelloEndpointPort" /> <arg value="-uENCODED" /> <arg value="-ptutorial.interfaces=http://Hello" /> <arg value="tutorial.interfaces.TutorialHelloEndpoint" /> </java> </target> ...
xdoclet-build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project default="_xdoclet_generation_" name="XDoclet Generator">
<property file="xdoclet-build.properties"/>
<property name="eclipse.home" value="C:/Java/eclipse"/>
<property name="xdoclet.basedir" value="${eclipse.home}/plugins/org.jboss.ide.eclipse.xdoclet.core_1.4.1.e30"/>
<property name="jboss.net.version" value="4.0"/>
<path id="project.classpath"><pathelement location="bin"/>
...
</path>
<path id="xdoclet.classpath">
<path refid="project.classpath"/>
<fileset dir="${xdoclet.basedir}">
<include name="*.jar"/>
<exclude name="xdoclet-module-jboss-net-*.jar"/>
</fileset>
<fileset dir="${xdoclet.basedir}">
<include name="xdoclet-module-jboss-net-${jboss.net.version}*.jar"/>
</fileset>
</path>
<target name="_xdoclet_generation_" depends="N10004"/>
<target name="N10004" description="EJB-Configuration">
<taskdef classpathref="xdoclet.classpath" classname="xdoclet.modules.ejb.EjbDocletTask" name="ejbdoclet"/>
<ejbdoclet ejbSpec="2.1" destDir="src" force="true" >
<deploymentdescriptor destDir="src/META-INF" >
</deploymentdescriptor>
<fileset dir="src" includes="**/*Bean.java" >
</fileset>
<jboss Version="4.0" destDir="src/META-INF" >
</jboss>
<packageSubstitution packages="ejb" substituteWith="interfaces" >
</packageSubstitution>
<service-endpoint pattern="{0}Endpoint" destDir="src" >
</service-endpoint>
</ejbdoclet>
<taskdef classpathref="xdoclet.classpath"
classname="xdoclet.modules.wsee.WseeDocletTask" name="wseedoclet"/>
<wseedoclet jaxrpcMappingFile="META-INF/mapping.xml" wsdlFile="META-INF/wsdl/service.wsdl" destDir="src/META-INF" force="true" >
<deploymentdescriptor>
<configParam name="Name" value="Tutorial" >
</configParam>
</deploymentdescriptor>
<fileset dir="src" includes="**/*Bean.java" excludes="" >
</fileset>
</wseedoclet>
</target>
</project>
packaging-build.xml
<?xml version="1.0" encoding="UTF-8"?> <project default="_packaging_generation_" name="Packaging Generator"> <target name="_packaging_generation_" depends="N10004"/> <target name="N10004" description="Tutorial.jar"> <mkdir dir="build"/> <jar destfile="build/Tutorial.jar"> <zipfileset dir="bin" includes="**/*.class"/> <zipfileset dir="src/META-INF" prefix="META-INF" includes="**/*"/> </jar> </target> </project>
Custom Type: Person
package tutorial.myobjects;
public class Person {
private int nAge;
private String strName;
public Person() {
setNAge(-1);
setStrName("NONAME");
}
public Person(int age, String name) {
setNAge(age);
setStrName(name);
}
public int getNAge() { return nAge; }
public void setNAge(int age) { nAge = age; }
public String getStrName() { return strName; }
public void setStrName(String strName) { this.strName = strName; }
}
Thank you!