jco通过连接池远程调用bapi 出现空指针 入门测试 多多帮忙
有两种方式连接sap,直接连没有问题,但是通过连接池就出现空指针错误,注释掉的是第一种方法,但是用第二种方法就在IFunctionTemplate ft = mRepository.getFunctionTemplate(name);报错at apidemo.TutorialBapi1.createFunction(TutorialBapi1.java:115)
public class TutorialBapi1 extends Object {
JCO.Client mConnection;
JCO.Repository mRepository;
static final String POOL_NAME = "Pool";
public TutorialBapi1() {
// try {
// //Change the logon information to your own system/user
// mConnection = JCO.createClient("803", // SAP client
// "10651", // userid
// "xxx", // password
// null, // language
// "192.168.100.229", // application server host name
// "00"); // system number
// mConnection.connect();
// mRepository = new JCO.Repository("ARAsoft", mConnection);
// } catch (Exception ex) {
// ex.printStackTrace();
// System.exit(1);
// }
try {
JCO.Pool pool = JCO.getClientPoolManager().getPool(POOL_NAME);
if (pool == null) {
OrderedProperties logonProperties =
OrderedProperties.load("/logon.properties");
JCO.addClientPool(POOL_NAME, // pool name
5, // maximum number of connections
logonProperties); // properties
}
mConnection = JCO.getClient(POOL_NAME);
mConnection.connect();
mRepository = new JCO.Repository("ARAsoft", mConnection);
// System.out.println(mConnection.getAttributes());
}
catch (Exception ex) {
ex.printStackTrace();
}
JCO.Function function = null;
JCO.Table codes = null;
try {
function = this.createFunction("BAPI_COMPANYCODE_GETLIST");
if (function == null) {
System.out.println("BAPI_COMPANYCODE_GETLIST"
+ " not found in SAP.");
System.exit(1);
}
mConnection.execute(function);
JCO.Structure returnStructure = function.getExportParameterList()
.getStructure("RETURN");
if (!(returnStructure.getString("TYPE").equals("") || returnStructure
.getString("TYPE").equals("S"))) {
System.out.println(returnStructure.getString("MESSAGE"));
System.exit(1);
}
codes = function.getTableParameterList().getTable(
"COMPANYCODE_LIST");
for (int i = 0; i < codes.getNumRows(); i++) {
codes.setRow(i);
System.out.println(codes.getString("COMP_CODE") + '\t'
+ codes.getString("COMP_NAME"));
}
} catch (Exception ex) {
ex.printStackTrace();
System.exit(1);
}
try {
codes.firstRow();
for (int i = 0; i < codes.getNumRows(); i++, codes.nextRow()) {
function = this.createFunction("BAPI_COMPANYCODE_GETDETAIL");
if (function == null) {
System.out.println("BAPI_COMPANYCODE_GETDETAIL"
+ " not found in SAP.");
System.exit(1);
}
function.getImportParameterList().setValue(
codes.getString("COMP_CODE"), "COMPANYCODEID");
function.getExportParameterList().setActive(false,
"COMPANYCODE_ADDRESS");
mConnection.execute(function);
JCO.Structure returnStructure = function
.getExportParameterList().getStructure("RETURN");
if (!(returnStructure.getString("TYPE").equals("")
|| returnStructure.getString("TYPE").equals("S") || returnStructure
.getString("TYPE").equals("W"))) {
System.out.println(returnStructure.getString("MESSAGE"));
}
JCO.Structure detail = function.getExportParameterList()
.getStructure("COMPANYCODE_DETAIL");
System.out.println(detail.getString("COMP_CODE") + '\t'
+ detail.getString("COUNTRY") + '\t'
+ detail.getString("CITY"));
}
} catch (Exception ex) {
ex.printStackTrace();
System.exit(1);
}
mConnection.disconnect();
}
public JCO.Function createFunction(String name) throws Exception {
try {
IFunctionTemplate ft = mRepository.getFunctionTemplate(name);
if (ft == null)
return null;
return ft.getFunction();
} catch (Exception ex) {
ex.printStackTrace();
throw new Exception("Problem retrieving JCO.Function object.");
}
}
public static void main(String args[]) {
TutorialBapi1 app = new TutorialBapi1();
}
}
补充:企业软件 , ERP/CRM