服务端的开发
用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是自动生成的