java soap client_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.xml.soap.MessageFactory;

import javax.xml.soap.SOAPBody;

import javax.xml.soap.SOAPConnection;

import javax.xml.soap.SOAPConnectionFactory;

import javax.xml.soap.SOAPElement;

import javax.xml.soap.SOAPEnvelope;

import javax.xml.soap.SOAPMessage;

import javax.xml.soap.SOAPPart;

import javax.xml.transform.Source;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.stream.StreamResult;

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());

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值