现在我们以前来看下,如何利用java API给我们提供的WebService接口来开发一个简单的小案例。
1、首先我们定义一个接口:注意要引入Webservice的注解表示这是一个webservice的接口。
package com.lyl.service; import javax.jws.WebService; @WebService public interface IMyService { public int add(int a,int b); public int minus(int a,int b); }
2、然后定义个实现类:要添加@WebService(endpointInterface="com.lyl.service.IMyService")
表示要实现的接口。
package com.lyl.service; import javax.jws.WebService; @WebService(endpointInterface="com.lyl.service.IMyService") public class MyServiceImpl implements IMyService { public int add(int a, int b) { System.out.println(a+"+"+b+"="+(a+b)); return a+b; } public int minus(int a, int b) { System.out.println(a+"-"+b+"="+(a-b)); return a-b; } }
3、在定义一个发布服务的类:用于发布在网上的路径。
package com.lyl.service; import javax.xml.ws.Endpoint; public class MyServer { public static void main(String[] args) { String address="http://localhost:8080/ns"; Endpoint.publish(address,new MyServiceImpl()); } }
这样我们的一个WebService就已经定义好了,我们可以再浏览器中输入服务类中的发布的地址:http://localhost:8080/ns即可访问了,这时可以看到如许页面:
5、点击上面的超链接,就可看到自动生成的WSDL文件了如:
<?xml version="1.0" encoding="UTF-8" ?> - <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.2 in JDK 7. --> - <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.2 in JDK 7. --> - <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.lyl.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.lyl.com/" name="MyServiceImplService"> - <types> - <xsd:schema> <xsd:import namespace="http://service.lyl.com/" schemaLocation="http://localhost:8080/ns?xsd=1" /> </xsd:schema> </types> - <message name="minus"> <part name="parameters" element="tns:minus" /> </message> - <message name="minusResponse"> <part name="parameters" element="tns:minusResponse" /> </message> - <message name="add"> <part name="parameters" element="tns:add" /> </message> - <message name="addResponse"> <part name="parameters" element="tns:addResponse" /> </message> - <portType name="IMyService"> - <operation name="minus"> <input wsam:Action="http://service.lyl.com/IMyService/minusRequest" message="tns:minus" /> <output wsam:Action="http://service.lyl.com/IMyService/minusResponse" message="tns:minusResponse" /> </operation> - <operation name="add"> <input wsam:Action="http://service.lyl.com/IMyService/addRequest" message="tns:add" /> <output wsam:Action="http://service.lyl.com/IMyService/addResponse" message="tns:addResponse" /> </operation> </portType> - <binding name="MyServiceImplPortBinding" type="tns:IMyService"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <operation name="minus"> <soap:operation soapAction="" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> - <operation name="add"> <soap:operation soapAction="" /> - <input> <soap:body use="literal" /> </input> - <output> <soap:body use="literal" /> </output> </operation> </binding> - <service name="MyServiceImplService"> - <port name="MyServiceImplPort" binding="tns:MyServiceImplPortBinding"> <soap:address location="http://localhost:8080/ns" /> </port> </service> </definitions>
6、 接下来我们通过JDK中自带的命令wsimport命令(在JDK的安装目录bin文件夹下的wsimpor.exe,如果配置了JDK的环境变量的话,可以再任以目录下执行此命令,否则要转到bin目录下才能用该命令)将wsdl文件导入到本地,生成客户端代码:
其中参数-keep:保存源码也就是java文件-d 指定生成源代码存放的路径(如上是D://01文件夹下) -verbose意思是显示详细信息 http://localhost:8080/ns?wsdl指定的wsdl的网上路径,如果是在本来的话可以使本地路径。
7、再新建一个java Application项目,在src包下,添加生成的客户端代码,并添加一个测试类TestClient
如
8、添加一个测试类:
package com.lyl.test; import com.lyl.service.IMyService; import com.lyl.service.MyServiceImplService; public class TestClient { public static void main(String[] args) { MyServiceImplService mis=new MyServiceImplService(); IMyService myservice=mis.getMyServiceImplPort(); myservice.add(4, 6); } }
9、执行后即可看结果(服务不要关闭):
好了,一个简单的基于JAX-WS的webservice和客户端和服务端就建好了,有兴趣的话可以试一试。对了jdk最好是1.7的,要不然会有一点小错误,相信你能解决的 。