java原生实现webservice

1、webservice概述

     WebService是基于xml做消息传输的web应用程序。他支持跨平台,跨语言。既可以用.net实现也可以用java实现。

     WSDL:webservice描述语言,使用xml描述对象的函数,参数,返回值,即是机器可以阅读,也是人可以阅读的。

     SOAP:简单对象访问协议,webservice就是利用soap,在应用程序之间实现通信。

2、java原生实现代码

这里会建立四个java文件,分别是BaseService.java,BusinessService.java,WSServer.java,WSClient.java,前面两个文件用来建立webservice的接口,后面两个用来测试。

BaseService.java

 

package com.xxx.webservice;
import javax.jws.WebService;
@WebService
public interface BaseService {
       public int add(int a,int b);
       public String sayHello(String name);
}

 

BusinessService.java

 

package com.xxx.webservice;
import javax.jws.WebService;
@WebService(endpointInterface="com.xxx.webservice.BaseService")
public class BusinessService implements BaseService {
    @Override
    public int add(int a, int b) {
	return a + b ;
    }
    @Override
    public String sayHello(String name) {
	return "hello, " + name;
    }
}

 

WSServer.java

 

package com.xxx.webservice;

import javax.xml.ws.Endpoint;

public class WSServer {

    public static void main(String[] args) {
	Endpoint.publish("http://localhost:8080/ns", new BusinessService());
	System.out.println("webservice publish success.");
    }

}

 

WSClient.java

 

package com.xxx.webservice;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class WSClient {

    public static void main(String[] args) {
	  try {
	    URL url = new URL("http://localhost:8080/ns?wsdl");
	    QName qName = new QName("http://webservice.xxx.com/","BusinessServiceService");
	    Service service = Service.create(url,qName);
	    BaseService baseService = service.getPort(BaseService.class);
	    System.out.println(baseService.add(5, 8));
	    System.out.println(baseService.sayHello("xxx"));
	} catch (MalformedURLException e) {
	    e.printStackTrace();
	}
    }

}

 

3、测试结果及说明

线运行WSServer.java,再运行WSClient.java,结果会先启动webservice,并监听。

等待客户端连接,客户端连接并调用对应的方法,然后返回结果,客户端打印结果。

这里有几个需要注意的问题,第一个是QName qName = new QName("http://webservice.xxx.com","BusinessServiceService");,一个是namespaceURI这个正好是和包名反着的,再一个就是localPart这个参数,默认就是类名+Service,这个可以在启动server端之后,在它发布的服务中可以看到,确实如此命名。

在service.getPort(interface.class)函数中,必须要传入接口,而不能使用实现类。否则会报XXX不是一个interface,如下图:

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值