最近刚好使用到soap应用,在网上搜到这边博客感觉还不错,先收藏了。
原址:http://liuxueping1987.iteye.com/blog/1600651
- 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("<param><name>apptest</name><password>apptest</password></param>");
- // 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());
- }
- }
- }
转载于:https://blog.51cto.com/shuaigee/1133226