Java-Webservice 从0开始

目录

服务端

客户端

调用网络资源


webservice是一种web服务

1.解决企业内部异构系统的整合问题

A-interface,B-interface

推出一种统一的方法

传统webservice,标准,XML,SOAP=HTTP协议+XML数据格式(SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息)

现在推荐的webservice http,JSON

WSDL说明书,通过UDDI进行注册。

2.解决一些公共资源的复用问题

服务端

(1)建立包,之后是接口IWeatherService

package com.qf.webservice;
/**
 * 定义一个查询天气的服务
 * 
 * 
  */
public interface IWeatherService {
   public String query(String cityName);
}

(2)实现方法

package com.qf.webservice;

import javax.jws.WebService;

@WebService
public class WeatherServiceImpl implements IWeatherService {

	public String query(String cityName) {
		System.out.println("查询"+cityName);
		return "大晴天";
	}

}

(3)主函数发布

package com.qf.webservice.main;

import javax.xml.ws.Endpoint;

import com.qf.webservice.WeatherServiceImpl;

/*
 * 采用JDK的方式发布
 * 
 * */
public class Main {
	public static void main(String[] args)
	{
	   Endpoint.publish("http://localhost:8090/weatherService",new WeatherServiceImpl());
	    System.out.printf("发布成功");
   }
}

http://localhost:8090/weatherService?wsdl

客户端

wsimport生成客户端代码

Q1:wsimport不是内部命令

♦打开我的电脑–属性–高级–环境变量

♦新建系统变量JAVA_HOME 和CLASSPATH 
变量名:JAVA_HOME 
变量值:C:\Program Files\Java\jdk1.7.0_79

♦选择”系统变量”中变量名为”Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。 
变量名:Path 
变量值:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
这是java的环境配置,配置完成后直接启动eclipse,它会自动完成java环境的配置

JAVA_HOME要配置在系统变量,不要配置在用户变量,配置在用户变量会导致javac 和wsimport出现错误。

-------------------------------------------------------------------------------

wsimport -s . http://localhost:8090/weatherService?wsdl   基于说明书生成,解析说明书,生成代码

 

package com.qf.webservice.client;

import com.qf.webservice.WeatherServiceImpl;
import com.qf.webservice.WeatherServiceImplService;

public class Client {
	public static void main(String[] args)
	{
		//1.创建服务视图(视图是从service标签的name属性获取)
		WeatherServiceImplService weatherServiceImplService =new WeatherServiceImplService();
		
		//2.获取服务实现类(实现类从portType的属型获取
		WeatherServiceImpl port =weatherServiceImplService.getPort(WeatherServiceImpl.class);
		//3.调用方法(从portType的operation标签获取
		String reuslt=port.query("Kevin");
		
		//删除结果;
		System.out.printf(reuslt);
	}
}

第二种方法

package com.qf.webservice.client;

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

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

import com.qf.webservice.WeatherServiceImpl;

public class Client {
	public static void main(String[] args) throws MalformedURLException
	{   URL url;
	
		url = new URL("http://localhost:8090/weatherService?wsdl");
		QName qName=new QName("http://webservice.qf.com/","WeatherServiceImplService");
		Service service=Service.create(url,qName);
		WeatherServiceImpl port =service.getPort(WeatherServiceImpl.class);
		String reuslt=port.query("爱学习的小鹏友");
		//删除结果;
		System.out.printf(reuslt);
		String reuslt2=port.other();
		System.out.printf(reuslt2);
	}
	    

}

 

-----------------------------------------

服务端有更改后的内容

Q2问题,重新发布提示端口占用

这是因为该端口号(8090)被占用,此时可以通过如下方式解决。首先查看指定端口号被占用情况,在命令提示符下执行:

netstat -aon|findstr "8090" 
 显示如下结果:

协议    本地地址                     外部地址               状态                   PID
TCP    127.0.0.1:8080         0.0.0.0:0              LISTENING       5152
 查看PID对应的进程,执行如下命令:

tasklist|findstr "5152" 
显示如下结果:

javaw.exe                     5152 Console                 0     17,960 K 
 结束该进程即可,命令如下:

taskkill /f /t /im javaw.exe
 或者直接到任务管理器结束进程

--------------------------------------------------

调用网络资源


http://www.webxml.com.cn/zh_cn/web_services.aspx

Q3调用失败

不是java生成的,需要拿到本地改

<s:any minOccurs="2" maxOccurs="2" /> 

------------------------------------------------------------------------------------------------------

获取数据格式:

用TCP/IP 监听

    url = new URL("http://localhost:8090/weatherService?wsdl");

package com.qf.webservice;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;


/*
 * 通过观察的数据格式自己发送
 * */
public class Client {
	public static void main(String[] args) throws IOException {
		// URL
		URL url = new URL("http://localhost:8090/weatherService?wsdl");
		// 创建一个链接对象
		// 用于向服务器发送请求信息+获取服务器的响应信息
		HttpURLConnection connection = (HttpURLConnection) url
				.openConnection();
		//
		connection.setRequestMethod("POST");
		connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
		// 打开
		connection.setDoOutput(true);
		connection.setDoInput(true);
		// 发送请求的信息,拼接格式
		String info = bulidXML("深圳");
		connection.getOutputStream().write(info.getBytes());

		//
		int responseCode = connection.getResponseCode();
		if (responseCode == 200) {
			InputStream inputStream = connection.getInputStream();
			Scanner scanner = new Scanner(inputStream);
			while (scanner.hasNext()) {
				System.out.println(scanner.nextLine());
			}
			scanner.close();
		} else {
			System.out.println(responseCode);
		}

	}

	private static String bulidXML(String cityName) {
		StringBuilder sBuilder = new StringBuilder();
		sBuilder.append("<?xml version=\"1.0\" ?>");
		sBuilder.append("<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">");
		sBuilder.append("<S:Body>");
		sBuilder.append("<ns2:query xmlns:ns2=\"http://webservice.qf.com/\">");
		sBuilder.append("<arg0>");
		sBuilder.append(cityName);
		sBuilder.append("</arg0>");
		sBuilder.append("</ns2:query>");
		sBuilder.append("</S:Body>");
		sBuilder.append("</S:Envelope>");

		return sBuilder.toString();
	}
}

 

注解的应用@webservise  @WebResult @WebParam @WebMethod


        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值