Java调用Domino接口报文件过早结束问题

最近用cxf调用webservice接口经常出现“文件过早结束”问题。经各种测试,问题在于cookie设置问题,调用接口之前必须封装cookie信息。以下是DEMO代码。
 
package com.toft.webservice.client.domino;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.xml.namespace.QName;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.log4j.Logger;

import com.toft.core2.ToftException;
import com.toft.webservice.core.CoreWebService;
import com.toft.webservice.core.JaxbBinder;
import com.toft.webservice.utils.WebServicePropertiesUtils;
import com.toft.webservice.wsdl.client.domino.CreateDocByOwnership;
import com.toft.webservice.wsdl.client.domino.CreateDocByResult;
import com.toft.webservice.wsdl.client.domino.GETTODOReturn;
import com.toft.widgets.rent.util.Constant;
import com.toft.widgets.rent.util.Tools;

/**
 *创建Domino文档接口.
 * 
 * @author sunzuqiang 
 */
public final class DominoInterface extends CoreWebService {
	/**
	 * 
	 * @param Map对象,对应Result中的一行
	 * @param List对象,对应Result
	 */
	public boolean create(String projectno, String WORKFLOW_INSTANCES) throws ToftException {
		WebServicePropertiesUtils properties = new WebServicePropertiesUtils();
		
		
		//CreateDocByResultService ss = new CreateDocByResultService(wsdlURL, SERVICE_NAME);
		
		//CreateDocByResult port = ss.getDomino();
		try {
			String wsdl = "http://*****domino.wsdl";
			URL wsdlURL = new URL(wsdl);
			//cxf调用webservice工厂类
			JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();
			//设置请求的wsdl地址
			svr.setAddress(wsdlURL.toString());
			//设置wsdl接口实现类
			svr.setServiceClass(CreateDocByResult.class);	
			/*
			*-------华丽的分割线-----
			*开始设置cookie信息
			*/
			 //通过工厂类来获得接口实现类的方法
			CreateDocByResult hw = (CreateDocByResult) svr.create();
			//把客户端的信息设置到接口类里
			Client client = ClientProxy.getClient(hw);
			//客户端封装http信息
			HTTPConduit http = (HTTPConduit) client.getConduit();
			HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
			 //此行设置cookie非常重要,如果接口允许匿名访问就设置为""就好,如果要验证单点登录用户信息就得如下设置
			httpClientPolicy.setCookie((String)this.getContext().getRequest().getHeader("Cookie"));			
			httpClientPolicy.setAllowChunking(false);
			http.setClient(httpClientPolicy);
			logger.debug("Invoking createdoc...");
			logger.debug("开始启动domino接口");
			result = hw.createdoc(xml);
			logger.debug("已经启动domino接口");
			logger.debug("Invoking createdoc success!");
			return result;
		} catch(Exception f){
			f.printStackTrace();
			throw ToftException.ThrowToftException("调用Domino接口异常!");
		}catch (Throwable e) {
			e.printStackTrace();
			throw ToftException.ThrowToftException("调用Domino接口异常!");
		}finally{
			logger.debug("调用Domino接口异常!");
		}
	}	
}

最近用cxf调用webservice接口经常出现“文件过早结束”问题。经各种测试,问题在于cookie设置问题,调用接口之前必须封装cookie信息。以下是DEMO代码。

		    


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值