`
liuxueping1987
  • 浏览: 63932 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java soap api操作和发送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("<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());
		}
	}
}

分享到:
评论
3 楼 q280499693 2014-03-04  
报service不能识别SOAPACTION请求头,如果是调用.net的不成功~不知道什么问题。
2 楼 guicaizhou 2013-06-13  
SOAPMessage reply = connection.call(message, url); 
这句报java.lang.ClassCastException
啥情况
1 楼 rhtwj6231 2013-04-09  
请问如果要添加header的内容怎么弄呢?我这样添加会抛异常:
SOAPElement usernameh = header.addChildElement("Username");
usernameh.addTextNode(hr.getUserName());
异常:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: HeaderElements must be namespace qualified
不知道怎么弄了,请教!

相关推荐

    java调用soap接口案例

    Java调用SOAP(Simple Object Access Protocol)接口是Web服务交互中的常见操作,SOAP是一种基于XML的协议,用于在Web上交换结构化的和类型化的信息。本案例主要关注如何使用Java来实现SOAP请求并获取响应,具体我们...

    基于Servlet发送、接收SOAP消息的java源程序

    在Java中,我们可以使用SAX或DOM API来解析和构建SOAP消息。DOM API允许我们直接操作XML文档的节点,而SAX则采用事件驱动的方式处理XML流。 2. **Servlet作为SOAP客户端** - 发送SOAP请求:Servlet可以使用`java...

    java发送SOAP报文

    本文将深入探讨如何在Java环境中构建和发送SOAP消息,同时也会提及到与给定的文件相关的编程概念。 首先,我们来看`Transporter.java`这个文件。通常情况下,`Transporter`类会扮演一个角色,负责处理HTTP传输和...

    java_soap学习资料

    - `SOAPConnectionFactory`和`SOAPConnection`用于建立SOAP连接,发送和接收SOAP消息。 3. **WSDL(Web Service Description Language)**: - WSDL是SOAP服务的接口定义语言,它描述了服务的位置、使用的消息...

    JAVA_API1.6文档(中文)

    javax.xml.soap 提供用于创建和构建 SOAP 消息的 API。 javax.xml.stream javax.xml.stream.events javax.xml.stream.util javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 ...

    java+soap+webservice 调用模拟

    2. **WSDL(Web Services Description Language)**:SOAP Web服务通常由WSDL文件定义,这是一个XML文档,用于描述服务接口、操作、消息格式和绑定。Java开发者可以使用WSDL文件来生成客户端和服务端的代码。 3. **...

    Java SOAP协议

    本文旨在深入讨论SAAJ(SOAP with Attachments API for Java)和JAXM(Java API for XML Messaging)这两个关键API在Java Web服务开发中的应用。为了更好地理解本文内容,读者应当对SOAP 1.1的基本规范有初步了解,...

    用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC).

    在Java中,SAAJ(SOAP with Attachments API for Java)和JAXB(Java Architecture for XML Binding)是处理SOAP消息的重要工具。SAAJ用于构建和解析SOAP消息,而JAXB则负责XML与Java对象之间的转换。 在实际开发中...

    ArcGIS Server SOAP API

    描述:ArcGIS Server SOAP API是一种强大的工具,允许开发者通过简单对象访问协议(SOAP)来访问和操作ArcGIS Server提供的多种GIS服务。这包括地图服务、地理编码服务、网络分析服务等,使得跨平台、跨语言的GIS...

    soap.rar_SOA_SOAP java_java soap_soap

    3. **SOAP与Java的结合**:Java是广泛用于开发Web服务的编程语言,Java SOAP库如JAX-WS(Java API for XML Web Services)使得开发者可以轻松创建和消费SOAP Web服务。通过Java,你可以定义服务接口,编译为WSDL...

    JAVA输出soap报文[参考].pdf

    JAVA输出SOAP报文详解 SOAP(Simple Object Access Protocol)是一种基于XML的...输出SOAP报文是JAVA编程中的一种重要技术,通过使用SOAP API,可以轻松地创建、处理和转换SOAP报文,以便与其他系统进行交互和集成。

    SOAP实例程序,实现Java发送SOAP信息.rar

    这个压缩包文件“SOAP实例程序,实现Java发送SOAP信息.rar”显然是一个Java项目,展示了如何使用Java来创建并发送SOAP消息。在本文中,我们将深入探讨SOAP协议、Java中的SOAP客户端实现以及与C#相关的上下文。 1. *...

    SOAP.rar_SOAP java_Web Service SOAP_java soap_java web service_s

    在Java中,通常使用JAX-WS(Java API for XML Web Services)来处理SOAP消息,它提供了一种标准的方式来创建和消费Web服务。 4. **SOAP服务实现**:在Java中,可以通过实现一个接口或者继承特定的类来创建SOAP服务...

    soapAPI,包括所以方法名和参数

    ### SOAP API知识点详解 ...这些方法提供了对路由器配置和状态管理的重要支持,可以帮助开发者更好地理解和操作路由器的各种功能。通过合理利用这些API,可以实现自动化网络配置和监控,提高网络管理效率。

    SOAP消息和WSDL

    在提供的压缩包文件中,`05_soap`可能包含关于如何创建和发送SOAP消息的示例代码,`06_wsdl_client`和`05_soap_client`可能是SOAP客户端的实现,`06_wsdl`可能是一个或多个WSDL文档,用于描述服务接口。通过这些文件...

    soap与java编程指南

    Java中的`javax.xml.soap`包提供了SOAPMessage、SOAPPart、SOAPEnvelope、SOAPHeader和SOAPBody等类,用于直接操作SOAP消息。 4. **处理SOAP响应**: 客户端接收到SOAP响应后,可以通过解析SOAPBody获取返回的...

    java 调用soap

    在调用SOAP服务前,你需要一个WSDL文件,它定义了服务的接口、操作、消息格式和绑定信息。你可以通过WSDL URL获取此文件。 ### 3. 使用JAX-WS(Java API for XML Web Services) JAX-WS是Java平台上的标准API,用于...

    Java 1.6 API 中文 New

    javax.xml.soap 提供用于创建和构建 SOAP 消息的 API。 javax.xml.stream javax.xml.stream.events javax.xml.stream.util javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 ...

    java+soap整个实例包括jar包

    Java中的SOAP实现通常依赖于JAX-WS(Java API for XML Web Services)框架,它提供了一种简单的方式来创建和消费SOAP服务。JAX-WS包括几个关键组件:Service端点接口(SEI)、服务实现、WSDL(Web服务描述语言)和...

Global site tag (gtag.js) - Google Analytics