Parse the WSDL file PI and send the data to SAP About Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFir

First of all, I received the WSDL provided by SAP PI to parse the WSDL picture. I can’t see clearly and I don’t have time to find me wx18681014349
There are two parsing methods (analysis with eclipse and parsing with myeclipse. Note that parsing with myeclipse requires xfire jar package)
1 Use eclipse to analyze
First copy the wsdl file to the back of SRC
as follows


Then create a web service client and select the wsdl file

Analyze and form the following file
Use these interface classes to transmit OA data codes such as

Pay attention here to modify the original class

The original code is as follows with some kind of information
package derucci.com.oa.pda;

import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import mm.oa.com.derucci.DT_PR_Approve_Status_ReqItem;
import mm.oa.com.derucci.DT_PR_Approve_Status_Resp;
import mm.oa.com.derucci.SI_PR_Approve_Status_OutServiceLocator;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.Channel;

import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import weaver.workflow.request.RequestManager;

import com.dongbao.action.Hrutil;
import com.dongbao.util.DongBaoUtil;
import com.kingdee.action.BaseAction;

import derucci.com.oa.mm.DTPRApproveStatusReq;
import derucci.com.oa.mm.DTPRApproveStatusResp;
import derucci.com.oa.mm.Pi2oa;
import derucci.com.oa.mm.SI_PR_Approve_Status_Out;
import derucci.com.oa.mm.SI_PR_Approve_Status_OutServiceClient;
import derucci.com.oa.mm.DTPRApproveStatusReq.Item;

public class Pdachang2pi extends BaseAction{
Log log = LogFactory.getLog(Pdachang2pi.class);

public String execute(RequestInfo ri) {
Log log = LogFactory.getLog(Pdachang2pi.class);
DongBaoUtil dgUtil = new DongBaoUtil();
try{
Property[] mainprop = ri.getMainTableInfo().getProperty();
/* piutil p =new piutil();
p.getPasswordAuthentication();
p.pi_util();*/
RequestManager rm = ri.getRequestManager();
Map<String,String> mainField = dgUtil.array2map(mainprop);
// requestid=ri.getRequestid();
String requestname=ri.getRequestManager().getRequestname();
String PDA_ID=mainField.get("lx") == ""?"":mainField.get("lx");//单号;
//获取主表信息
String WERKS = mainField.get("gc") == ""?"":mainField.get("gc");//工厂
//String cgz = mainField.get("cgz")== ""?"":mainField.get("cgz");//采购组
String STA_DD = mainField.get("smrqq")== ""?"":mainField.get("smrqq");//申请日期
String STA_TM = mainField.get("smrqz")== ""?"":mainField.get("smrqz");//申购人
String END_DD = mainField.get("smsjq")== ""?"":mainField.get("smsjq");//申购人
String END_TM = mainField.get("smsjz")== ""?"":mainField.get("smsjz");//申购人
String POS_DD = mainField.get("ggsmrq")== ""?"":mainField.get("ggsmrq");//申购人

SI_ScanDateChange_OutServiceLocator local = new SI_ScanDateChange_OutServiceLocator();

SI_ScanDateChange_Out out = local.getHTTP_Port();

DT_ScanDateChange_ReqITEM[] MT_ScanDateChange_Req = new DT_ScanDateChange_ReqITEM[1];

DT_ScanDateChange_ReqITEM item = new DT_ScanDateChange_ReqITEM();
item.setEND_DD(END_DD);
item.setEND_TM(END_TM);
item.setPDA_ID(PDA_ID);
item.setPOS_DD(POS_DD);
item.setSTA_DD(STA_DD);
item.setSTA_TM(STA_TM);
item.setWERKS(WERKS);
MT_ScanDateChange_Req[0] = item;
DT_ScanDateChange_Resp resp = out.SI_ScanDateChange_Out(MT_ScanDateChange_Req);

// String stat = resp.getItem().getStatus();
String stat = resp.getITEM().getMESSAGE();
this.log.error("返回信息"+stat);
if("S".equals(stat)){
ri.getRequestManager().setMessagecontent("更新数据成功");
return Action.SUCCESS;
}else{
return Action.FAILURE_AND_CONTINUE;
}
}catch(Exception e){
log.error(" exception :",e);
e.printStackTrace();
ri.getRequestManager().setMessagecontent("修改SAP状态失败! "+e.getMessage());
return Action.FAILURE_AND_CONTINUE;
}
}


}


利用myeclipse 解析
同样是建李 web service client 选择XFire 还是ws我忘了 试试吧 在传入对方用户名密码时 的方法不同 代码会贴在下面
package com.sap.action;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

import com.sap.pi.creaatepr.DTPRCreateReq;
import com.sap.pi.creaatepr.DTPRCreateResp;
import com.sap.pi.creaatepr.SI_PR_Create_Out;
import com.sap.pi.creaatepr.SI_PR_Create_OutServiceClient;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.dongbao.util.DongBaoUtil;

import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.Channel;
import weaver.conn.RecordSet;
import weaver.formmode.setup.ModeRightInfo;
import weaver.interfaces.workflow.action.Action;
import weaver.interfaces.workflow.action.BaseAction;
import weaver.join.hrm.in.HrmResource;
import weaver.soa.workflow.request.DetailTable;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import weaver.soa.workflow.request.Row;
import weaver.workflow.form.FormManager;
import weaver.workflow.request.RequestManager;

/**
* 采购申请凭证创建
* @author huangjianjian
*
*/
public class CreatePr extends BaseAction{
Log log = LogFactory.getLog(getClass());
String mes="";
String mes1="";
String requestid="";
public String execute(RequestInfo ri){
boolean flag = false;
DTPRCreateReq data=new DTPRCreateReq();
try {
DongBaoUtil dgUtil = new DongBaoUtil();
Property[] mainprop = ri.getMainTableInfo().getProperty();
Map<String,String> mainField = dgUtil.array2map(mainprop);
requestid=ri.getRequestid();
String requestname=ri.getRequestManager().getRequestname();
String request1=mainField.get("dh") == ""?"":mainField.get("dh");//单号;
//获取主表信息
String BSART = mainField.get("BSART") == ""?"":mainField.get("BSART");//采购凭证类型
//String cgz = mainField.get("cgz")== ""?"":mainField.get("cgz");//采购组
String sqrq = mainField.get("sqrq")== ""?"":mainField.get("sqrq");//申请日期
String sgr = mainField.get("sgr")== ""?"":mainField.get("sgr");//申购人
String sqr = mainField.get("sqr")== ""?"":mainField.get("sqr");//申购人
RecordSet recordSet=new RecordSet();
recordSet.execute("select * from hrmresource where id="+sgr);
recordSet.next();
sgr=recordSet.getString("lastname");
recordSet.execute("select * from hrmresource where id="+sqr);
recordSet.next();
sgr+="-申请人:"+recordSet.getString("lastname");
String gc = mainField.get("sqrssgs")== ""?"":mainField.get("sqrssgs");//工厂
data.setTEXTHEADER(request1);
log.error(request1);
//获取明细
DetailTable[] detailTable = ri.getDetailTableInfo().getDetailTable();

DetailTable dt = null;
dt = detailTable[0];
Integer rows = dt.getRowCount();
Row row = null;
for(int i= 0;i<rows;i++){
DTPRCreateReq.REQUISITIONITEMS requisitionitems=new DTPRCreateReq.REQUISITIONITEMS();
row = dt.getRow(i);
Map<String,String> mapDetail = dgUtil.array2Row(row);
String cgz = dgUtil.getField(mapDetail,"cgz")== ""?"":dgUtil.getField(mapDetail,"cgz");//采购组
String wlz = dgUtil.getField(mapDetail,"wlz")== ""?"":dgUtil.getField(mapDetail,"wlz");//物料组
String TXZ01 = dgUtil.getField(mapDetail,"TXZ01")== ""?"":dgUtil.getField(mapDetail,"TXZ01");//物料描述
String MENGE = dgUtil.getField(mapDetail,"MENGE")== ""?"":dgUtil.getField(mapDetail,"MENGE");//数量
String MATNR = dgUtil.getField(mapDetail,"MATNR")== ""?"":dgUtil.getField(mapDetail,"MATNR");//物料编号
String kcdd = dgUtil.getField(mapDetail,"kcdd")== ""?"":dgUtil.getField(mapDetail,"kcdd");//库存地点
String danwei = dgUtil.getField(mapDetail,"danwei")== ""?"":dgUtil.getField(mapDetail,"danwei");//采购申请计量单位
String LFDAT = dgUtil.getField(mapDetail,"LFDAT")== ""?"":dgUtil.getField(mapDetail,"LFDAT");//交货日期
String PREIS = dgUtil.getField(mapDetail,"PREIS")== ""?"":dgUtil.getField(mapDetail,"PREIS");//采购需求中的价格
String cgsqlx = dgUtil.getField(mapDetail,"cgsqlx")== ""?"":dgUtil.getField(mapDetail,"cgsqlx");//采购申请类型
String xxms = dgUtil.getField(mapDetail,"xxms")== ""?"":dgUtil.getField(mapDetail,"xxms");//详细描述
String ANLN1 = dgUtil.getField(mapDetail,"ANLN1")== ""?"":dgUtil.getField(mapDetail,"ANLN1");//资产编号
String cbzx = dgUtil.getField(mapDetail,"cbzx")== ""?"":dgUtil.getField(mapDetail,"cbzx");//成本中心
if(cgsqlx.equalsIgnoreCase("0")) {
requisitionitems.setDOCTYPE("ZFY");
log.error("ZFY");
}else{
requisitionitems.setDOCTYPE("ZGZ");
log.error("ZGZ");
}

RecordSet set =new RecordSet();
set.execute("select pname from uf_purchase_select where id="+cgz);
if(set.next()) {
requisitionitems.setPURGROUP(set.getString("pname"));
log.error(set.getString("pname"));
}

requisitionitems.setSHORTTEXT(TXZ01);
log.error(TXZ01);
requisitionitems.setMATERIAL(MATNR);
log.error(MATNR);
set.execute("select pname from uf_purchase_select where id="+wlz);
if(set.next()) {
requisitionitems.setMATGRP(set.getString("pname"));
log.error(set.getString("pname"));
}
requisitionitems.setQUANTITY(MENGE);
log.error(MENGE);
set.execute("select pname from uf_purchase_select where id="+danwei);
if(set.next()) {
requisitionitems.setUNIT(set.getString("pname"));
log.error(set.getString("pname"));
}
gc="1010";
requisitionitems.setPLANT(gc);
log.error(gc);
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd" );
SimpleDateFormat sdf1 = new SimpleDateFormat( "yyyyMMdd" );
Date date = sdf.parse( LFDAT);
log.error(sdf1.format(date));
requisitionitems.setDELIVDATE(sdf1.format(date));
log.error(PREIS);
requisitionitems.setSTORELOC(kcdd);
requisitionitems.setCAMTBAPI(PREIS);
if(cgsqlx.equalsIgnoreCase("0")) {
requisitionitems.setACCTASSCAT("K");
log.error("K");
}else{
requisitionitems.setACCTASSCAT("A");
log.error("A");
}
requisitionitems.setPREQNAME(sgr);
log.error(sgr);
DTPRCreateReq.REQUISITIONITEMS.REQUISITIONACCOUNTASSIGNMENT requisitionaccountassignment=new DTPRCreateReq.REQUISITIONITEMS.REQUISITIONACCOUNTASSIGNMENT();
DTPRCreateReq.REQUISITIONITEMS.REQUISITIONITEMTEXT requisitionitemtext=new DTPRCreateReq.REQUISITIONITEMS.REQUISITIONITEMTEXT();
requisitionaccountassignment.setASSETNO(ANLN1);
log.error(ANLN1);
requisitionaccountassignment.setCOSTCTR(cbzx);
log.error(cbzx);

requisitionitems.getREQUISITIONACCOUNTASSIGNMENT().add(requisitionaccountassignment);
requisitionitemtext.setTEXTLINE(xxms);
requisitionitems.getREQUISITIONITEMTEXT().add(requisitionitemtext);
data.getREQUISITIONITEMS().add(requisitionitems);
}

SI_PR_Create_OutServiceClient client = new SI_PR_Create_OutServiceClient();

//create a default service endpoint
SI_PR_Create_Out service0 = client.getHTTP_Port();
Client client1=Client.getInstance(service0);
client1.setProperty(Channel.USERNAME, "POCONNECT");
client1.setProperty(Channel.PASSWORD, "Passw0rd");
DTPRCreateResp resp=service0.sI_PR_Create_Out(data);
mes1="";
for(DTPRCreateResp.Item a:resp.getItem())
{

mes1+=a.getMESSAGE()==null?"":a.getMESSAGE();
if(!a.getPREQNO().isEmpty()&&a.getTYPE().equalsIgnoreCase("S"))
{ mes+=a.getPREQNO()==null?"":a.getPREQNO()+" ";}
}

}
catch (Exception e) {
e.printStackTrace();
log.error("生成采购单失败!"+e.getMessage()+mes1);
log.error("生成采购单失败!"+e.getMessage()+mes);
ri.getRequestManager().setMessagecontent("生成采购单失败:"+e.toString());
return Action.FAILURE_AND_CONTINUE;
}

if(mes.isEmpty()){
ri.getRequestManager().setMessagecontent("生成采购单失败:"+mes1);
return Action.FAILURE_AND_CONTINUE;
}else {
RecordSet set1 =new RecordSet();
FormManager formManager = new FormManager();
String tablename = formManager.getTablename(ri.getRequestManager().getFormid());
set1.execute("update " + tablename + " set BANFN='"+mes+"' where requestid="+requestid);
log.error("生成采购单!"+mes1);
mes="";
return Action.SUCCESS;
}
}
}

Guess you like

Origin blog.csdn.net/weixin_41839503/article/details/80505505