Webservice现在是越来越流行了,它的跨平台,低耦合的特性,得到越来越多开发者的青睐。这里总结几种java开发Webservice的方法,顺便整理下思路。
一、开发环境
集成工具:Eclipse
jdk:jdk1.7
服务器:linux/weblogic
二、服务端
服务端编写很简单,重点是注释,为了更规范些需要开发一个远程接口和远程接口实现类。
接口类:WebserviceTest.java
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService(name="WebserviceTest", targetNamespace="http://webservice.sword.css.com/")
public abstract interface WebserviceTest
{
@WebMethod
@WebResult(name="service", targetNamespace="http://webservice.sword.css.com/")
public abstract String sayHello(@WebParam(name="name") String paramString);
}
远程接口实现类:
import java.io.PrintStream;
import javax.jws.WebService;
@WebService(endpointInterface="com.css.sword.webservice.WebserviceTest")
public class WebserviceTestImpl
implements WebserviceTest
{
public String sayHello(String name)
{
System.out.println("参数为" + name);
return name;
}
}
下面就这几个注释进行简单的解释:
@WebService 这个注释放置在 Java 类的前面,声明这个类的部分方法可以被发布为 Web 服务。其中serviceName: 对外发布的服务名,指定 Web Service 的服务名称:wsdl:service。缺省值为 Java 类的简单名称 + Service。targetNamespace:指定你想要的名称空间,认是使用接口实现类的包名的反缀
@WebMethod 用来修饰实现类中的方法,最常用的功能是不暴露一个方法(@WebMethod(exclude=true))。如果不使用@WebMethod修饰,默认情况下,ejb容器会把所有方法都暴露成web service
@WebParam
注释用于定制从单个参数至 Web Service 消息部件和 XML 元素的映射。
发布服务有两种方式,一种是编程实现,即执行
import javax.xml.ws.Endpoint;
import com.mkyong.ws.HelloWorldImpl;
//Endpoint publisher
public class ServicePublisher{
public static void main(String[] args) {
Endpoint.publish("http://localhost:9100/WebserviceTestImpl", new WebserviceTestImpl());
}
}
现在很多应用服务器进行配置即可代替编程执行,
另一种方式是将其作为ejb发布,也就是将ejb暴露为Webservice。这种方法不用额外的代码,只需按照ejb规则将该Webservice配置好即可,ejb类加上注释@WebService,应用服务器会自动将其发布为一个web服务。这里用的是weblogic,我将这两个类打成jar包放到weblogic上,并修改ejb-jar.xml添加该ejb,部署启动后打开控制台可看到web服务部署成功:
ejb-jar.xml文件添加内容如下:
<session>
<ejb-name>MyserviceEJB</ejb-name>
<business-remote>com.css.sword.webservice.WebserviceTest</business-remote>
<ejb-class>com.css.sword.webservice.WebserviceTestImpl</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
打开浏览器,输入http://localhost:9100/WebserviceTestImpl?WSDL看到如下页面,即说明Webservice发布成功。
三、客户端
客户端开发有很多种方法,这里介绍三种最原始的方法。
1、jdk自带生成客户端
URL wsdlUrl = new URL("http://localhost:9100/WebserviceTestImpl?WSDL");
QName qName = new QName("http://webservice.sword.css.com/","WebserviceTestImplService");
Service s = Service.create(wsdlUrl, qName);
WebserviceTest hs = s.getPort(new QName("http://webservice.sword.css.com/","WebserviceTestImplPort"), WebserviceTest.class);
String ret = hs.sayHello("你好");
2、Eclipse生成Webservice客户端
由于Eclipse各个版本都不一样,有的还需要安装插件才可生成,这样就不演示了,按照步骤会生成以下几个文件
客户端代码如下:
WebserviceTestProxy test = new WebserviceTestProxy();
WebserviceTest web = test.getWebserviceTest();
String jj=web.sayHello();
System.out.println(jj);
3、wsimport生成客户端
wsimport是jdk自带的命令,使用起来也很方便,首先定位到你想生成文件的地方(这里为d:tmp),键入命令:
wsimport -keep http://localhost:9100/WebserviceTestImpl?WSDL
会看到如下结果:
这说明已经编译成功,此时到tmp文件夹下可以看到生成如下文件:
将所有java文件复制到你建的工程里,然后编写客户端代码:
WebserviceTestImplService test = new WebserviceTestImplService();
WebserviceTest webservice = (WebserviceTest) test.getWebserviceTestImplPort();
webservice.sayHello("hello");