`
jiagou
  • 浏览: 2531257 次
文章分类
社区版块
存档分类
最新评论

webservice(九)在webservice中处理二进制(上传文件)

 
阅读更多

二进制文件的处理(基于前面webservice七的实现后,添加上传功能)
1.@MTOM
1.1.修改wsdl加入如下代码:
<xsd:complexType name="upload">
<xsd:sequence>
<xsd:element name="file" type="xsd:base64Binary"></xsd:element>
</xsd:sequence>
</xsd:complexType>
另加入与其他方法同样的代码
1. 2.在实现类中加入@MTOM
生成服务器类文件
服务器参数为:byte[] file
*只能在tomcat服务器中使用MTOM,在默认的Jetty服务器里面无法进行MTOM传递
1. 3.在使用port时
port = us.getUserServicePort(new MTOMFeature());
2.@BindingType(SOAPBinding.SOAP11HTTP_MTOM_BINDING)
2.1.修改wsdl加入如下代码:
如果记不住,可以发布服务然后访问xsd=1来查看
<xsd:complexType name="upload">
<xsd:sequence>
<xsd:element xmlns:xmime="http://www.w3.org/2005/05/xmlmime" name="file" xmime:expectedContentTypes="application/octet-stream" type="xsd:base64Binary" form="qualified"/>
</xsd:sequence>
</xsd:complexType>
另加入与其他方法同样的代码
2.2.在实现类中加入@MTOM
生成服务器类文件
服务器参数为:@XmlMimeType("application/octet-stream")DataHandler handler
2.3.在使用port时
方式一:port = us.getUserServicePort(new MTOMFeature());
方式二:port = us.getUserServicePort();
BindingProvider bp = (BindingProvider)port;

SOAPBinding binding = (SOAPBinding) bp.getBinding();

方式一:MTOM方式:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
	xmlns:tns="http://service.zttc.edu.cn" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="UserService"
	targetNamespace="http://service.zttc.edu.cn">
	<!-- wrappered 推荐使用的方式 -->
	<wsdl:types>
		<xsd:schema targetNamespace="http://service.zttc.edu.cn">
			<!-- import是在导入的时候加入了命名空间 -->
			<!-- <xsd:import namespace="http://service.zttc.edu.cn" schemaLocation="user.xsd"/> -->

			<!-- include是在当前的schema中加入了命名空间 -->
			<!-- <xsd:include schemaLocation="user.xsd"/> -->
			<xsd:element name="add" type="tns:add"></xsd:element>
			<xsd:element name="addResponse" type="tns:addResponse"></xsd:element>
			<xsd:element name="delete" type="tns:delete"></xsd:element>
			<xsd:element name="deleteResponse" type="tns:deleteResponse"></xsd:element>
			<xsd:element name="list" type="tns:list"></xsd:element>
			<xsd:element name="listResponse" type="tns:listResponse"></xsd:element>
			<xsd:element name="login" type="tns:login"></xsd:element>
			<xsd:element name="loginResponse" type="tns:loginResponse"></xsd:element>

			<!-- 1.添加二进制文件 -->
			<xsd:element name="upload" type="tns:upload"></xsd:element>
			<xsd:element name="uploadResponse" type="tns:uploadResponse"></xsd:element>
			<xsd:complexType name="uploadResponse">
				<xsd:sequence />
			</xsd:complexType>
			<xsd:complexType name="upload">
				<xsd:sequence>
					<xsd:element name="file" type="xsd:base64Binary"></xsd:element>
				</xsd:sequence>
			</xsd:complexType>

			<!-- 1.添加异常 -->
			<xsd:element name="UserRunTimeException" type="tns:UserRunTimeException"></xsd:element>
			<xsd:complexType name="UserRunTimeException">
				<xsd:sequence>
					<xsd:element name="message" type="xsd:string"></xsd:element>
				</xsd:sequence>
			</xsd:complexType>

			<!-- 1.header添加权限 -->
			<xsd:element name="licenceInfo" type="tns:licenceInfo"></xsd:element>
			<xsd:complexType name="licenceInfo">
				<xsd:sequence>
					<xsd:element name="registUser" type="tns:user" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="add">
				<xsd:sequence>
					<xsd:element name="user" type="tns:user" />
				</xsd:sequence>
			</xsd:complexType>
			<xsd:complexType name="addResponse">
				<xsd:sequence />
			</xsd:complexType>

			<xsd:complexType name="delete">
				<xsd:sequence>
					<xsd:element name="username" type="xsd:string" />
				</xsd:sequence>
			</xsd:complexType>
			<xsd:complexType name="deleteResponse">
				<xsd:sequence />
			</xsd:complexType>

			<xsd:complexType name="list">
				<xsd:sequence />
			</xsd:complexType>
			<xsd:complexType name="listResponse">
				<xsd:sequence minOccurs="1" maxOccurs="unbounded">
					<xsd:element name="user" type="tns:user" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="login">
				<xsd:sequence>
					<xsd:element name="username" type="xsd:string" />
					<xsd:element name="password" type="xsd:string" />
				</xsd:sequence>
			</xsd:complexType>
			<xsd:complexType name="loginResponse">
				<xsd:sequence>
					<xsd:element name="user" type="tns:user" />
				</xsd:sequence>
			</xsd:complexType>

			<xsd:complexType name="user">
				<xsd:sequence>
					<xsd:element name="username" type="xsd:string" />
					<xsd:element name="password" type="xsd:string" />
					<xsd:element name="nickname" type="xsd:string" />
				</xsd:sequence>
			</xsd:complexType>
		</xsd:schema>
	</wsdl:types>

	<wsdl:message name="add">
		<wsdl:part element="tns:add" name="parameters" />
	</wsdl:message>
	<wsdl:message name="addResponse">
		<wsdl:part element="tns:addResponse" name="parameters" />
	</wsdl:message>
	<wsdl:message name="delete">
		<wsdl:part element="tns:delete" name="parameters" />
	</wsdl:message>
	<wsdl:message name="deleteResponse">
		<wsdl:part element="tns:deleteResponse" name="parameters" />
	</wsdl:message>
	<wsdl:message name="list">
		<wsdl:part element="tns:list" name="parameters" />
	</wsdl:message>
	<wsdl:message name="listResponse">
		<wsdl:part element="tns:listResponse" name="parameters" />
	</wsdl:message>
	<wsdl:message name="login">
		<wsdl:part element="tns:login" name="parameters" />
	</wsdl:message>
	<wsdl:message name="loginResponse">
		<wsdl:part element="tns:loginResponse" name="parameters" />
	</wsdl:message>
	<wsdl:message name="upload">
		<wsdl:part element="tns:upload" name="parameters" />
	</wsdl:message>
	<wsdl:message name="uploadResponse">
		<wsdl:part element="tns:uploadResponse" name="parameters" />
	</wsdl:message>
	<!-- 2.创建异常消息 -->
	<wsdl:message name="UserRunTimeException">
		<wsdl:part element="tns:UserRunTimeException" name="fault" />
	</wsdl:message>
	<!-- 2.创建header消息消息 -->
	<wsdl:message name="licenceInfo">
		<wsdl:part element="tns:licenceInfo" name="licenceInfo" />
	</wsdl:message>


	<wsdl:portType name="IUserService">
		<wsdl:operation name="add">
			<wsdl:input message="tns:add" />
			<wsdl:output message="tns:addResponse" />
			<!-- 3.为方法设置异常 -->
			<wsdl:fault name="UserRunTimeException" message="tns:UserRunTimeException" />
		</wsdl:operation>
		<wsdl:operation name="delete">
			<wsdl:input message="tns:delete" />
			<wsdl:output message="tns:deleteResponse" />
			<!-- 3.为方法设置异常 -->
			<wsdl:fault name="UserRunTimeException" message="tns:UserRunTimeException" />
		</wsdl:operation>
		<wsdl:operation name="list">
			<wsdl:input message="tns:list" />
			<wsdl:output message="tns:listResponse" />
		</wsdl:operation>
		<wsdl:operation name="login">
			<wsdl:input message="tns:login" />
			<wsdl:output message="tns:loginResponse" />
			<!-- 3.为方法设置异常 -->
			<wsdl:fault name="UserRunTimeException" message="tns:UserRunTimeException" />
		</wsdl:operation>
		<wsdl:operation name="upload">
			<wsdl:input message="tns:upload" />
			<wsdl:output message="tns:uploadResponse" />
		</wsdl:operation>
	</wsdl:portType>

	<wsdl:binding name="userServiceSOAP" type="tns:IUserService">
		<soap:binding style="document"
			transport="http://schemas.xmlsoap.org/soap/http" />
		<wsdl:operation name="add">
			<wsdl:input>
				<soap:body use="literal" />
				<!-- 3.设置头信息 -->
				<soap:header use="literal" part="licenceInfo" message="tns:licenceInfo"></soap:header>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
			<!-- 4.进行异常的fault绑定 -->
			<wsdl:fault name="UserRunTimeException">
				<soap:fault name="UserRunTimeException" use="literal" />
			</wsdl:fault>
		</wsdl:operation>
		<wsdl:operation name="delete">
			<wsdl:input>
				<soap:body use="literal" />
				<!-- 3.设置头信息 -->
				<soap:header use="literal" part="licenceInfo" message="tns:licenceInfo"></soap:header>
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
			<!-- 4.进行异常的fault绑定 -->
			<wsdl:fault name="UserRunTimeException">
				<soap:fault name="UserRunTimeException" use="literal" />
			</wsdl:fault>
		</wsdl:operation>
		<wsdl:operation name="list">
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
		<wsdl:operation name="login">
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
			<!-- 4.进行异常的fault绑定 -->
			<wsdl:fault name="UserRunTimeException">
				<soap:fault name="UserRunTimeException" use="literal" />
			</wsdl:fault>
		</wsdl:operation>
		<wsdl:operation name="upload">
			<wsdl:input>
				<soap:body use="literal" />
			</wsdl:input>
			<wsdl:output>
				<soap:body use="literal" />
			</wsdl:output>
		</wsdl:operation>
	</wsdl:binding>

	<!-- 在当前文件的最上面的name中填写的 -->
	<wsdl:service name="UserService">
		<wsdl:port binding="tns:userServiceSOAP" name="userServicePort">
			<soap:address location="http://localhost:8080/web-soa/us" />
		</wsdl:port>
	</wsdl:service>
</wsdl:definitions>


重新生成接口后,修改实现类:

package cn.edu.zttc.service;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.XMLEvent;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.soap.MTOM;

import org.zttc.dao.UserDao;
import org.zttc.dao.UserRunTimeException;
import org.zttc.vo.User;

import com.sun.xml.ws.api.message.Header;
import com.sun.xml.ws.api.message.HeaderList;
import com.sun.xml.ws.developer.JAXWSProperties;

@WebService(endpointInterface="cn.edu.zttc.service.IUserService",
			wsdlLocation="WEB-INF/wsdl/user.wsdl",
			serviceName="UserService",
			portName="userServicePort",
			targetNamespace="http://service.zttc.edu.cn")
@MTOM
public class UserServiceImpl implements IUserService {
	private UserDao userDao = UserDao.newInstence();
	@Resource
	private WebServiceContext ctx;
	
	@Override
	public void add(User user) throws UserRunTimeException {
		checkRegister();
		userDao.add(user);
	}

	@Override
	public void delete(String username) throws UserRunTimeException {
		checkRegister();
		userDao.delete(username);
	}

	@Override
	public List<User> list() {
		return userDao.list();
	}

	@Override
	public User login(String username, String password) throws UserRunTimeException {
		return userDao.login(username, password);
	}

	private void checkRegister() throws UserRunTimeException {
		try {
			HeaderList headers = (HeaderList)ctx.getMessageContext().get(JAXWSProperties.INBOUND_HEADER_LIST_PROPERTY);
			QName qname = new QName("http://service.zttc.edu.cn","licenceInfo");
			if(headers==null) throw new UserRunTimeException("该功能需要进行权限控制");
			Header header = headers.get(qname,true);
			if(header==null) throw new UserRunTimeException("该功能需要进行权限控制");
			XMLStreamReader xsr = header.readHeader();
			User u = x2user(xsr);
			User tu = userDao.loadByUsername(u.getUsername());
			if(tu==null) throw new UserRunTimeException("你所使用的用户不是系统的授权用户");
			if(!tu.getPassword().equals(u.getPassword()))
				throw new UserRunTimeException("授权用户的密码信息不正确!");
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
	}

	private User x2user(XMLStreamReader xsr) throws XMLStreamException {
		User u = new User();
		while(xsr.hasNext()) {
			int event = xsr.next();
			if(event==XMLEvent.START_ELEMENT) {
				String name = xsr.getName().toString();
				if(name.equals("username")) {
					u.setUsername(xsr.getElementText());
				} else if(name.equals("password")) {
					u.setPassword(xsr.getElementText());
				} else if(name.equals("nickname")) {
					u.setNickname(xsr.getElementText());
				}
			}
		}
		return u;
	}

	@Override
	public void upload(byte[] file) {
		FileOutputStream fos = null;
		System.out.println(file);
		try {
			fos = new FileOutputStream("D:/sid/workspace_webservice/wsimport/1.jpg");
			fos.write(file);
			fos.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

客户端调用:

package org.zttc.test;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.ws.soap.MTOMFeature;

import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Test;

import cn.edu.zttc.service.IUserService;
import cn.edu.zttc.service.User;
import cn.edu.zttc.service.UserRunTimeException_Exception;
import cn.edu.zttc.service.UserService;

public class TestService {

	private IUserService port;
	private UserService us;
	private String ns = "http://service.zttc.edu.cn";
	
	@Before
	public void init(){
		try {
			URL url = new URL("http://localhost:8989/web-soa/us?wsdl");
			QName name = new QName(ns,"UserService");
			us = new UserService(url,name);
			port = us.getUserServicePort(new MTOMFeature());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testList(){
		List<User> list = port.list();
		for (User user : list) {
			System.out.println(user.getNickname());
		}
	}

	@Test
	public void testAdd(){
		try{
			User user = new User();
			user.setNickname("搜索");
			user.setPassword("456123");
			user.setUsername("ss");
			port.add(user);
		}catch (UserRunTimeException_Exception e) {
			System.out.println(e.getMessage());
		}
	}

	@Test
	public void testLogin(){
		try{
			User u = port.login("ss", "456123");
			System.out.println(u.getNickname());
		}catch (UserRunTimeException_Exception e) {
			System.out.println(e.getMessage());
		}
	}

	@Test
	public void testDelete(){
		try {
			port.delete("ss");
		} catch (UserRunTimeException_Exception e) {
			e.printStackTrace();
		}
	}
	
	@Test
	public void testUpload() {
		try {
			byte[] file = FileUtils.readFileToByteArray(new File("E:/sid/original_HCIQ_5d5300000148125b.jpg"));
			port.upload(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

方式二:在方式一的基础上做入下修改:

wsdl文件

<xsd:complexType name="upload">
				<xsd:sequence>
					<xsd:element xmlns:xmime="http://www.w3.org/2005/05/xmlmime" name="file" xmime:expectedContentTypes="application/octet-stream" type="xsd:base64Binary" form="qualified"/>
				</xsd:sequence>
			</xsd:complexType>

生成服务器接口后,修改实现类

package cn.edu.zttc.service;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import javax.activation.DataHandler;
import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.events.XMLEvent;
import javax.xml.ws.BindingType;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.soap.SOAPBinding;

import org.apache.commons.io.FileUtils;
import org.zttc.dao.UserDao;
import org.zttc.dao.UserRunTimeException;
import org.zttc.vo.User;

import com.sun.xml.ws.api.message.Header;
import com.sun.xml.ws.api.message.HeaderList;
import com.sun.xml.ws.developer.JAXWSProperties;

@WebService(endpointInterface = "cn.edu.zttc.service.IUserService", 
			wsdlLocation = "WEB-INF/wsdl/user.wsdl", 
			serviceName = "UserService", 
			portName = "userServicePort", 
			targetNamespace = "http://service.zttc.edu.cn")
@BindingType(SOAPBinding.SOAP11HTTP_MTOM_BINDING)
public class UserServiceImpl implements IUserService {
	private UserDao userDao = UserDao.newInstence();
	@Resource
	private WebServiceContext ctx;

	@Override
	public void add(User user) throws UserRunTimeException {
		checkRegister();
		userDao.add(user);
	}

	@Override
	public void delete(String username) throws UserRunTimeException {
		checkRegister();
		userDao.delete(username);
	}

	@Override
	public List<User> list() {
		return userDao.list();
	}

	@Override
	public User login(String username, String password)
			throws UserRunTimeException {
		return userDao.login(username, password);
	}

	private void checkRegister() throws UserRunTimeException {
		try {
			HeaderList headers = (HeaderList) ctx.getMessageContext().get(
					JAXWSProperties.INBOUND_HEADER_LIST_PROPERTY);
			QName qname = new QName("http://service.zttc.edu.cn", "licenceInfo");
			if (headers == null)
				throw new UserRunTimeException("该功能需要进行权限控制");
			Header header = headers.get(qname, true);
			if (header == null)
				throw new UserRunTimeException("该功能需要进行权限控制");
			XMLStreamReader xsr = header.readHeader();
			User u = x2user(xsr);
			User tu = userDao.loadByUsername(u.getUsername());
			if (tu == null)
				throw new UserRunTimeException("你所使用的用户不是系统的授权用户");
			if (!tu.getPassword().equals(u.getPassword()))
				throw new UserRunTimeException("授权用户的密码信息不正确!");
		} catch (XMLStreamException e) {
			e.printStackTrace();
		}
	}

	private User x2user(XMLStreamReader xsr) throws XMLStreamException {
		User u = new User();
		while (xsr.hasNext()) {
			int event = xsr.next();
			if (event == XMLEvent.START_ELEMENT) {
				String name = xsr.getName().toString();
				if (name.equals("username")) {
					u.setUsername(xsr.getElementText());
				} else if (name.equals("password")) {
					u.setPassword(xsr.getElementText());
				} else if (name.equals("nickname")) {
					u.setNickname(xsr.getElementText());
				}
			}
		}
		return u;
	}

	@Override
	public void upload(DataHandler file) {
		FileOutputStream fos = null;
		InputStream fis = null;
		try {
//			System.out.println(file.getContentType() + "--"+ file.getName());
//			fis = file.getInputStream();
			fis = file.getDataSource().getInputStream();
			fos = new FileOutputStream("D:/sid/workspace_webservice/wsimport/1.jpg");
			int len = 0;
			byte[] buf = new byte[1024];
			while ((len=fis.read(buf))>0) {
				fos.write(buf, 0, len);
			}
			fos.flush();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fos.close();
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

客户端代码修改:

	@Test
	public void testUpload() {
			File file = new File("E:/sid/original_HCIQ_5d5300000148125b.jpg");
			DataHandler handler = new DataHandler(new FileDataSource(file));
			port.upload(handler);
	}



分享到:
评论

相关推荐

    webservice4 二进制文件读取

    webservice4 二进制文件读取 webservice4 二进制文件读取

    WebService二进制处理

    WebService二进制处理

    C,C#webservice 返回数组,二进制

    C,C#webservice 返回数组,二进制,C#作为客户端, 搞了很久,才拼凑出来的结果,但可以使用。

    WebService大讲堂之Axis2(4):二进制文件传输.pdf

    WebService大讲堂之Axis2(4):二进制文件传输.pdf

    axis 接口传图片等二进制文件

    通过AXIS技术发布一个接口,供调用者上传图片等二进制数据

    c++ gsoap webservice文件传送demo

    win7环境,利用VC和gsoap实现webservice文件传输

    .NET_Webservice数据压缩

    .NET_Webservice数据压缩. 以二进制的方式压缩 以微软自带类库进行 以XML文件压缩传输

    PHP webservice传输附件和文章源码

    PHP webservice传输附件和文章源码: 有家公司专门搞PHP的写此接口,搞了个把月最后文章能传输,附件传不过去,,交给我花了2天的时间搞定。.

    WebService服务使用Md5和SHA1加密验证登陆

    在WebService使用Md5和SHA1加密技术对用户密码进行加密处理,从而增加用户安全性。登陆判断同样通过Md5和SHA1加密密码然后和数据库经过加密密码进行比较来(它们可都是二进制滴哦!)验证用户是否存在 很好滴东西 ...

    webservice-mock:Web服务模拟

    从下载二进制发行版,其中包含主jar和所需的库。 从下载json配置并配置服务端点。 请参阅以下有关如何配置的部分。 从步骤1中提取zip并运行以下内容。 我保证,您一定会喜欢这个小工具。 java -jar webservice-...

    WebService大讲堂之Axis2

    WebService大讲堂之Axis2(4):二进制文件传输 ......................................................................................... 17 WebService大讲堂之Axis2(5):会话(Session)管理 ...................

    WebService

    是关于java方面的webservice入门初级,和你初级,看完基本上就知道了,webservice在Java上市如何实现的

    Hessian的使用配置步骤

    远程方法调用的比较,Hessian方法的介绍和相关配置.Hessian是一个轻量级的remoting on http工具,采用的是Binary RPC协议,所以它很适合于发送二进制数据,同时又具有防火墙穿透能力。Hessian一般是通过Web应用来提供...

    CXF创建webservice服务端.doc

    CXF 包含了大量的功能特性,但是主要集中在以下几个方面: 1. 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-...4. 支持二进制和遗留协议:CXF 的设计是一种可插拨的架构

    Axis2教程 包含描述目录的内容

    二进制文件传输 5. 会话(Session)管理 6. 跨服务会话(Session)管理 7. 将Spring的装配JavaBean发布成WebService 8. 异步调用WebService 9. 编写Axis2模块(Module) 10. 使用soapmonitor模块监视soap请求...

    gsoap 2.8 (SOAP/XML 关于C/C++ 语言的自动化实现工具内附 CSharp webservice例子,及GSOAP client和server例子)

    它允许你在保证XML可用性的同时能够以最快的方式(流方式)传递近乎无大小限制的二进制数据  。  ×gSOAP 支持 SOAP-over-UDP。  ×gSOAP 支持 IPv4 and IPv6.  ×gSOAP 支持 Zlib deflate and gzip compression...

    AXIS2大讲堂文档

    文档1 pojo实现0配置 ...文档4 二进制文件读取 文档5 会话管理 文档6 跨越session管理 文档7 spring的bean发布为webservice 文档8 异步调用webservice 文档9 编写axis模块 文档10 使用moniter监视器

    cocoaAMF使用指南.zip

    AMF是Action Message Format协议的简称,AMF协议是Adobe公司自己的协议,主要用于数据交互和远程过程调用,在功能上相当于WebService,但是AMF与WebService中的XML不同的是AMF是二进制数据,而XML是文本数据,AMF的...

    TaigIM-web:台语输入法,web-base + webservice

    并导入 PostgreSQL 数据库(OSX 二进制文件可在): bzcat pgsqlDB.dump.bz2 | psql 最后,使用以下命令启动服务器: make test.byte 当您在屏幕上看到ocsigenserver时,连接到和以确认安装已成功。

    数据采集系统

    6.采用二进制运算实现权限控制,利用interceptor实现粗粒度控制以及重写struts2 标签实现细粒度权限控制.采用二位运算能够使得权限运算更加快捷,而且极大 降低 session存储量,有效利用服务器资源. .系统中通过 cxf ...

Global site tag (gtag.js) - Google Analytics