web service004——第二种方式调用,通过urlconection访问

Posted 江州益彤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web service004——第二种方式调用,通过urlconection访问相关的知识,希望对你有一定的参考价值。

参考网址www.webxml.com.cn


生成本地Java文件,并保存到指定的包中

wsimport -s . -p com.dgut.user http://localhost:8989/helloworld?wsdl


一、服务端

1.1、UserBean

package com.dgut.bean;

public class UserBean {
	private int id;
	private String name;
	private int age;
	private String sex;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
}

1.2、UserDao

package com.dgut.dao;

import javax.jws.WebService;

import com.dgut.bean.UserBean;

/* 使用@WebService注解*/
@WebService
public class UserDao {
	
	public UserBean findUserBeanById(int id) {
		UserBean userBean=new UserBean();
		
		//真实开发需要连接数据库获取数据
		userBean.setId(id);
		userBean.setName("王二毛");
		userBean.setAge(18);
		userBean.setSex("男");
		
		return userBean;
	}
}

1.3、PublishUserService

package com.dgut.service;

import javax.xml.ws.Endpoint;

import com.dgut.dao.UserDao;

public class PublishUserService {

	public static void main(String[] args) {

		/*
		 * 通过Java jdk自带的类来发布webservice
		 * 
		 * 参数解析:
		 * address:对外提供一个访问地址
		 * HelloWorldDao:向外发布的类
		 * 
		 * 发布webservice时默认生成wsdl说明书
		 * 通过http://localhost:8989/helloworld?wsdl访问wsdl说明书
		 */
		System.out.println("服务端开始发布初始化...");
		
		if (Endpoint.publish("http://localhost:8989/helloworld", new UserDao()) != null) {
			System.out.println("服务端发布成功");
		}
	}

}

二、客户端

2.1、UrlConectionInvoke

package com.dgut.client;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class UrlConectionInvoke {
	public static void main(String[] args) throws Exception {

		// 请求webservice的访问路径
		URL url = new URL("http://localhost:8989/helloworld");

		// 打开连接
		HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

		// 服务端接受POST请求
		urlConnection.setRequestMethod("POST");

		// 向服务端发送xml格式数据
		urlConnection.setDoOutput(true);

		// 接受服务端数据
		urlConnection.setDoInput(true);

		// 服务端接受的是xml格式的文件
		urlConnection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");

		// 通过流来写数据到服务端
		OutputStream outputStream = urlConnection.getOutputStream();

		// 实例化一个buffer
		StringBuffer buffer = new StringBuffer();

		// 添加
		buffer.append(
				"<soapenv:Envelope xmlns:soapenv=\\"http://schemas.xmlsoap.org/soap/envelope/\\" xmlns:q0=\\"http://dao.dgut.com/\\" xmlns:xsd=\\"http://www.w3.org/2001/XMLSchema\\" xmlns:xsi=\\"http://www.w3.org/2001/XMLSchema-instance\\">")
				.append("<soapenv:Body><q0:findUserBeanById><org0>2</org0></q0:findUserBeanById></soapenv:Body></soapenv:Envelope>");

		// 向服务端写数据
		outputStream.write(buffer.toString().getBytes());

		// 接受服务端传回的数据
		InputStream inputStream = urlConnection.getInputStream();
		byte[] b = new byte[1024];

		int length = 0;

		StringBuffer sb = new StringBuffer();

		while ((length = inputStream.read(b)) != -1) {// 等于-1说明已经读完
			String s = new String(b, 0, length);
			sb.append(s);
		}

		System.out.println(sb.toString());
	}
}

三、验证

以上是关于web service004——第二种方式调用,通过urlconection访问的主要内容,如果未能解决你的问题,请参考以下文章

Android面试四大组件之服务Service

Android如何启用Service,如何停用Service。

.NET下面的web service开发,如何读取SOAP头里面的信息?

博客网站系统-004Service层

画坦克__线程__V2__第二种方式调用

SpringBoot整合Dubbo的第二种方式——API(自定义Configuration配置类)