解析WSDL 文件 PI 传数据给SAP 关于Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFir

首先接到SAP PI给提供的WSDL 解析WSDL 图片看不清没时间弄 找我wx18681014349
解析方法 有两种 (利用eclipse解析 和利用myeclipse解析,注意利用myeclipse解析需要xfire jar包)
1利用eclipse 解析
首先将wsdl 文件复制到SRC后面
如下


然后创建 web service client 选择wsdl 文件

解析形成如下文件
利用这些接口类传输OA数据 代码如

这里注意要修改一下原始类

原始代码如下 有泛微的一些类信息
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;
}
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值