Web Service入门DEMO,对象传递,附源码

项目结构

**环境:**IDE采用MyEclipse 2014, JDK 1.7。 这里为了简便,服务端和客户端代码都放在一个项目中,通常服务端会在另一个项目中,由WSDL自动生成客户端部分代码的方法是一样的。 项目结构

##Service端主要代码 HelloService类中的方法可供客户端调用,这里给了几种常见的注解的用法和自定义对象类型的传递。main方法是必需的,通常会根据需要修改url和端口,之后我们可以通过访问这个路径来生成客户端代码。

package server.source;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

import bean.SimpleBean;

/**
 * 使用Web Service注解将Java类标记为实现 Web Service,亦可用 Web Service接口
 * - targetNamespace 指定从 Web Service 生成的 WSDL 和 XML 元素的 XML 名称空间。缺省值为从包含该 Web Service 的包名映射的名称空间。
 * - serviceName 指定 Web Service 的服务名称: wsdl:service。缺省值为 Java 类的简单名称 + Service。
 */
@WebService(serviceName = "MyService", targetNamespace = "http://webservice")
public class HelloService {

	/** - exclude 指定是否从 Web Service 中排除某一方法。缺省值为  false
	 */
	@WebMethod(exclude = true)
	public String excludeMethod(String param) {
		return " exclude method : " + param;
	}

	/** - operationName 指定与此方法相匹配的 wsdl:operation 的名称。缺省值为 Java 方法的名称
	 */
	@WebMethod(operationName = "aliasMethod")
	@WebResult(name = "myReturn")
	public String any(@WebParam(name = "name") String param) {
		return "alias method : " + param;
	}

	public String simpleMethod(String param) {
		return "simpleMethod : " + param;
	}
	
	//自定义类型的传递
	public List<SimpleBean> getSimpleBeanList() {
		List<SimpleBean> list = new ArrayList<SimpleBean>();
		list.add(new SimpleBean("yang", 23, new Date()));
		list.add(new SimpleBean("Matrix", 33, new Date()));
		
		return list;
	}
	
	//service的输出不会给client端看到
	public void printSimpleBean(SimpleBean bean) {
		System.out.println(bean.toString());
	}
	
	//要输出至client端可以返回string
	public String simpleBean2String(SimpleBean bean) {
		return bean.toString();
	}

	public static void main(String[] args) {
		/**
		 * 发布WebService,注意如果提示:Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: 
		 * Server Runtime Error: java.net.BindException: Address already in use: bind
		 * 则需要修改一下发布端口
		 */
		Endpoint.publish("http://localhost:8011/helloService", new HelloService());
		System.out.println("Server startup...");
	}

}

运行并测试Service端

在HelloService类上右键,选择Run as -> Java Application, 看到控制台输出如下信息即正常 运行Service端

在浏览器中输入方法中的地址http://localhost:8011/helloService 可以看到helloService的相关信息,其中WSDL中有helloService的描述,包括方法、参数、返回值等等。 访问helloServicehelloService的描述 ##生成Client端 创建一个Web Service CLient,在New -> Other中选择Web Service CLient 创建Web Service CLient下一步

WSDL可以通过两种方式引入,本地WSDL文件或者URL路径,这里自然是URL方式。 WSDL路径

生成的客户端代码,放在webservice包下面

生成的客户端代码 ##Client端调用测试代码

package client;

import java.util.GregorianCalendar;
import java.util.List;

import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
import webservice.HelloService;
import webservice.MyService;
import webservice.SimpleBean;

public class HelloWsTest {

	public static void main(String[] args) {
		//通过MyService类获取HelloService实例
		HelloService helloService = new MyService().getHelloServicePort();
		
		System.out.println(helloService.aliasMethod("test"));	//方法别名调用
		System.out.println(helloService.simpleMethod("simpleName"));	//方法名调用
		
		List<SimpleBean> list = helloService.getSimpleBeanList();	//自定义类型列表获取
		for(SimpleBean sb : list) {
			System.out.println(sb);
			helloService.printSimpleBean(sb);	//此处在Service端打印
			System.out.println(helloService.simpleBean2String(sb));	//返回字符串到客户端打印
			System.out.println(sb.getName() + "  | age=" + sb.getAge());
		}
		
		SimpleBean bean = new SimpleBean();
		bean.setName("inputBean");
		bean.setAge(11);
		try {
			bean.setDate(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
		} catch (DatatypeConfigurationException e) {
			e.printStackTrace();
		}
		helloService.printSimpleBean(bean);	//传递对象给Service端,后续进行其他操作
	}

}

##运行 在HelloWsTest类上右键,选择Run as -> Java Application,控制台中Service端的输出信息如下: Service端的输出信息

切换查看Client端的输出信息: 切换Client端的输出信息

##项目地址 项目地址戳这里

转载于:https://my.oschina.net/u/2511831/blog/615694

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值