`
liuxueping1987
  • 浏览: 62975 次
  • 性别: 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接口案例

    1,利用java调用soap接口获取天气的信息;2,利用java调用soap一个特定的案例,可按自己的要求修改。

    JAVA_API1.6文档(中文)

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

    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协议

    本文主要是探讨SAAJ(SOAP with Attachment API for Java),JAXM(Java API for XML Messaging),了解SOAP在j2ee开发中的作用与其接口。JAXM和SAAJ均支持针对B2B和Web服务应用程序、基于XML的消息交换,支持诸多行业...

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

    soapAPI,包括所以方法名和参数,告诉开发者怎样调用soapAPI里面的方法。

    jakarta.xml.soap-api-1.4.2.zip

    jakarta.xml.soap-api-1.4.2.jar jakarta.xml.soap-api-1.4.2-javadoc.jar jakarta.xml.soap-api-1.4.2-sources.jar

    JavaAPI1.6中文chm文档 part1

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

    java api最新7.0

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

    cxf-rt-bindings-soap-3.0.1-API文档-中文版.zip

    标签:cxf、rt、apache、bindings、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...

    JavaAPI中文chm文档 part2

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

    maventa-java-client:为 maventa soap API 生成的 java 客户端

    为 maventa soap API 生成的 java 客户端 建造 mvn clean deploy 将以下内容添加到 maven &lt;id&gt;maventa-java-client-repo &lt;url&gt;...

    jasper-soap-api:适用于中国联通的Jasper Soap API工具

    jasper-soap-api-tools 适用于中国联通的Jasper Soap API工具。

    java rest api入门实例

    目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAP和XML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找...

    java webservice 详细开发示例介绍

    早期的基于 SOAP 的 JAVA 的 Web 服务规范 JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS规范取代,JAX-WS 是JAX-RPC 的演进 ...置公开的Web服务的相关信息和配置 SOAP 消息的相关信息。

    Java Web服务构建与运行(高清中文版).part2.rar

     1.8 Java SOAP编程API  1.9 带有复杂数据类型的Web服务  1.10 多线程端点服务发布程序  1.11 下一章 第2章 全面了解WSDL  2.1 WSDL在Web服务中的作用  2.2 WSDL文档结构 36  2.3 Amazon E-Commerce ...

    Java Web服务构建与运行(高清中文版).part1.rar

     1.8 Java SOAP编程API  1.9 带有复杂数据类型的Web服务  1.10 多线程端点服务发布程序  1.11 下一章 第2章 全面了解WSDL  2.1 WSDL在Web服务中的作用  2.2 WSDL文档结构 36  2.3 Amazon E-Commerce ...

    技巧:用JAX-RPC发送与接收SOAP消息

    北京在本技巧中,IBM开发人员RussellButek向我们介绍了JAX-RPC,这是一种JavaAPI,有了它,应用程序不需要理解SOAP消息传递协议的细节,就可以与Web服务通信。Web服务的基础之一是互操作性。意思是说Web服务相互之间...

Global site tag (gtag.js) - Google Analytics