现在的位置: 首页 > 综合 > 正文

WebService第一步 – MyEclipse中开发JAX-WS

2014年05月29日 ⁄ 综合 ⁄ 共 4026字 ⁄ 字号 评论关闭
1、了解WebService
WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台。说直接点,就是可以在不同的平台进行数据的交互。
例如,有一个C#开发的学生成绩管系统、还有一个用Java开发的毕业生管理系统。现在,有一批学生即将毕业,但是有些学生由于挂科严重,是毕不了业的。为了能够得到学生毕业的名单,就需要毕业生管理系统查询学生毕业信息时,还需要得到学生成绩系统的信息。怎么办?WebService应用而生。

2、MyEclipse 10.x下开发一个简单的JAX-WS
JAX-WS是WebService的一种实现,是本文讲解的重点,有兴趣的可以参见其它文章学习其他的一些实现。
在MyEclipse中新建WebService project项目,其主要的命名类及包名项目名如下图所示。
类中的代码如下。
IMyService接口类:
package org.tjgd.service;

import javax.jws.WebService;

@WebService()
public interface IMyService {
	public int add(int a,int b);
	public int minus(int a,int b);
	public User login(String username,String password);
}

如上的类中,@webService()是必须加上的。


MyServiceImpl实现类:
package org.tjgd.service;

import javax.jws.WebService;

@WebService(endpointInterface="org.tjgd.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;
	}

	public User login(String username, String password) {
		System.out.println(username+" is logining");
		User user = new User();
		user.setId(1);
		user.setUsername(username);
		user.setPassword(password);
		return user;
	}

}

实体类User的代码如下:

package org.tjgd.service;

public class User {
	private int id;
	private String username;
	private String password;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}	
}

下面为实现类创建WebService服务:

package org.tjgd.service;
import javax.xml.ws.Endpoint;
public class MyServer {
	public static void main(String[] args) {
		String address = "http://localhost:666/ns";
		Endpoint.publish(address, new MyServiceImpl());
	}
}

在MyEclipse中启动这个应用程序后,就可以在当前的项目下建立TestClient类进行WebService发布的测试了。

package org.tjgd.service;

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

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

public class TestClient {
	public static void main(String[] args) {
		try {
			//创建访问wsdl服务地址的url
			URL url = new URL("http://localhost:666/ns?wsdl");
			//通过Qname指明服务的具体信息
			QName sname = new QName("http://service.tjgd.org/", "MyServiceImplService");
			//创建服务
			Service service = Service.create(url,sname);
			//实现接口
			IMyService ms = service.getPort(IMyService.class);
			System.out.println(ms.login("dd", "dd").getId());
			//以上服务有问题,依然依赖于IMyServie接口
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}

打印输出的结果为:1

或者可以在浏览器中访问:
常见错误:没有启动Java应用程序。则MyEclipse控制台输出如下信息:
Exception in thread "main" javax.xml.ws.WebServiceException: Failed to access the WSDL at: http://localhost:66/ns?wsdl. It failed with: 

既然可以在不同的平台之间进行信息的交互,当然也可以在Java项目之间进行信息的交互。在MyEclipse下新建一个Java project项目,项目名为server_clientd 。

然后根据发布的WebService接口生成对应的客户端,具体执行步骤如下:
在项目上右键单击,选择others..选项后,打开对话框,选择WebService Client,如下图。
点击Next继续进入下图。
注意如上图,将WSDL URL填写的为你发布的WebService地址。然后点击Finish即可。生成的文件如下图所示。
下面编写两个测试类,分别为TestClient.java和TestClient2.java。代码如下:
package org.tjgd.service;

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

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

public class TestClient {
	public static void main(String[] args) {
		try {
			//创建访问wsdl服务地址的url
			URL url = new URL("http://localhost:666/ns?wsdl");
			//通过Qname指明服务的具体信息
			QName sname = new QName("http://service.tjgd.org/", "MyServiceImplService");
			//创建服务
			Service service = Service.create(url,sname);
			//实现接口
			IMyService ms = service.getPort(IMyService.class);
			System.out.println(ms.add(12,33));
			//以上服务有问题,依然依赖于IMyServie接口
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
}

输出结果为45

package org.tjgd.service;

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

import javax.xml.namespace.QName;

public class TestClient2 {

	public static void main(String[] args) throws MalformedURLException {
		//创建访问wsdl服务地址的url
		URL url = new URL("http://localhost:666/ns?wsdl");
		//通过Qname指明服务的具体信息
		QName sname = new QName("http://service.tjgd.org/", "MyServiceImplService");
		MyServiceImplService msis = new MyServiceImplService(url,sname);
		IMyService ms = msis.getMyServiceImplPort();
		System.out.println(ms.login("mazhi", "哈哈,成功").getPassword());
	}

}

输出结果为:哈哈,成功

如果MyEclipse不能自动引入需要的类包,则可以手动添加。


















抱歉!评论已关闭.