java 调用webservice接口推送数据

需求:扫描数据库表数据, 待发送,发送失败且次数不超过3次的的数据,推送到别的系统
通过对方提供的xml报文

拼接报文代码:public static String getXML(Map<String, Object> noSucDataMap) {
String title = noSucDataMap.get(“noticeName”) == null ? “” : noSucDataMap.get(“noticeName”).toString();
Object projectName = noSucDataMap.get(“tenderName”) == null ? “” : noSucDataMap.get(“tenderName”).toString();
Object RegionCode = noSucDataMap.get(“regionCode”) == null ? “” : noSucDataMap.get(“regionCode”).toString();
Object NoticeContent = noSucDataMap.get(“noticeContent”) == null ? “” : noSucDataMap.get(“noticeContent”).toString();
Object tenderType = noSucDataMap.get(“tenderType”) == null ? “” : noSucDataMap.get(“tenderType”).toString();
Object createTime = noSucDataMap.get(“createTime”);
Object bidOpenTime = noSucDataMap.get(“bid_open_time”);
DateFormat df = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss”);
String createTimeStr = df.format(createTime);
String bidOpenTimeStr = “”;
if (bidOpenTime != null) {
bidOpenTimeStr = df.format(bidOpenTime);
}else {
System.out.println(“开标时间不能为空!”);
}

    String soapXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
            "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" +
            "  <soap:Body>\n" +
            "    <InsertNoticeInfo xmlns=\"http://tempuri.org/\">\n" +
            "      <userName>test</userName>\n" +
            "      <passWord>111111</passWord>\n" +
            "      <model>\n" +
            "        <NoticeInfoId>0</NoticeInfoId>\n" +
            "        <CategoryId>0</CategoryId>\n" +
            "        <NoticeType>0</NoticeType>\n" +
            "        <Title>" + title + "</Title>\n" +
            "        <Author></Author>\n" +
            "        <Source></Source>\n" +
            "        <UploadFileExplain></UploadFileExplain>\n" +
            "        <UploadFilePath></UploadFilePath>\n" +
            "        <OwnerUnit_ContactPerson></OwnerUnit_ContactPerson>\n" +
            "        <OwnerUnit_Name></OwnerUnit_Name>\n" +
            "        <OwnerUnit_Phone></OwnerUnit_Phone>\n" +
            "        <Qualification></Qualification>\n" +
            "        <Agency_Name></Agency_Name>\n" +
            "        <Agency_ContactPerson></Agency_ContactPerson>\n" +
            "        <Agency_Phone></Agency_Phone>\n" +
            "        <Tender></Tender>\n" +
            "        <TenderType>" + tenderType + "</TenderType>\n" +
            "        <RegionCode>" + RegionCode + "</RegionCode>\n" +
            "        <ProjectName>" + projectName + "</ProjectName>\n" +
            "        <ForecastSuccessfulcandidate></ForecastSuccessfulcandidate>\n" +
            "        <TransactionAmount>0</TransactionAmount>\n" +
            "        <ProjectLeader></ProjectLeader>\n" +
            "        <NoticeContent><![CDATA[" + NoticeContent + "]]></NoticeContent>\n" +
            "        <CreateTime>" + createTimeStr + "</CreateTime>\n" +
            "        <CreateUserId></CreateUserId>\n" +
            "        <TenderDeadline>" + bidOpenTimeStr + "</TenderDeadline>\n" +
            "        <Credential></Credential>\n" +
            "        <Status>0</Status>\n" +
            "        <IsSend>true</IsSend>\n" +
            "        <Scale></Scale>\n" +
            "        <BidPerson></BidPerson>\n" +
            "        <EvaluationBidExpenses>0</EvaluationBidExpenses>\n" +
            "        <State></State>\n" +
            "        <ProjectFilingUN></ProjectFilingUN>\n" +
            "        <ProjectApprovalUN></ProjectApprovalUN>\n" +
            "        <ChapterNumber>0</ChapterNumber>\n" +
            "        <BiddingScope></BiddingScope>\n" +
            "        <BidTime>" + bidOpenTimeStr + "</BidTime>\n" +
            "        <PlanTime></PlanTime>\n" +
            "        <ProjectCondition></ProjectCondition>\n" +
            "        <BidWay></BidWay>\n" +
            "        <BidAddress></BidAddress>\n" +
            "        <PublishMedia></PublishMedia>\n" +
            "        <SectionName></SectionName>\n" +
            "        <OpenAddress></OpenAddress>\n" +
            "        <FirstPerson></FirstPerson>\n" +
            "        <FirstPrice>0</FirstPrice>\n" +
            "        <FirstProjectPerson></FirstProjectPerson>\n" +
            "        <SecondPerson></SecondPerson>\n" +
            "        <SecondPrice>0</SecondPrice>\n" +
            "        <SecondProjectPerson></SecondProjectPerson>\n" +
            "        <TenderPerson></TenderPerson>\n" +
            "        <TenderPrice>0</TenderPrice>\n" +
            "        <TenderProjectPerson></TenderProjectPerson>\n" +
            "        <CreateUsername></CreateUsername>\n" +
            "        <PriceSource></PriceSource>\n" +
            "      </model>\n" +
            "      <categoryId>" + tenderType + "</categoryId>\n" +
            "      <fBytes></fBytes>\n" +
            "      <errorString></errorString>\n" +
            "    </InsertNoticeInfo>\n" +
            "  </soap:Body>\n" +
            "</soap:Envelope>";
    return soapXML;
}

//业务逻辑
public void selLogsNoSuc() {
List<Map<String, Object>> noSucDataList = winBidCandidateDao.selLogsNoSuc();
// List sendSucCode = new ArrayList();
for (int i = 0; i < noSucDataList.size(); i++) {
Map<String, Object> noSucDataMap = noSucDataList.get(i);

        //获取报文
        String soapXML = getXML(noSucDataMap);
        WebserviceResultBean ret = sendDataAhtbaWebService(soapXML);
        int id = Integer.parseInt(String.valueOf(noSucDataMap.get("id")));
        LogsAhszbtbxxw logsAhszbtbxxwNum = winBidCandidateDao.selLogsAhsInfoById(id);
        int sendNum = logsAhszbtbxxwNum.getSendNum() + 1;
        LogsAhszbtbxxw logsAhszbtbxxwObj = new LogsAhszbtbxxw();
        logsAhszbtbxxwObj.setId(id);
        logsAhszbtbxxwObj.setSendNum(sendNum);

        //创建名字表对象
        LogsAhszbtbxxwDetail logsAhszbtbxxwDetail = new LogsAhszbtbxxwDetail();
        Object noticeId = noSucDataMap.get("noticeId");
        if (noticeId != null) {
            logsAhszbtbxxwDetail.setNoticeId(noticeId.toString());
        }
        logsAhszbtbxxwDetail.setNoticeId(noSucDataMap.get("noticeId").toString());
        logsAhszbtbxxwDetail.setSendTime(new Date());
        logsAhszbtbxxwDetail.setXml(soapXML);

        if ("true".equals(ret.getResult())) {
            logsAhszbtbxxwObj.setStates("1");
            logsAhszbtbxxwDetail.setRemarks(ret.getRemark());
            logsAhszbtbxxwDetail.setStates("1");
        } else {
            logsAhszbtbxxwObj.setStates("2");
            logsAhszbtbxxwDetail.setStates("2");
            String remark = ret.getRemark() == null ? "" : ret.getRemark();
            logsAhszbtbxxwDetail.setRemarks(ret.getResult() + remark);

// logsAhszbtbxxwDetail.setRemarks();
}
winBidCandidateDao.updateStates(logsAhszbtbxxwObj);
winBidCandidateDao.insertLogsDetail(logsAhszbtbxxwDetail);
}
System.out.println(“扫描logs_ahszbtbxxw 待发送,发送失败且次数不超过3次的公告”);
}

//调用接口逻辑

public static WebserviceResultBean sendDataAhtbaWebService(String soapXML) {
// int responseCode=500;
WebserviceResultBean ret = new WebserviceResultBean();
try {
//1:创建服务地址 接口地址
URL url = new URL(“http://60.173.235.154:9021/ahtbaWebService.asmx”);
//2:打开到服务地址的一个连接
try {
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//3.1设置发送方式:POST必须大写
connection.setRequestMethod(“POST”);
//3.2设置数据格式:Content-type
connection.setRequestProperty(“content-type”, “text/xml;charset=utf-8”);
connection.setDoInput(true);
connection.setDoOutput(true);

            //4:组织SOAP协议数据,发送给服务端

// String soapXML = getXML(“1866666666”);
byte[] b = soapXML.getBytes(); //封装数据,数据以byte方式传输
connection.setRequestProperty(“Content-Length”, String.valueOf(b.length));

            OutputStream os = connection.getOutputStream();
            os.write(b);

            //5:接收服务端的响应
            int responseCode = connection.getResponseCode();
            if (200 == responseCode) {
                InputStream is = connection.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                StringBuilder sb = new StringBuilder();
                String temp = null;

                while (null != (temp = br.readLine())) {
                    sb.append(temp);
                }
                System.out.println(sb.toString());
                String sbXML = sb.toString();
                ret = parseSoapMessage(sbXML);
            } else {
                ret.setResult(String.valueOf(responseCode));
            }

//
// InputStream is1 = connection.getErrorStream();
// InputStreamReader isr1 = new InputStreamReader(is1,“utf-8”);
// BufferedReader in = new BufferedReader(isr1);
// String inputLine;
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
// new FileOutputStream(“result.xml”)));// 将结果存放的位置
// while ((inputLine = in.readLine()) != null)
// {
// System.out.println(inputLine);
// bw.write(inputLine);
// bw.newLine();
// bw.close();
// }
// in.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return ret;
}

//解析接口返回的报文信息

/**
 * 解析soapXML
 *
 * @param soapXML
 * @return
 */
public static WebserviceResultBean parseSoapMessage(String soapXML) {
    WebserviceResultBean resultBean = new WebserviceResultBean();
    try {
        SOAPMessage msg = formatSoapString(soapXML);
        SOAPBody body = msg.getSOAPBody();
        Iterator<SOAPElement> iterator = body.getChildElements();
        parse(iterator, resultBean);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return resultBean;
}

/**
* 把soap字符串格式化为SOAPMessage
*
* @param soapString
* @return
* @see [类、类#方法、类#成员]
*/
private static SOAPMessage formatSoapString(String soapString) {
MessageFactory msgFactory;
try {
msgFactory = MessageFactory.newInstance();
SOAPMessage reqMsg = msgFactory.createMessage(new MimeHeaders(),
new ByteArrayInputStream(soapString.getBytes(“UTF-8”)));
reqMsg.saveChanges();
return reqMsg;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

/**
* 解析soap xml
*
* @param iterator
* @param resultBean
*/
private static void parse(Iterator iterator, WebserviceResultBean resultBean) {
while (iterator.hasNext()) {
SOAPElement element = iterator.next();
if (“InsertNoticeInfoResponse”.equals(element.getNodeName())) {
Iterator it = element.getChildElements();
SOAPElement el = null;
while (it.hasNext()) {
el = it.next();
if (“InsertNoticeInfoResult”.equals(el.getLocalName())) {
resultBean.setResult(el.getValue());
System.out.println("#### " + el.getLocalName() + " ==== " + el.getValue());
} else if (“errorString”.equals(el.getLocalName())) {
resultBean.setRemark(null != el.getValue() ? el.getValue() : “”);
System.out.println("#### " + el.getLocalName() + " ==== " + el.getValue());
}
}
} else if (null == element.getValue()
&& element.getChildElements().hasNext()) {
parse(element.getChildElements(), resultBean);
}
}
}

这里我的做的是个定时任务
public void selLogsNoSuc(){
System.out.println(“扫描logs_ahszbtbxxw 待发送,发送失败且次数不超过3次的公告”);
winBidCandidateService.selLogsNoSuc();
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值