第三方调用U9服务说明(Java平台)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三方调用U9服务(Java平台)
一、Java环境搭建
a)Jdk版本jdk-5_5_0_10
b)apache-cxf-2.2.4
c)开发工具Eclipse
d)配置环境变量
添加新变量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.svc
a)验证服务是否可用
如果能显示显示下面的图片说明服务可用
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.java
4.添加外部引用库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 = new
Holder<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");//当前组织ID
Long IDForUsers = new Long("1001007176447429");//当前用户ID
String 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 = new
org.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 = new
com.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);//填具体的组织ID
contextarray.getKeyValueOfanyTypeanyType().add(kv2);
KeyValueOfanyTypeanyType kv3 = new KeyValueOfanyTypeanyType();
kv3.setKey("UserID");
kv3.setValue(userid);////填具体的用户ID
contextarray.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 = new
org.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));。

//省略部分代码
//对明细进行赋值
UFIDAU9ISVRCVDTOOBARcvLineDTOData detailsData =
dataFactory.createUFIDAU9ISVRCVDTOOBARcvLineDTOData();
detailsData.setSysState(ObjectState.INSERTED);
detailsData.setMDocLineNo(10);//行号
//料品
UFIDAU9CBOSCMItemItemInfoData ItemInfoData =
dataFactory.createUFIDAU9CBOSCMItemItemInfoData();
ItemInfoData.setMItemCode(dataFactory.createUFIDAU9CBOSCMItemItemInfoDataMItemCode( "1-01-0"));
ItemInfoData.setSysState(ObjectState.INSERTED);
detailsData.setMItemInfo(dataFactory.createUFIDAU9ISVRCVDTOOBARcvLineDTODataMItemIn fo(ItemInfoData));//料品
//最终价
BigDecimal finallyPrice = new BigDecimal("3200");
detailsData.setMFinallyPriceTC(finallyPrice);。

//省略部分代码
//将明细的值放入头中
ArrayOfUFIDAU9ISVRCVDTOOBARcvLineDTOData m_m_detail = dataFactory.createArrayOfUFIDAU9ISVRCVDTOOBARcvLineDTOData();
m_m_detail.getUFIDAU9ISVRCVDTOOBARcvLineDTOData().add(detailsData);
headerData.setMRcvLines(dataFactory.createUFIDAU9ISVRCVDTOOBAReceivementDTODataMRcv Lines(m_m_detail));
//注意:任何参数的类型只要不是最简单类型,都应该通过Factory来创建。

//一般这个类型在哪个包中,Facotry也会在同样的包中有一个ObjectFacotry的类型
rcvDToArray.getUFIDAU9ISVRCVDTOOBAReceivementDTOData().add(headerData);
return rcvDToArray;
}
d)捕获异常
//捕获服务中的异常。

catch(org.ufida.UFIDAU9ISVRCVICreateRCVSRVDoServiceExceptionFaultFaultMessage ex)
{
//下面的代码可以将服务端的异常信息给显示输出来。

ServiceException ed = ex.getFaultInfo();
for (int i=0 ;i<ed.getAny().size()-1;i++)
{
System.out.println(ed.getAny().get(i).toString());
System.out.println(ed.getAny().get(i).getFirstChild().toString());
}
}
catch(Exception ex)
{
System.out.println("Error..");
System.out.println(ex.getMessage());
System.out.println(ex.getClass().toString());
System.out.println(ex.getStackTrace().toString());
}
.。

相关文档
最新文档