1 EndPoint发布服务
package com.gosaint.provider; import javax.jws.WebService; /** * @Authgor: gosaint * @Description: * @Date Created in 10:24 2018/1/8 * @Modified By: */ @WebService public interface Calculator { public int add(int a, int b); public int multi(int a, int b); }
@WebService注解声明了该接口是一个webService接口。然后我们来写该接口的实现类
package com.gosaint.provider; import javax.jws.WebService; /** * @Authgor: gosaint * @Description: * @Date Created in 10:25 2018/1/8 * @Modified By: */ @WebService(endpointInterface = "com.gosaint.provider.Calculator") public class CalculatorImpl implements Calculator { @Override public int add(int a, int b) { return a+b; } @Override public int multi(int a, int b) { return a*b; } public int minus(int a, int b) { return a - b; } }
在该类中,实现了接口Calculator.覆盖其中的方法,并且我们自定义mins()方法,@WebService(endpointInterface="com.gosaint.Calculator")该主注解的作用也是声明该类是一个WebService接口。而且该服务的接口是Calcluator接口。后面的是该接口的全限定名称。
此时我们就可以发布服务了。
package com.gosaint.provider; import javax.xml.ws.Endpoint; /** * @Authgor: gosaint * @Description: * @Date Created in 10:27 2018/1/8 * @Modified By: */ // 服务发布 public class Server { public static void main(String[] args) { Endpoint.publish("http://localhost:8088/calculator", new CalculatorImpl()); } }
publish()方法中的第一个参数就是发布服务的地址,后面一个参数就是服务的实现类。当服务发布成功后就可以去浏览器中进行访问:http://localhost:8088/calculator?wsdl
当出现下面所示的类似的内容时则证明服务发布成功了。
2 客户端的调用
package com.gosaint.provider; import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; /** * @Authgor: gosaint * @Description: * @Date Created in 10:31 2018/1/8 * @Modified By: */ public class Client { public static void main(String[] args) throws Exception{ // nameSpace这里需要包名倒写 QName qName=new QName("http://provider.gosaint.com/", "CalculatorImplService"); URL url = new URL("http://localhost:8088/calculator?wsdl"); Service service=Service.create(url,qName); Calculator port = service.getPort(Calculator.class); System.out.println(port.add(3,9)); } }
在这里客户端就可以直接对该接口实现调用了。QName对象中,要注意两个参数的名称。第一个参数应该是http://接口的包名倒写。第二个参数是服务的名称。这个可以在发布服务时生成的xml文件中获取。
之后是创建服务,获取接口,调用方法。
<service name="CalculatorImplService"> <port name="CalculatorImplPort" binding="tns:CalculatorImplPortBinding"> <soap:address location="http://localhost:8088/calculator"/> </port> </service>
测试结果:12
3 客户端代码的生成(利用Java自身的wsdl工具)
只需要打开CMD输入如下的命令就能生成对应的文件,我在这里直接生成在桌面上,具体生成在指定的文件下或者包下的参数大家可以去自行百度。
wsimport -keep http://localhost:8088/calculator?wsdl
此时就可以直接调用这里面的一些类或者方法了。