java soap消息_[Java教程]java soap 操作和发送soap消息

package gov.hn12396.appintegration.mule.client;

import gov.hn12396.appintegration.mule.util.EncoderUtil;

import java.net.URL;

import java.util.Calendar;

import javax.

import javax.

import javax.

import javax.

import javax.

import javax.

import javax.

import javax.

import javax.

import javax.

import javax.

import javax.

import org.w3c.dom.Node;

/**

* 功能描述:模拟客户端A-即服务调用者,通过该类模拟客户端发送soap报文给mule,

* 同时把mule的响应报文打印出来做测试

* @author liuxp

*

*/

public class SynClient {

public static void main(String args[]) {

try {

// 创建连接

// ==================================================

SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory

.newInstance();

SOAPConnection connection = soapConnFactory.createConnection();

//  创建消息对象

// ===========================================

MessageFactory messageFactory = MessageFactory.newInstance();

SOAPMessage message = messageFactory.createMessage();

//          message.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "gb2312");

// 创建soap消息主体==========================================

SOAPPart soapPart = message.getSOAPPart();// 创建soap部分

SOAPEnvelope envelope = soapPart.getEnvelope();

SOAPBody body = envelope.getBody();

//  根据要传给mule的参数,创建消息body内容。具体参数的配置可以参照应用集成接口技术规范1.1版本

// =====================================

SOAPElement bodyElement = body.addChildElement(envelope.createName(

"process", "Request", "http://esb.service.com/"));

bodyElement.addChildElement("ServiceCode").addTextNode("10000061");

bodyElement.addChildElement("OrigAppId").addTextNode("999");

bodyElement.addChildElement("HomeAppId").addTextNode("998");

Calendar c = Calendar.getInstance();

String reqTime = String.valueOf(c.getTimeInMillis());

bodyElement.addChildElement("ReqTime").addTextNode(reqTime);

bodyElement.addChildElement("IpAddress").addTextNode("10.212.40.112");

bodyElement.addChildElement("OrigSerialNo").addTextNode("201205242011");

//(ServiceCode+ OrigAppId+ ReqTime+ IpAddress)签名

String AppSignature = "10000061"+"999"+reqTime+"10.212.40.112"+"123456";

bodyElement.addChildElement("AppSignature").addTextNode(EncoderUtil.md5(AppSignature));

bodyElement.addChildElement("Version").addTextNode("014");

//          bodyElement.addChildElement("RelSessionId").addTextNode("RelSessionId");

//          bodyElement.addChildElement("ReplyCode").addTextNode("ReplyCode");

bodyElement.addChildElement("ReplyVersion").addTextNode("05");

bodyElement.addChildElement("TimeOut").addTextNode("30");

//          bodyElement.addChildElement("FtpDir").addTextNode("FtpDir");

//          bodyElement.addChildElement("FileList").addTextNode("FileList");

bodyElement.addChildElement("serviceParas").addTextNode("apptestapptest");

// Save the message

message.saveChanges();

// 打印客户端发出的soap报文,做验证测试

System.out.println(" REQUEST: ");

message.writeTo(System.out);

System.out.println(" ");

/*

* 实际的消息是使用 call()方法发送的,该方法接收消息本身和目的地作为参数,并返回第二个 SOAPMessage 作为响应。

* call方法的message对象为发送的soap报文,url为mule配置的inbound端口地址。

*/

URL url = new URL("http://localhost:9003/WebServiceSyn/process");

System.out.println(url);

// 响应消息

// ===========================================================================

SOAPMessage reply = connection.call(message, url);

//reply.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "gb2312");

// 打印服务端返回的soap报文供测试

System.out.println("RESPONSE:");

// ==================创建soap消息转换对象

TransformerFactory transformerFactory = TransformerFactory

.newInstance();

Transformer transformer = transformerFactory.newTransformer();

// Extract the content of the reply======================提取消息内容

Source sourceContent = reply.getSOAPPart().getContent();

// Set the output for the transformation

StreamResult result = new StreamResult(System.out);

transformer.transform(sourceContent, result);

// Close the connection 关闭连接 ==============

System.out.println("");

connection.close();

/*

* 模拟客户端A,异常处理测试

*/

SOAPBody ycBody = reply.getSOAPBody();

Node ycResp = ycBody.getFirstChild();

System.out.print("returnValue:"+ycResp.getTextContent());

} catch (Exception e) {

e.printStackTrace();

System.out.println(e.getMessage());

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于源码流程分析(SOPA) Sources Oriented Process Analysis SOPA为分析java流程的eclipse插件,其主要用途如下: 1. 孙子曰:凡治众如治寡,分数是也。每个交易所涉及的方法众多,如何才能整体把握所用到的方法很关键。流程分析图将众多方法进行层次整理,使开发人员方便的理解各个方法的用途及调用过程。 2. 快速画交易流程图。通过debug方式人工画出交易流程图有诸多困难。一是因为很慢,二是因为非常耗费精力。对于一个只包含10个方法的交易,想画出流程图就已经很困难,即使画出也要耽误很多时间,30个方法以上的交易人工几乎难以出流程。SOPA能够快速的画出流程图,几十万个方法也是在几分钟内完成。 3. 纠错功能。JAVA开发现有的纠错机制仅有Debug一种方式,debug给人带来方便的同时也会有一些不足之处,比如debug过程有时会比较慢。假如程序已经自动生成流程分析图,当程序出现异常时,将生成的异常流程分析图跟正确的流程分析图进行比对,找到哪个方法没有调用,就可以快速定位到是哪个方法出现了异常。 4. 团队协作更加简单。一个工程往往是架构师先搭框架,然后再将各个细化的任务进行分配。而各个方法之间的调用、一个功能的实现机制等往往需要很多的沟通,这就造成了相互之间团队协作的效率不够高。如果架构师将流程分析图发给其他开发人员,则会使其他人对项目的架构一目了然,从而能够快速的领会架构师的意图,工作效率也就随之提高。 5. 使工程维护更加简单。当开发人员写完代码后的较短时间内会记得交易的流程。但是开发完成很长时间后,即使自己写的交易有时也会忘掉流程,所以一个交易的流程需要存档。当一个工程上线之后就会把工程交给维护人员进行维护,开发人员自然转到其他项目组。当程序出现问题时,维护人员对照已经存档的流程分析图进行比对,就可以快速维护完成。 6. 加强学习知识能力。在程序开发方面,公司的员工流动性一般会比较大,而每个公司都希望新来的员工快速掌握公司所需要的技能。每个员工都需要经常学习各种知识,怎样快速掌握某一方面的知识也很重要。当程序员预先拿到一个交易的流程分析图,看图就能快速精确的掌握所要学习的知识,然后再找到相应的代码进行学习。这样就大大提高了学习效率。 7. 电子图纸化管理。JAVA工程有很多配置文件,单纯看配置文件有时难以掌握一个交易的流程,甚至花很长时间也难以搞懂交易的流程。SOPA将交易流程生成到文件,类似于一个建筑的图纸一样,使开发人员通过看流程分析图可以在短时间内就可以了解整个交易的流程,效率也就随之提高。 8. 流程简化模式。每个交易所涉及的方法如果很多就会眼花缭乱,此时就需要简化处理。将重复的方法去掉,也会使交易变得容易理解。 9. 显示注释功能。有些方法会有自己的说明,我们会将方法说明显示到流程分析图上,使理解流程更加简单。 10. SOPA能为每位员工每年节省几个月的时间。 临沂谷王信息技术有限公司 邮箱:guwang_org@163.com

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值