1.让使用websercice像使用jdbc一样容易。
package com.why.client;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName;
import javax.xml.soap.AttachmentPart;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.MimeHeader;
import javax.xml.soap.MimeHeaders;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;
/**
* SAAJ中使用MTOM方式上传附件时,需设置Content-Type为application/xop+xml; charset=utf-8; type="text/xml",
* 否则服务器端接收不到附件。
*
* @author why
*
*/
public class SoapClient {
public static void main(String[] args) throws Exception{
// printContext();
// selectCustomerByName();
selectMaxAgeCustomer();
}
/**
* 调用一个无参函数
* @throws Exception
*/
public static void printContext() throws Exception{
// 获取SOAP连接工厂
SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();
// 从SOAP连接工厂创建SOAP连接对象
SOAPConnection connection = factory.createConnection();
// 获取消息工厂
// MessageFactory mFactory = MessageFactory.newInstance();
// 也可用如下方式获取消息工厂
QName serviceName = new QName("http://service.why.com/", "HelloService");
QName portName = new QName("http://service.why.com/", "HelloServicePort");
String endpointAddress = "http://127.0.0.1:8080/helloService";
String operationNameString = "printContext";
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING,endpointAddress);
Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class,
Service.Mode.MESSAGE);
BindingProvider bp = (BindingProvider) dispatch;
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, operationNameString);
SOAPBinding soapBinding = (SOAPBinding)bp.getBinding();
soapBinding.setMTOMEnabled(true);//启用MTOM传输附件方式
MessageFactory mFactory = soapBinding.getMessageFactory();
// 从消息工厂创建SOAP消息对象
SOAPMessage message = mFactory.createMessage();
// 创建SOAPPart对象
SOAPPart part = message.getSOAPPart();
// 创建SOAP信封对象
SOAPEnvelope envelope = part.getEnvelope();
// 创建SOAPHeader对象
SOAPHeader header = message.getSOAPHeader();
// 创建SOAPBody对象
SOAPBody body = envelope.getBody();
// 创建XML的根元素
SOAPBodyElement bodyElementRoot = body.addBodyElement(new QName("http://server.why.com/", "printContext", "ns1"));
// 访问Web服务地址
SOAPMessage reMessage = connection.call(message, new URL("http://127.0.0.1:8080/helloService"));
// 控制台输出返回的SOAP消息
OutputStream os = System.out;
reMessage.writeTo(os);
connection.close();
}
/**
* 调用一个在soap:HEADER中传递参数的函数
* @throws Exception
*/
public static void selectCustomerByName() throws Exception{
// 获取SOAP连接工厂
SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();
// 从SOAP连接工厂创建SOAP连接对象
SOAPConnection connection = factory.createConnection();
// 获取消息工厂
MessageFactory mFactory = MessageFactory.newInstance();
// 从消息工厂创建SOAP消息对象
SOAPMessage message = mFactory.createMessage();
// 创建SOAPPart对象
SOAPPart part = message.getSOAPPart();
// 创建SOAP信封对象
SOAPEnvelope envelope = part.getEnvelope();
// 创建SOAPHeader对象
SOAPHeader header = message.getSOAPHeader();
// 创建SOAPBody对象
SOAPBody body = envelope.getBody();
// 创建XML的根元素
SOAPHeaderElement headerElementRoot = header.addHeaderElement(new QName("http://server.why.com/", "c", "ns1"));
SOAPBodyElement bodyElementRoot = body.addBodyElement(new QName("http://server.why.com/", "selectCustomerByName", "ns1"));
headerElementRoot.addChildElement(new QName("name")).addTextNode("why");
// 访问Web服务地址
SOAPMessage reMessage = connection.call(message, new URL("http://127.0.0.1:8080/helloService"));
// 控制台输出返回的SOAP消息
OutputStream os = System.out;
reMessage.writeTo(os);
// 输出SOAP消息中的附件
Iterator<AttachmentPart> it = reMessage.getAttachments();
while (it.hasNext()) {
InputStream ins = it.next().getDataHandler().getInputStream();
byte[] b = new byte[ins.available()];
OutputStream ous = new FileOutputStream("c:\\aaa.jpg");
while (ins.read(b) != -1) {
ous.write(b);
}
ous.close();
}
connection.close();
}
/**
* 调用一个在soap:Body中传递参数的函数
* @throws Exception
*/
public static void selectMaxAgeCustomer() throws Exception{
// 获取SOAP连接工厂
SOAPConnectionFactory factory = SOAPConnectionFactory.newInstance();
// 从SOAP连接工厂创建SOAP连接对象
SOAPConnection connection = factory.createConnection();
// 获取消息工厂
MessageFactory mFactory = MessageFactory.newInstance();
// 从消息工厂创建SOAP消息对象
SOAPMessage message = mFactory.createMessage();
// 创建SOAPPart对象
SOAPPart part = message.getSOAPPart();
// 创建SOAP信封对象
SOAPEnvelope envelope = part.getEnvelope();
// 创建SOAPHeader对象
SOAPHeader header = message.getSOAPHeader();
// 创建SOAPBody对象
SOAPBody body = envelope.getBody();
// 设置Content-Type
MimeHeaders hd = message.getMimeHeaders();
hd.setHeader("Content-Type", "application/xop+xml; charset=utf-8; type=\"text/xml\"");
Iterator ite = hd.getAllHeaders();
while(ite.hasNext()){
MimeHeader mimeHeader = (MimeHeader)ite.next();
System.out.println(mimeHeader.getName()+"="+mimeHeader.getValue());
}
// 创建XML的根元素
SOAPBodyElement bodyElementRoot = body.addBodyElement(new QName("http://server.why.com/", "selectMaxAgeCustomer", "ns1"));
// 创建Customer实例1
SOAPElement elementC1 = bodyElementRoot.addChildElement(new QName("arg0"));
elementC1.addChildElement(new QName("id")).addTextNode("1");
elementC1.addChildElement(new QName("name")).addTextNode("A");
elementC1.addChildElement(new QName("birthday")).addTextNode("1989-01-28T00:00:00.000+08:00");
// 创建附件对象
AttachmentPart attachment = message.createAttachmentPart(new DataHandler(new FileDataSource("c:\\c1.jpg")));
// 设置Content-ID
attachment.setContentId("<" + UUID.randomUUID().toString() + ">");
attachment.setMimeHeader("Content-Transfer-Encoding", "binary");
message.addAttachmentPart(attachment);
SOAPElement elementData = elementC1.addChildElement(new QName("imageData"));
// elementData.addAttribute(envelope.createName("href"),
// "cid:" + attachment.getContentId());
// 添加XOP支持
elementData.addChildElement(
new QName("http://www.w3.org/2004/08/xop/include", "Include","xop"))
.addAttribute(new QName("href"),"cid:" + attachment.getContentId().replaceAll("<", "").replaceAll(">", ""));
// 创建Customer实例2
SOAPElement elementC2 = bodyElementRoot.addChildElement(new QName("arg1"));
elementC2.addChildElement(new QName("id")).addTextNode("2");
elementC2.addChildElement(new QName("name")).addTextNode("B");
elementC2.addChildElement(new QName("birthday")).addTextNode("1990-01-28T00:00:00.000+08:00");
AttachmentPart attachment2 = message.createAttachmentPart(new DataHandler(new FileDataSource("c:\\c2.jpg")));
attachment2.setContentId("<" + UUID.randomUUID().toString() + ">");
message.addAttachmentPart(attachment2);
SOAPElement elementData2 = elementC2.addChildElement(new QName("imageData"));
// elementData2.addAttribute(envelope.createName("href"),
// "cid:" + attachment2.getContentId());
elementData2.addChildElement(
new QName("http://www.w3.org/2004/08/xop/include", "Include","xop"))
.addAttribute(new QName("href"),"cid:" + attachment2.getContentId().replaceAll("<", "").replaceAll(">", ""));
// 控制台输出发送的SOAP消息
OutputStream os = new ByteArrayOutputStream();
message.writeTo(os);
String soapStr = os.toString();
System.out.println("\n@@@@@@@@@@@@@@@@@@发送的SOAP消息\n"+soapStr+"\n@@@@@@@@@@@@@@@@@@");
// 访问Web服务地址
SOAPMessage reMessage = connection.call(message, new URL("http://127.0.0.1:8080/helloService"));
// 控制台输出返回的SOAP消息
OutputStream baos = new ByteArrayOutputStream();
reMessage.writeTo(baos);
String soapStr2 = baos.toString();
System.out.println("\n#############\n"+soapStr2+"\n################");
// // 输出SOAP消息中的第一个子元素的元素名称
System.out.println("\n<<<<<<<<<<<<<<<<<<<" + reMessage.getSOAPBody().getFirstChild().getLocalName());
// 输出SOAP消息中的附件
Iterator<AttachmentPart> it = reMessage.getAttachments();
while (it.hasNext()) {
InputStream ins = it.next().getDataHandler().getInputStream();
byte[] b = new byte[1024];
OutputStream ous = new FileOutputStream("c:\\bbb.jpg");
while (ins.read(b) != -1) {
ous.write(b);
}
ous.close();
}
connection.close();
}
}
转载:
http://wuhongyu.iteye.com/blog/810571
分享到:
相关推荐
在本篇主题“JAVA6开发WebService(四)——SAAJ调用WebService”中,我们将探讨如何使用Java API for XML Messaging (SAAJ)来与WebService进行交互。SAAJ是Java平台中用于处理SOAP消息的API,它提供了创建、解析和...
WebService接口调用工具类是Java开发中常见的一种技术,用于与远程服务进行通信,尤其在集成不同系统或服务时非常关键。在这个场景中,"webservice接口调用工具类依赖jar包"指的是为了实现对WebService接口的调用,...
在IT行业中,Web服务是一种广泛使用的接口通信方式,允许不同应用程序之间进行数据交换。当我们无法直接引用特定的jar包或者面临jar包冲突时,通过HTTP POST方式调用WebService成为了一种有效的解决方案。本文将深入...
标题"saaj-api.jar.zip_saaj-api_saaj-api-1.3.jar_saaj-api.jar" 提到了几个关键元素:'saaj-api.jar.zip' 是压缩文件的名称,暗示了里面包含的文件与SAJJ(SOAP消息抽象API)有关。'saaj-api' 是一个重复出现的...
saaj-api-1.3.jar saaj-api-1.3.jar
### 泛微ecology9.0文档(DocService)WebService接口使用详解 #### 一、部署准备工作 在开始使用泛微ecology9.0的DocService WebService接口之前,需要进行一系列的部署准备工作。 ##### 1. 更新lib目录下的文件...
saaj-impl-1.3.jar saaj-impl-1.3.jar
确保这些jar包在项目的类路径中,才能正确地使用Axis调用WebService接口。 三、调用流程 1. 创建代理对象:首先,根据WSDL文件生成Java服务代理类。可以使用Axis的wsdl2java工具,或者直接在Eclipse等IDE中导入WSDL...
在描述中提到的"利用AXIS,通过wsdl的url直接调用webservice接口时所需要的jar包",这些JAR文件主要包括以下组件: - **axis.jar**:这是AXIS的核心库,包含了处理SOAP消息、WSDL解析和生成Stub的主要类。 - **...
接下来,`saaj-api-1.3.jar`是SOAP消息抽象模型(SOAP with Attachments API for Java)的接口定义,它定义了与SOAP消息交互所需的接口和类。SOAP是一种基于XML的协议,用于在分布式系统之间交换结构化和类型化的...
标题中的“axis调用webservice实例”涉及到的是在Java开发中使用Apache Axis库来调用Web服务的过程。Apache Axis是一个开放源代码的SOAP栈,它允许开发者创建和部署Web服务,同时也提供了客户端工具来调用这些服务。...
标题中的“详解axis调用webservice实例”表明我们将探讨如何使用Apache Axis库来调用Web服务。Apache Axis是一个开源工具,它允许Java开发者创建、部署和使用Web服务。在这个实例中,我们会有机会看到实际的Java代码...
- JAXM&SAAJ:JAXM(Java API for XML Messaging)是用于发送和接收XML消息的规范,而SAAJ(SOAP with Attachments API for Java)是与JAXM配合使用,支持SOAP消息的构建和解析,包括附件的传输。 - JAX-WS:JAX-...
### JAVA的WebService支持-CXF #### 一、概述与背景 WebService作为一种标准的服务技术,它允许不同系统之间通过网络进行通信。随着企业级应用对于跨系统、跨平台交互的需求日益增长,WebService因其开放性及标准...
SAAJ提供了创建、发送、接收和处理SOAP消息的接口和类,使得Java开发者能够方便地与Web Service进行交互。 在面向服务的架构(SOA)中,服务被设计为可重用的业务逻辑单元,具有清晰、标准化的接口,允许松散耦合的...
在Java开发中,调用HTTPS发布的Web Service接口是一项常见的任务,尤其在企业级应用中,HTTPS提供了安全的数据传输。本文将详细介绍如何使用Apache Axis库来实现这一功能,并提供相关步骤和注意事项。 首先,理解...
标题中的"axis.jar"和"axis-saaj-1.4.jar"是两个重要的Java库文件,它们在Web服务开发中扮演着核心角色。本文将详细介绍这两个库以及它们与Web服务的关系。 首先,让我们深入了解Axis。Axis是Apache软件基金会的一...
### WebService接口实现详解 #### 一、搭建测试环境 为了实现WebService接口,首先需要搭建一个测试环境。这里以电子路演系统与ECM的集成作为示例,具体步骤如下: 1. **新建Web工程**:创建名为`OARSInterface`...
### 文档(DocService)WebService接口使用说明 #### 一、概述 本文档旨在详细介绍如何在Ecology系统中部署和使用文档(DocService)WebService接口。文档接口遵循标准的Web Service规范,支持通过标准Web Service...
- 使用Java JAX-WS(Java API for XML Web Services)框架,可以通过注解轻松创建WebService接口和服务实现。 - 编写WSDL文件,或者由JAX-WS自动生成。 - 将服务部署在支持JAX-WS的服务器上,如Tomcat、Glassfish...