EJB开发web service

服务端的开发

用EJB就行服务端开发是非常简单的,EJB可以把无状态会话bean通过@WebService注解瞬间暴露为web服务。

例子

@Stateless

@Remote(JsunSer.class)

@WebService

public class JsunSerImpl implements JsunSer{

@WebMethod

public String run() {

return "succ";

}

public String run2(){

return "error";

}

}

如果不加@WebMethod那么所有的public 方法都会被暴露为服务,加了就只有run()被暴露为服务。

发布EJB,http://localhost:8080/jbossws/services查看发布的服务里面有wsdl地址

如图

http://127.0.0.1:8080/EJB_WebService/JsunSerImpl?wsdl

就是服务地址,开发客户端的时候会用到,现在一个服务就发布好了

在wsdl中有三个元素注意

wsdl的命名空间会默认以 http://+项目包名

服务的接口端点默认 接口名+Bean

服务的名称默认以 实现类+Service

以上都可以在注解@WebService 中修改定义

客户端的开发

需要JAX-WS帮助我们自动生成java文件

http://jax-ws.dev.java.net下载最新的

解压打开lib目录将其中的jar文件全部copy到项目的lib目录下(没有lib建一个)

再利用ant build.xml文件运行

build.xml

<?xml version="1.0"?>

<project name="client_ws" default="wsclientgen" basedir=".">

<property name="src.dir" value="${basedir}/src" />

<path id="build.classpath" description="设置类路径">

<fileset dir="${basedir}/lib">

<include name="*"/>

</fileset>

</path>

<target name="wsclientgen" description="生成web服务客户端">

<taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport" classpathref="build.classpath"/>

<wsimport

wsdl="http://127.0.0.1:8080/EJB_WebService/JsunSerImpl?wsdl"

sourcedestdir="${src.dir}"

package="com.jsun"

keep="true"

verbose="true"

destdir="${basedir}/bin"/>

</target>

</project>

其中keep指如果原来存在旧文件存在是否替换,verbose是否显示生成细节,destdir指编译后class文件存放的目录

运行ant 就会看到

java文件自动生成了

我们在调用时 如

JsunSer j=new JsunSer();

JsunSerImpl jl=j.getJsunPort();

jl就是我们要使用的对象

JsunSer是服务端项目中的接口类的名字

JsunSerImpl是自动生成的

你可能感兴趣的:(Web,bean,ant,webservice,ejb)