第三方调用U9服务(Java平台)一、Java环境搭建a)Jdk版本jdk-5_5_0_10b)apache-cxf-2.2.4c)开发工具Eclipsed)配置环境变量添加新变量ClASSPATH:值为“.;C:\Program Files\Java\jdk1.5.0_10\lib\Tools.jar;C:\Program Files\Java\jdk1.5.0_10\jre\lib\rt.jar”添加新变量Java_HOME :值为“C:\Program Files\Java\jdk1.5.0_10”Path变量后追加:“C:\Program Files\Java\jdk1.5.0_10\bin”说明:C:\Program Files\Java\jdk1.5.0_10是jdk的安装目录e)UFIDA U9服务器二、引用U9服务以创建收货单服务为例,UFIDA.U9.ISV.RCV.ICreateRCVSRV.svca)验证服务是否可用如果能显示显示下面的图片说明服务可用b)生成代理类利用apache-cxf-2.2.4针对wsdl导出java客户端文件D:\apache-cxf-2.2.4\bin> wsdl2java -d d:\JavaService -verbose http://localhost/portal/services/UFIDA.U9.ISV.RCV.ICreateRCVSRV.svc?wsdl 注明:-d <客户端代码输出路径>-verbose<服务地址>查看生成的文件:c)构架项目1.创建Java测试工程2.Copy cxf 生成客户端Java文件到工程目录3.新建类TestMain.java4.添加外部引用库Jar在项目上右键点属性5.修改服务地址Uri三、项目实现细节a)调用服务框架代码类似DotNet平台调用代码,主要是语法不同//开始调用ERP服务,“创建服务”org.tempuri.CreateRCVSRVStub createRcvsvclient = new org.tempuri.CreateRCVSRVStub();org.ufida.UFIDAU9ISVRCVICreateRCVSRV createsv =createRcvsvclient.getBasicHttpBindingUFIDAU9ISVRCVICreateRCVSRV();//给头、明细赋值org.ufida.entitydata.ArrayOfUFIDAU9ISVRCVDTOOBAReceivementDTOData rCVList =createRCVList();//doResult就是返回结果。
Holder<org.ufida.entitydata.ArrayOfUFIDAU9PMRcvReceivementData> doResult = newHolder<org.ufida.entitydata.ArrayOfUFIDAU9PMRcvReceivementData>() ;Holder<exceptions.ubf.ufsoft.ArrayOfMessageBase> outMessages= new Holder<exceptions.ubf.ufsoft.ArrayOfMessageBase>();try{//将入库单内容传入ERP(入和返的值,均作为此方法的参数)。
//context验证信息,rCVList入的值,doResult方法返回值,createsv._do(context, rCVList, doResult, outMessages);System.out.println("Invoke end ...");}c atch(Exception ex){//省略部分代码}b)上下文信息//创建当前上下文(相当于验证信息,这部分需灵活配置)String IDForCompany = "002";//当前企业编号Long IDForOrganization = new Long("1001007128961046");//当前组织IDLong IDForUsers = new Long("1001007176447429");//当前用户IDString UserCode = "demo";//当前用户编码//创建上下文环境Object context = createContext(IDForCompany,IDForOrganization,IDForUsers,UserCode);//创建上下文环境private static Object createContext(String entid,long orgid,long userid,String usercode) {org.datacontract.schemas._2004._07.ufsoft_ubf_util.ObjectFactory contextfactory = neworg.datacontract.schemas._2004._07.ufsoft_ubf_util.ObjectFactory();org.datacontract.schemas._2004._07.ufsoft_ubf_util.ThreadContext tc = contextfactory.createThreadContext();com.microsoft.schemas._2003._10.serialization.arrays.ObjectFactory arrayFactory = newcom.microsoft.schemas._2003._10.serialization.arrays.ObjectFactory();ArrayOfKeyValueOfanyTypeanyType contextarray =arrayFactory.createArrayOfKeyValueOfanyTypeanyType();KeyValueOfanyTypeanyType kv1 = new KeyValueOfanyTypeanyType();kv1.setKey("EnterpriseID");kv1.setValue(entid);//填具体的企业编号contextarray.getKeyValueOfanyTypeanyType().add(kv1);KeyValueOfanyTypeanyType kv2 = new KeyValueOfanyTypeanyType();kv2.setKey("OrgID");kv2.setValue(orgid);//填具体的组织IDcontextarray.getKeyValueOfanyTypeanyType().add(kv2);KeyValueOfanyTypeanyType kv3 = new KeyValueOfanyTypeanyType();kv3.setKey("UserID");kv3.setValue(userid);////填具体的用户IDcontextarray.getKeyValueOfanyTypeanyType().add(kv3);KeyValueOfanyTypeanyType kv4 = new KeyValueOfanyTypeanyType();kv4.setKey("UserCode");kv4.setValue(usercode);//填具体的用户编码contextarray.getKeyValueOfanyTypeanyType().add(kv4);KeyValueOfanyTypeanyType kv5 = new KeyValueOfanyTypeanyType();kv5.setKey("CultureName");kv5.setValue("zh-CN");//当前语种contextarray.getKeyValueOfanyTypeanyType().add(kv5);tc.setNameValueHas(contextarray);return tc ;}c)传入参数private static org.ufida.entitydata.ArrayOfUFIDAU9ISVRCVDTOOBAReceivementDTOData createRCVList(){org.ufida.entitydata.ObjectFactory dataFactory = neworg.ufida.entitydata.ObjectFactory();//创建DTO集合,也就是参数要求的对象。
org.ufida.entitydata.ArrayOfUFIDAU9ISVRCVDTOOBAReceivementDTOData rcvDToArray = dataFactory.createArrayOfUFIDAU9ISVRCVDTOOBAReceivementDTOData();//DTO集合中的每个对象,都需要这样创建出来。
UFIDAU9ISVRCVDTOOBAReceivementDTOData headerData =dataFactory.createUFIDAU9ISVRCVDTOOBAReceivementDTOData();// 表头赋值headerData.setSysState(ObjectState.INSERTED);//“新建”标记符XMLGregorianCalendar timeValue = new XMLGregorianCalendarImpl();timeValue.setYear(2010);timeValue.setMonth(4);timeValue.setDay(2);timeValue.setHour(10);timeValue.setMinute(35);timeValue.setSecond(30);headerData.setMBusinessDate(timeValue); // 日期//单据类型UFIDAU9PMDTOsBESimp4UIDTOData docType =dataFactory.createUFIDAU9PMDTOsBESimp4UIDTOData();docType.setMCode(dataFactory.createUFIDAU9PMDTOsBESimp4UIDTODataMCode("RCV01") );docType.setSysState(ObjectState.INSERTED);headerData.setMRcvDocType( dataFactory.createUFIDAU9ISVRCVDTOOBAReceivementDTO DataMRcvDocType(docType));。