关于树型目录的框架 严格说来写一个树型目录的架构是一项非常复杂的工作,树型目录的实现有两种方式:全部画出所有的树节点和当触发时实时画出下一层节点。前一种的实现相对简单一些,但是当节点数量超过1000之后,采用递归算法会导致页面首次显示时出奇的缓慢,我曾经做过对js脚本和相应的存储过程做过调优,但是效果还是不甚理想;触发时才实时画出下一层节点技术难度很高,还好公司有现成的框架,光Java类和接口就有10几个,完全阅读并理解显然是不现实的,只能通过摸索把先有的业务和原来的接口进行不断的测试,花费了一天时间才得以完成.
关于Web Service Web Service是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。总体来讲它能够突破平台限制,穿越企业防火墙,通过开放的接口和认证实现信息的共享和传递.
WSDL 对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。 WSDL (Web Services Description Language) 规范是一个描述接口,语义以及Web服务为了响应请求需要经常处理的工作的XML文档。这将使简单地服务方便,快速地被描述和记录。
对于.Net的WSDL调用来说是很简单的,例如一个简单的VBS脚本
Dim obj
set obj=createobject("MSSOAP.SoapClient30")
obj.MSSoapInit "QueryService.wsdl"
MsgBox obj.getPhoneByName("0578", "XXX单位",10)

但是对于Java而言调用一个.Net产生的WSDL简直被折磨了半死,Q公司又不肯提供技术支持,不断的进行调试跟踪最后才发现是一个setEncodingStyle参数设置的问题.

public class CpSpInterface ...{
protected Log logger = LogFactory.getLog(this.getClass());
private String endpoint = "http://192.168.1.2/Service1.asmx";
private String nameSpace = "GetSPInfo";
public String callGetIndexByType(String strTypeID, String strParaList,String strResultType)

...{
String ret = "<?xml version=\"1.0\" encoding=\"gb2312\" ?><root status=\"1\" lines=\"0\"></root>";

try ...{
String methodName = "GetIndexByType";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTimeout(new Integer(120000));
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setUseSOAPAction(true);
call.setSOAPActionURI(nameSpace + "/GetIndexByType");
call.setOperationStyle(org.apache.axis.constants.Style.WRAPPED);
call.setEncodingStyle("literal");
call.setOperationName(new QName(nameSpace, methodName));
StringHolder holder = new StringHolder("0");
// Set Call Parameter
call.addParameter(new QName(nameSpace, "strTypeID"),
Constants.XSD_STRING, ParameterMode.IN);
…………略
//Set back Parameter
call.setReturnType(Constants.XSD_STRING);

ret = (String) call.invoke(new Object[] ...{ strTypeID, strParaList,
strResultType });
ret = ret.replaceAll("utf-8","gb2312");
logger.debug("ret = "+ret);
logger.info("return errorcode = " + holder.value);

} catch (Exception e) ...{
logger.error("Error " + e);
}
return ret;
}
}
